apps/camogm/camogm.h

Go to the documentation of this file.
00001 #define CAMOGM_FRAME_NOT_READY 1 // frame pointer valid, but not yet acquired
00002 #define CAMOGM_FRAME_INVALID   2 // invalid frame pointer
00003 #define CAMOGM_FRAME_CHANGED   3 // frame parameters have changed
00004 #define CAMOGM_FRAME_NEXTFILE  4 // need to switch to a new file segment
00005 #define CAMOGM_FRAME_BROKEN    5 // frame broken (buffer overrun)
00006 #define CAMOGM_FRAME_FILE_ERR  6 // error with file I/O
00007 #define CAMOGM_FRAME_MALLOC    7 // can not allocate memory
00008 #define CAMOGM_FRAME_OTHER     8 // other errors
00009 
00010 #define CAMOGM_FORMAT_NONE     0 // no video output
00011 #define CAMOGM_FORMAT_OGM      1 // output as Ogg Media file
00012 #define CAMOGM_FORMAT_JPEG     2 // output as individual JPEG files
00013 #define CAMOGM_FORMAT_MOV      3 // output as Apple Quicktime
00014 
00015 #define D(x) {if (debug_file && debug_level){x;fflush(debug_file);}}
00016 #define D0(x) {if (debug_file){x;fflush(debug_file);}}
00017 #define D1(x) {if (debug_file && (debug_level > 0)){x;fflush(debug_file);}}
00018 #define D2(x) {if (debug_file && (debug_level > 1)){x;fflush(debug_file);}}
00019 #define D3(x) {if (debug_file && (debug_level > 2)){x;fflush(debug_file);}}
00020 #define D4(x) {if (debug_file && (debug_level > 3)){x;fflush(debug_file);}}
00021 #define D5(x) {if (debug_file && (debug_level > 4)){x;fflush(debug_file);}}
00022 #define D6(x) {if (debug_file && (debug_level > 5)){x;fflush(debug_file);}}
00023 
00024 //#define DD(x)
00025 #define DD(x)  {if (debug_file){fprintf(debug_file,"%s:%d:",__FILE__,__LINE__);x;fflush(debug_file);}}
00026 // HEADER_SIZE is defined to be larger than actual header (later - with EXIF)  to use compile-time buffer
00027 #define JPEG_HEADER_MAXSIZE    0x300 // will not change
00028 
00029 //#include "camogm_exif.h"
00030 #include <asm/elphel/exifa.h>
00031 
00032 
00033 /*
00034 #define  Exif_Photo_DateTimeOriginal      0x19003
00035 #define  Exif_GPSInfo_GPSLatitudeRef      0x20001
00036 #define  Exif_GPSInfo_GPSLatitude         0x20002
00037 #define  Exif_GPSInfo_GPSLongitudeRef     0x20003
00038 #define  Exif_GPSInfo_GPSLongitude        0x20004
00039 #define  Exif_GPSInfo_GPSAltitudeRef      0x20005
00040 #define  Exif_GPSInfo_GPSAltitude         0x20006
00041 #define  Exif_GPSInfo_GPSTimeStamp        0x20007
00042 #define  Exif_GPSInfo_GPSDateStamp        0x2001D
00043 #define  Exif_GPSInfo_CompassDirectionRef 0x20010
00044 #define  Exif_GPSInfo_CompassDirection    0x20011
00045 #define  Exif_GPSInfo_CompassPitchRef     0x20013
00046 #define  Exif_GPSInfo_CompassPitch        0x20014
00047 #define  Exif_GPSInfo_CompassRollRef      0x20015
00048 #define  Exif_GPSInfo_CompassRoll         0x20016
00049 */
00050 /*
00052 #define  Exif_Image_ImageDescription_Index      0x00
00053 #define  Exif_Photo_DateTimeOriginal_Index      0x01
00054 #define  Exif_Photo_SubSecTimeOriginal_Index    0x02
00055 #define  Exif_GPSInfo_GPSLatitudeRef_Index      0x03
00056 #define  Exif_GPSInfo_GPSLatitude_Index         0x04
00057 #define  Exif_GPSInfo_GPSLongitudeRef_Index     0x05
00058 #define  Exif_GPSInfo_GPSLongitude_Index        0x06
00059 #define  Exif_GPSInfo_GPSAltitudeRef_Index      0x07
00060 #define  Exif_GPSInfo_GPSAltitude_Index         0x08
00061 #define  Exif_GPSInfo_GPSTimeStamp_Index        0x09
00062 #define  Exif_GPSInfo_GPSDateStamp_Index        0x0a
00063 #define  Exif_GPSInfo_CompassDirectionRef_Index 0x0b
00064 #define  Exif_GPSInfo_CompassDirection_Index    0x0c
00065 #define  Exif_GPSInfo_CompassPitchRef_Index     0x0d
00066 #define  Exif_GPSInfo_CompassPitch_Index        0x0e
00067 #define  Exif_GPSInfo_CompassRollRef_Index      0x0f
00068 #define  Exif_GPSInfo_CompassRoll_Index         0x10
00069 #define  ExifKmlNumber                          0x11
00070 */
00071 typedef struct {
00072   int                   segment_duration;
00073   int                   segment_length;
00074   int                   save_gp; //if non zero, current circbuf pointer will be saved to global pointer, so imgsrv can report /pointers
00075   char                  path_prefix[256];
00076   char                  path[300];
00077   int                   cirbuf_rp; 
00078   int                   fd_circ;   
00079   int                   fd_head;   
00080 //  int                   fd_sens;   //! file descriptor for sensor/compressor parameters
00081   int                   fd_fparmsall;   
00082   int                   fd_exif;   
00083   int                   head_size; 
00084   char                  jpegHeader [JPEG_HEADER_MAXSIZE];
00085   int                   metadata_start;
00086   struct interframe_params_t frame_params;
00087   struct interframe_params_t this_frame_params;
00088   int                   jpeg_len;
00089   int                   frame_period ; 
00090   int                   width;
00091   int                   height;
00092   int                   starting;
00093   int                   running;
00094   ogg_stream_state      os;
00095   ogg_page              og;
00096   ogg_packet            op;
00097   elph_ogg_packet       eop;
00098   int                   serialno;
00099   ogg_int64_t           packetno;
00100   ogg_int64_t           granulepos;
00101   FILE*                 vf; 
00102   int                   ivf; 
00103   int                   last; //last packet in a file
00104 
00105   int                   exif; // 1 - calculate and include Exif headers in each frame
00106 //  exif_pointers_t       ep;
00107 //  int                   exifValid;
00108   int                   exifSize; //signed
00109   unsigned char         ed[MAX_EXIF_SIZE];
00110 
00111   int                   circ_buff_size;
00112   int                   senspars_size;
00113   char                  debug_name[256];
00114 //  FILE*             debug_file;
00115   int                   set_samples_per_unit;
00116   double                timescale; 
00117   double                set_timescale;
00118   int                   max_frames;
00119   int                   set_max_frames;
00120   int                   frames_per_chunk;
00121   int                   set_frames_per_chunk; // quicktime -  index for fast forward?
00122   int                   frameno;
00123   int*                  frame_lengths;
00124   off_t                 frame_data_start; 
00125   ogg_int64_t           time_unit;
00126   int                   formats;          
00127   int                   format;           
00128   int                   set_format;       
00129   elph_packet_chunk     packetchunks[7];
00130   int                   chunk_index;
00131   int                   buf_overruns;
00132   int                   buf_min;
00133   int                   set_frames_skip;  
00134   int                   frames_skip;      
00135 
00136   int                   frames_skip_left; 
00137 
00138 //kml stuff
00139   int                   kml_enable;       
00140   int                   kml_used;         
00141   char                  kml_path[300];    
00142   FILE*                 kml_file;         
00143   double                kml_horHalfFov;   
00144   double                kml_vertHalfFov;  
00145   double                kml_near;         
00146   int                   kml_height_mode;  
00147   double                kml_height;       
00148   int                   kml_period;       
00149   int                   kml_last_ts;      
00150   int                   kml_last_uts;     
00151   struct exif_dir_table_t kml_exif[ExifKmlNumber] ;  
00152    
00153 
00154 } camogm_state;
00155 extern int   debug_level;
00156 extern FILE* debug_file;
00157 extern camogm_state * state;
00158 void put_uint16(void *buf, u_int16_t val);
00159 void put_uint32(void *buf, u_int32_t val);
00160 void put_uint64(void *buf, u_int64_t val);
00161 unsigned long getGPValue(unsigned long GPNumber);
00162 void setGValue(unsigned long  GNumber,   unsigned long value);
00163 int  waitDaemonEnabled(int daemonBit); // <0 - use default
00164 int  isDaemonEnabled(int daemonBit); // <0 - use default
00165 

Generated on Fri Nov 28 00:06:21 2008 for elphel by  doxygen 1.5.1