|
Camera API Technical Report:
Camera Library Header File |
/* static char SccsId[] = "@(#)camera.h 1.1(03/12/96) - RAB";*/
/************************************************************************
* Project: Mouse Atlas
* Title: camera.h
* Author: Richard Baldock, MRC Human Genetics Unit *
* Copyright: Medical Research Council, UK. *
* Date: Tue Nov 23 07:05:49 GMT 1993 *
* Synopsis:
************************************************************************/
#ifndef CAMERA_H
#define CAMERA_H
#include <iim.h>
/*
Shared memory keys for different camera types.
These should be different from any other shared-memory keys in use
by any other application. Use ipcs(1) to check for conflict.
*/
#define VIRTUOSO_SHM_KEY 0xcab1
#define IIM_MEGAPLUS_SHM_KEY 0xcab2
#define IIM_MEGAPLUS_FM_SHM_KEY 0xcab3
#define IIM_XILLIX_1400_SHM_KEY 0xcab4
#define IIM_FAKE_SHM_KEY 0xcab5
#define IIM_CCIR_SHM_KEY 0xcab6
/* camera interface and colour types */
typedef enum {
/* camera type */
CAMERA_VIRTUOSO = IIM_CAMERA_VIRTUOSO,
CAMERA_IIM_MEGAPLUS = IIM_CAMERA_MEGAPLUS,
CAMERA_IIM_MEGAPLUS_FM = IIM_CAMERA_MEGAPLUS_FM,
CAMERA_IIM_XILLIX_1400_10 = IIM_CAMERA_XILLIX1400_10,
CAMERA_IIM_XILLIX_1400_12 = IIM_CAMERA_XILLIX1400_12,
CAMERA_IIM_CCIR = IIM_CAMERA_CCIR,
CAMERA_IIM_FAKE = IIM_CAMERA_FAKE,
/* interface type */
CAMERA_TYPE_DMA = 100,
CAMERA_TYPE_FB,
/* colour type */
CAMERA_TYPE_GREY = 200,
CAMERA_TYPE_COMPCOL,
CAMERA_TYPE_RGB
} CameraType;
/* attribute types for setting and getting values */
typedef enum {
/* ID and type info */
CV_Name = 0,
CV_Version,
CV_InitStr,
CV_InterfaceType,
CV_ColourType,
/* debug options */
CV_Debug,
/* file descriptor or frame buffer if required */
CV_FD = 50,
CV_FB,
/* options - binning, scaling etc */
CV_X_BinningOpt = 100,
CV_Y_BinningOpt,
CV_X_SamplingOpt,
CV_Y_SamplingOpt,
CV_GainOpt,
CV_MaxGain,
CV_MinGain,
CV_MaxOffset,
CV_MinOffset,
CV_OutputDepthOpt,
CV_ClockOpt,
/* geometry info */
CV_X_Size = 200,
CV_Y_Size,
CV_PixelUnits,
CV_MaxWindow,
CV_MinWindow,
CV_X_Binning,
CV_Y_Binning,
CV_X_Sampling,
CV_Y_Sampling,
CV_InputWindow,
CV_OutputWindow,
/* composite value */
CV_SetAttributes,
/* pixel info */
CV_InputDepth = 300,
CV_Gain,
CV_Offset,
CV_OutputDepth,
CV_TransfLUT,
/* exposure info */
CV_TimeUnits = 400,
CV_TimeQuanta,
CV_MinExposure,
CV_MaxExposure,
CV_Exposure,
/* data rate and size */
CV_Clock = 500,
CV_DataSize,
/* video extensions */
CV_VideoOpt = 600,
CV_VideoMode,
CV_VideoOverlay,
CV_VideoOvlyCol,
CV_VideoLUT
} CameraValueType;
typedef enum {
VM_Capture,
VM_Display,
VM_Video,
VM_WVideo
} CameraVideoMode;
/* opaque camera pointer and class pointer */
typedef struct _Camera *Camera;
typedef struct _CameraClass *CameraClass;
/* a camera list to enable querying of available cameras */
typedef struct {
char *name;
CameraType type;
CameraType interface_type;
CameraType colour_type;
CameraClass camera_class;
char *def_init_str;
} CameraRec, *CameraList;
/* structure for the input and output rectangular fields */
typedef struct {
int x;
int y;
int width;
int height;
} CameraWindow;
typedef struct {int x,y;} CameraScale;
/* structure for camera options - arrays of options are NULL terminated */
typedef struct {
int val;
char *str;
} CameraOption;
typedef struct {
int num_entries;
int entry_size;
union {
unsigned char *c;
short *s;
int *i;
} lut;
} CameraLUT;
typedef struct {
char *srcstr;
char *errstr;
int errno;
} CameraError;
/* bitmasks for set flag and CameraCheckAtt return */
typedef enum {
CSM_Binning = 1l << 0,
CSM_Sampling = 1l << 1,
CSM_Window = 1l << 2,
CSM_OutputDepth = 1l << 3,
CSM_Exposure = 1l << 4,
CSM_Clock = 1l << 5
} CameraSetMask;
/* set attributes structure */
typedef struct {
int set_flag;
CameraScale binning;
CameraScale sampling;
CameraWindow input_window;
int output_depth;
int exposure;
int clock;
} CameraSetAttributes;
/* basic function declarations */
extern int CameraStatus (char *init_str, CameraClass cam_class);
extern Camera CameraInit (char *init_str, CameraClass cam_class);
extern int CameraReinit (Camera cam);
extern int CameraClose (Camera cam);
extern int CameraRead (Camera cam, caddr_t buf);
extern int CameraCapture (Camera cam);
extern int CameraSetVal (Camera cam,
CameraValueType val_type,
caddr_t val);
extern int CameraGetVal (Camera cam,
CameraValueType val_type,
caddr_t val);
extern int CameraCheckVal (Camera cam,
CameraValueType val_type,
caddr_t val);
extern int CameraSetAtt (Camera cam,
CameraSetAttributes *set_att);
extern int CameraGetAtt (Camera cam,
CameraSetAttributes *set_att);
extern int CameraCheckAtt (Camera cam,
CameraSetAttributes *set_att);
extern int CameraSetWindow (Camera cam,
CameraWindow *input_win,
CameraWindow *output_win);
extern int CameraGetWindow (Camera cam,
CameraWindow *input_win,
CameraWindow *output_win);
extern int CameraCheckWindow (Camera cam,
CameraWindow *input_win,
CameraWindow *output_win);
extern Camera CameraCopy (Camera cam);
extern int CameraGetList (CameraList **camera_list);
/* error reporting and handling */
extern int CameraSetErrorHandler (Camera cam,
int (*handler)(Camera, caddr_t, CameraError *),
caddr_t data);
extern int CameraGetErrorHandler (Camera cam,
int (**handler)(Camera, caddr_t, CameraError *),
caddr_t *data);
/* callback list for attribute settings */
extern int CameraAddSetCallback (Camera cam,
void (*callback)(Camera, caddr_t,
CameraValueType),
caddr_t data );
extern int CameraRemoveSetCallback (Camera cam,
void (*callback)(Camera, caddr_t,
CameraValueType),
caddr_t data );
extern int CameraCallSetCallbacks (Camera *cam,
CameraValueType val_type);
/* specific core-camera convenience functions */
extern char *CameraName (Camera cam);
extern int CameraWinMinX (Camera cam);
extern int CameraWinMinY (Camera cam);
extern int CameraWinMaxX (Camera cam);
extern int CameraWinMaxY (Camera cam);
extern int CameraWinMinWidth (Camera cam);
extern int CameraWinMinHeight (Camera cam);
extern int CameraWinMaxWidth (Camera cam);
extern int CameraWinMaxHeight (Camera cam);
extern int CameraWinX (Camera cam);
extern int CameraWinY (Camera cam);
extern int CameraWinWidth (Camera cam);
extern int CameraWinHeight (Camera cam);
extern int CameraMinExposure (Camera cam);
extern int CameraMaxExposure (Camera cam);
extern int CameraExposure (Camera cam);
extern int CameraMinGain (Camera cam);
extern int CameraMaxGain (Camera cam);
extern int CameraGain (Camera cam);
extern int CameraMinOffset (Camera cam);
extern int CameraMaxOffset (Camera cam);
extern int CameraOffset (Camera cam);
extern int CameraDataSize (Camera cam);
/* do not add anything after this line */
#endif /* CAMERA_H */