|
Packit |
713213 |
/*
|
|
Packit |
713213 |
* 1394-Based Digital Camera Control Library
|
|
Packit |
713213 |
*
|
|
Packit |
713213 |
* Internal functions
|
|
Packit |
713213 |
*
|
|
Packit |
713213 |
* Written by Damien Douxchamps <ddouxchamps@users.sf.net>
|
|
Packit |
713213 |
*
|
|
Packit |
713213 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
713213 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
713213 |
* License as published by the Free Software Foundation; either
|
|
Packit |
713213 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
713213 |
*
|
|
Packit |
713213 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
713213 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
713213 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
713213 |
* Lesser General Public License for more details.
|
|
Packit |
713213 |
*
|
|
Packit |
713213 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
713213 |
* License along with this library; if not, write to the Free Software
|
|
Packit |
713213 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
Packit |
713213 |
*/
|
|
Packit |
713213 |
|
|
Packit |
713213 |
#ifndef __DC1394_INTERNAL_H__
|
|
Packit |
713213 |
#define __DC1394_INTERNAL_H__
|
|
Packit |
713213 |
|
|
Packit |
713213 |
#include "config.h"
|
|
Packit |
713213 |
#include "offsets.h"
|
|
Packit |
713213 |
#include "platform.h"
|
|
Packit |
713213 |
|
|
Packit |
713213 |
typedef struct _platform_info_t {
|
|
Packit |
713213 |
const platform_dispatch_t * dispatch;
|
|
Packit |
713213 |
const char * name;
|
|
Packit |
713213 |
platform_device_list_t * device_list;
|
|
Packit |
713213 |
platform_t * p;
|
|
Packit |
713213 |
} platform_info_t;
|
|
Packit |
713213 |
|
|
Packit |
713213 |
typedef struct _dc1394camera_priv_t {
|
|
Packit |
713213 |
dc1394camera_t camera;
|
|
Packit |
713213 |
|
|
Packit |
713213 |
platform_camera_t * pcam;
|
|
Packit |
713213 |
platform_info_t * platform;
|
|
Packit |
713213 |
|
|
Packit |
713213 |
uint64_t allocated_channels;
|
|
Packit |
713213 |
int allocated_bandwidth;
|
|
Packit |
713213 |
int iso_persist;
|
|
Packit |
713213 |
} dc1394camera_priv_t;
|
|
Packit |
713213 |
|
|
Packit |
713213 |
#define DC1394_CAMERA_PRIV(c) ((dc1394camera_priv_t *)c)
|
|
Packit |
713213 |
|
|
Packit |
713213 |
typedef struct _camera_info_t {
|
|
Packit |
713213 |
uint64_t guid;
|
|
Packit |
713213 |
int unit;
|
|
Packit |
713213 |
uint32_t unit_directory;
|
|
Packit |
713213 |
uint32_t unit_dependent_directory;
|
|
Packit |
713213 |
uint32_t unit_spec_ID;
|
|
Packit |
713213 |
uint32_t unit_sw_version;
|
|
Packit |
713213 |
char * vendor;
|
|
Packit |
713213 |
char * model;
|
|
Packit |
713213 |
uint32_t vendor_id;
|
|
Packit |
713213 |
uint32_t model_id;
|
|
Packit |
713213 |
platform_device_t * device;
|
|
Packit |
713213 |
platform_info_t * platform;
|
|
Packit |
713213 |
} camera_info_t;
|
|
Packit |
713213 |
|
|
Packit |
713213 |
struct __dc1394_t {
|
|
Packit |
713213 |
int num_platforms;
|
|
Packit |
713213 |
platform_info_t * platforms;
|
|
Packit |
713213 |
|
|
Packit |
713213 |
int num_cameras;
|
|
Packit |
713213 |
camera_info_t * cameras;
|
|
Packit |
713213 |
};
|
|
Packit |
713213 |
|
|
Packit |
713213 |
void juju_init(dc1394_t *d);
|
|
Packit |
713213 |
void linux_init(dc1394_t *d);
|
|
Packit |
713213 |
void macosx_init(dc1394_t *d);
|
|
Packit |
713213 |
void windows_init(dc1394_t *d);
|
|
Packit |
713213 |
void dc1394_usb_init(dc1394_t *d);
|
|
Packit |
713213 |
|
|
Packit |
713213 |
void register_platform (dc1394_t * d, const platform_dispatch_t * dispatch,
|
|
Packit |
713213 |
const char * name);
|
|
Packit |
713213 |
|
|
Packit |
713213 |
void free_enumeration (dc1394_t * d);
|
|
Packit |
713213 |
int refresh_enumeration (dc1394_t * d);
|
|
Packit |
713213 |
|
|
Packit |
713213 |
/* Definitions which application developers shouldn't care about */
|
|
Packit |
713213 |
#define CONFIG_ROM_BASE 0xFFFFF0000000ULL
|
|
Packit |
713213 |
|
|
Packit |
713213 |
#define DC1394_FEATURE_ON 0x80000000UL
|
|
Packit |
713213 |
#define DC1394_FEATURE_OFF 0x00000000UL
|
|
Packit |
713213 |
|
|
Packit |
713213 |
/* Maximum number of write/read retries */
|
|
Packit |
713213 |
#define DC1394_MAX_RETRIES 20
|
|
Packit |
713213 |
|
|
Packit |
713213 |
/* Maximum number of ISO channels */
|
|
Packit |
713213 |
/* Note that the maximum currently supported by a chipset is 8 so that 16 is already
|
|
Packit |
713213 |
a conservative number. A typical number of channels supported is 4. (TI chipset)
|
|
Packit |
713213 |
However, 1394b allows for more channels, hence we use 64 as the limit */
|
|
Packit |
713213 |
#define DC1394_NUM_ISO_CHANNELS 64
|
|
Packit |
713213 |
|
|
Packit |
713213 |
/* A hard compiled factor that makes sure async read and writes don't happen
|
|
Packit |
713213 |
too fast */
|
|
Packit |
713213 |
/* Toshiyuki Umeda: use randomize timings to avoid locking indefinitely.
|
|
Packit |
713213 |
If several thread are used the seed will be the same and the wait will therefor be
|
|
Packit |
713213 |
identical. A call to srand(getpid()) should be performed after calling the
|
|
Packit |
713213 |
raw1394_new_handle but I (Damien) not sure this would solve the problem as the handle
|
|
Packit |
713213 |
creation might have happened in the creating (as opposed to created) thread.*/
|
|
Packit |
713213 |
#define DC1394_SLOW_DOWN ((rand()%20)+10)
|
|
Packit |
713213 |
|
|
Packit |
713213 |
/* Maximum number of characters in vendor and model strings */
|
|
Packit |
713213 |
#define MAX_CHARS 256
|
|
Packit |
713213 |
|
|
Packit |
713213 |
|
|
Packit |
713213 |
// Format_0
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT0_MIN DC1394_VIDEO_MODE_160x120_YUV444
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT0_MAX DC1394_VIDEO_MODE_640x480_MONO16
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT0_NUM (DC1394_VIDEO_MODE_FORMAT0_MAX - DC1394_VIDEO_MODE_FORMAT0_MIN + 1)
|
|
Packit |
713213 |
|
|
Packit |
713213 |
// Format_1
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT1_MIN DC1394_VIDEO_MODE_800x600_YUV422
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT1_MAX DC1394_VIDEO_MODE_1024x768_MONO16
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT1_NUM (DC1394_VIDEO_MODE_FORMAT1_MAX - DC1394_VIDEO_MODE_FORMAT1_MIN + 1)
|
|
Packit |
713213 |
|
|
Packit |
713213 |
// Format_2
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT2_MIN DC1394_VIDEO_MODE_1280x960_YUV422
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT2_MAX DC1394_VIDEO_MODE_1600x1200_MONO16
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT2_NUM (DC1394_VIDEO_MODE_FORMAT2_MAX - DC1394_VIDEO_MODE_FORMAT2_MIN + 1)
|
|
Packit |
713213 |
|
|
Packit |
713213 |
// Format_6
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT6_MIN DC1394_VIDEO_MODE_EXIF
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT6_MAX DC1394_VIDEO_MODE_EXIF
|
|
Packit |
713213 |
#define DC1394_VIDEO_MODE_FORMAT6_NUM (DC1394_VIDEO_MODE_FORMAT6_MAX - DC1394_VIDEO_MODE_FORMAT6_MIN + 1)
|
|
Packit |
713213 |
|
|
Packit |
713213 |
/* Enumeration of camera image formats */
|
|
Packit |
713213 |
/* This could disappear from the API I think.*/
|
|
Packit |
713213 |
enum {
|
|
Packit |
713213 |
DC1394_FORMAT0= 384,
|
|
Packit |
713213 |
DC1394_FORMAT1,
|
|
Packit |
713213 |
DC1394_FORMAT2,
|
|
Packit |
713213 |
DC1394_FORMAT6=390,
|
|
Packit |
713213 |
DC1394_FORMAT7
|
|
Packit |
713213 |
};
|
|
Packit |
713213 |
#define DC1394_FORMAT_MIN DC1394_FORMAT0
|
|
Packit |
713213 |
#define DC1394_FORMAT_MAX DC1394_FORMAT7
|
|
Packit |
713213 |
//#define DC1394_FORMAT_NUM (DC1394_FORMAT_MAX - DC1394_FORMAT_MIN + 1)
|
|
Packit |
713213 |
/* DANGER: FORMAT_NUM should be 5!! FORMAT_NUM is therefor undefined to avoid problems */
|
|
Packit |
713213 |
|
|
Packit |
713213 |
#define FEATURE_TO_VALUE_OFFSET(feature, offset) \
|
|
Packit |
713213 |
{ \
|
|
Packit |
713213 |
if ( (feature > DC1394_FEATURE_MAX) || (feature < DC1394_FEATURE_MIN) ) \
|
|
Packit |
713213 |
return DC1394_FAILURE; \
|
|
Packit |
713213 |
else if (feature < DC1394_FEATURE_ZOOM) \
|
|
Packit |
713213 |
offset= REG_CAMERA_FEATURE_HI_BASE+(feature - DC1394_FEATURE_MIN)*0x04U; \
|
|
Packit |
713213 |
else if (feature >= DC1394_FEATURE_CAPTURE_SIZE) \
|
|
Packit |
713213 |
offset= REG_CAMERA_FEATURE_LO_BASE +(feature+12-DC1394_FEATURE_ZOOM)*0x04U;\
|
|
Packit |
713213 |
else \
|
|
Packit |
713213 |
offset= REG_CAMERA_FEATURE_LO_BASE +(feature-DC1394_FEATURE_ZOOM)*0x04U; \
|
|
Packit |
713213 |
}
|
|
Packit |
713213 |
|
|
Packit |
713213 |
#define FEATURE_TO_INQUIRY_OFFSET(feature, offset) \
|
|
Packit |
713213 |
{ \
|
|
Packit |
713213 |
if ( (feature > DC1394_FEATURE_MAX) || (feature < DC1394_FEATURE_MIN) ) \
|
|
Packit |
713213 |
return DC1394_FAILURE; \
|
|
Packit |
713213 |
else if (feature < DC1394_FEATURE_ZOOM) \
|
|
Packit |
713213 |
offset= REG_CAMERA_FEATURE_HI_BASE_INQ+(feature - DC1394_FEATURE_MIN)*0x04U; \
|
|
Packit |
713213 |
else if (feature >= DC1394_FEATURE_CAPTURE_SIZE) \
|
|
Packit |
713213 |
offset= REG_CAMERA_FEATURE_LO_BASE_INQ +(feature+12-DC1394_FEATURE_ZOOM)*0x04U;\
|
|
Packit |
713213 |
else \
|
|
Packit |
713213 |
offset= REG_CAMERA_FEATURE_LO_BASE_INQ +(feature-DC1394_FEATURE_ZOOM)*0x04U; \
|
|
Packit |
713213 |
}
|
|
Packit |
713213 |
|
|
Packit |
713213 |
/* Internal functions required by two different source files */
|
|
Packit |
713213 |
|
|
Packit |
713213 |
dc1394error_t
|
|
Packit |
713213 |
get_quadlets_per_packet(uint32_t mode, uint32_t frame_rate, uint32_t *qpp);
|
|
Packit |
713213 |
|
|
Packit |
713213 |
dc1394error_t
|
|
Packit |
713213 |
get_quadlets_from_format(dc1394camera_t *camera, uint32_t mode, uint32_t *quads);
|
|
Packit |
713213 |
|
|
Packit |
713213 |
dc1394error_t
|
|
Packit |
713213 |
get_format_from_mode(uint32_t mode, uint32_t *format);
|
|
Packit |
713213 |
|
|
Packit |
713213 |
dc1394bool_t
|
|
Packit |
713213 |
is_feature_bit_set(uint32_t value, uint32_t feature);
|
|
Packit |
713213 |
|
|
Packit |
713213 |
/*
|
|
Packit |
713213 |
dc1394bool_t
|
|
Packit |
713213 |
_dc1394_iidc_check_video_mode(dc1394camera_t *camera, dc1394video_mode_t *mode);
|
|
Packit |
713213 |
*/
|
|
Packit |
713213 |
dc1394error_t capture_basic_setup (dc1394camera_t * camera, dc1394video_frame_t * frame);
|
|
Packit |
713213 |
|
|
Packit |
713213 |
#endif /* _DC1394_INTERNAL_H */
|