Camera API Technical Report:
Camera Library Header File

next up previous
Next: Iim Camera Header File Up: The Camera Library Previous: Convenience Functions

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 */



Richard Baldock
1998-07-02