apps/camogm2/camogm.h

Go to the documentation of this file.
00001 #ifndef _CAMOGM__H_
00002 #define _CAMOGM__H_
00003 
00004 #define CAMOGM_FRAME_NOT_READY 1 // frame pointer valid, but not yet acquired
00005 #define CAMOGM_FRAME_INVALID   2 // invalid frame pointer
00006 #define CAMOGM_FRAME_CHANGED   3 // frame parameters have changed
00007 #define CAMOGM_FRAME_NEXTFILE  4 // need to switch to a new file segment
00008 #define CAMOGM_FRAME_BROKEN    5 // frame broken (buffer overrun)
00009 #define CAMOGM_FRAME_FILE_ERR  6 // error with file I/O
00010 #define CAMOGM_FRAME_MALLOC    7 // can not allocate memory
00011 #define CAMOGM_FRAME_OTHER     8 // other errors
00012 
00013 #define CAMOGM_FORMAT_NONE     0 // no video output
00014 #define CAMOGM_FORMAT_OGM      1 // output as Ogg Media file
00015 #define CAMOGM_FORMAT_JPEG     2 // output as individual JPEG files
00016 #define CAMOGM_FORMAT_MOV      3 // output as Apple Quicktime
00017 
00018 #define D(x) {if (debug_file && debug_level){x;fflush(debug_file);}}
00019 #define D0(x) {if (debug_file){x;fflush(debug_file);}}
00020 #define D1(x) {if (debug_file && (debug_level > 0)){x;fflush(debug_file);}}
00021 #define D2(x) {if (debug_file && (debug_level > 1)){x;fflush(debug_file);}}
00022 #define D3(x) {if (debug_file && (debug_level > 2)){x;fflush(debug_file);}}
00023 #define D4(x) {if (debug_file && (debug_level > 3)){x;fflush(debug_file);}}
00024 #define D5(x) {if (debug_file && (debug_level > 4)){x;fflush(debug_file);}}
00025 #define D6(x) {if (debug_file && (debug_level > 5)){x;fflush(debug_file);}}
00026 
00027 //#define DD(x)
00028 #define DD(x)  {if (debug_file){fprintf(debug_file,"%s:%d:",__FILE__,__LINE__);x;fflush(debug_file);}}
00029 // HEADER_SIZE is defined to be larger than actual header (later - with EXIF)  to use compile-time buffer
00030 #define JPEG_HEADER_SIZE    0x26f // will not change
00031 
00032 #include <stdio.h>
00033 #include <ogg/ogg.h> // has to be before ogmstreams.h
00034 //#include "camogm_exif.h"
00035 #include <asm/elphel/c313a.h>
00036 #include <asm/elphel/ext353.h>
00037 #include <asm/elphel/exifa.h>
00038 #include "ogmstreams.h" // move it to <>?
00039 
00040 
00041 /*
00042 #define  Exif_Photo_DateTimeOriginal      0x19003
00043 #define  Exif_GPSInfo_GPSLatitudeRef      0x20001
00044 #define  Exif_GPSInfo_GPSLatitude         0x20002
00045 #define  Exif_GPSInfo_GPSLongitudeRef     0x20003
00046 #define  Exif_GPSInfo_GPSLongitude        0x20004
00047 #define  Exif_GPSInfo_GPSAltitudeRef      0x20005
00048 #define  Exif_GPSInfo_GPSAltitude         0x20006
00049 #define  Exif_GPSInfo_GPSTimeStamp        0x20007
00050 #define  Exif_GPSInfo_GPSDateStamp        0x2001D
00051 #define  Exif_GPSInfo_CompassDirectionRef 0x20010
00052 #define  Exif_GPSInfo_CompassDirection    0x20011
00053 #define  Exif_GPSInfo_CompassPitchRef     0x20013
00054 #define  Exif_GPSInfo_CompassPitch        0x20014
00055 #define  Exif_GPSInfo_CompassRollRef      0x20015
00056 #define  Exif_GPSInfo_CompassRoll         0x20016
00057 */
00058 
00060 /*
00061 #define  Exif_Photo_DateTimeOriginal_Index      0x00
00062 #define  Exif_GPSInfo_GPSLatitudeRef_Index      0x01
00063 #define  Exif_GPSInfo_GPSLatitude_Index         0x02
00064 #define  Exif_GPSInfo_GPSLongitudeRef_Index     0x03
00065 #define  Exif_GPSInfo_GPSLongitude_Index        0x04
00066 #define  Exif_GPSInfo_GPSAltitudeRef_Index      0x05
00067 #define  Exif_GPSInfo_GPSAltitude_Index         0x06
00068 #define  Exif_GPSInfo_GPSTimeStamp_Index        0x07
00069 #define  Exif_GPSInfo_GPSDateStamp_Index        0x08
00070 #define  Exif_GPSInfo_CompassDirectionRef_Index 0x09
00071 #define  Exif_GPSInfo_CompassDirection_Index    0x0a
00072 #define  Exif_GPSInfo_CompassPitchRef_Index     0x0b
00073 #define  Exif_GPSInfo_CompassPitch_Index        0x0c
00074 #define  Exif_GPSInfo_CompassRollRef_Index      0x0d
00075 #define  Exif_GPSInfo_CompassRoll_Index         0x0e
00076 #define  ExifKmlNumber                          0x0f
00077 */
00078 typedef struct {
00079   int                   segment_duration;
00080   int                   segment_length;
00081   int                   save_gp; //if non zero, current circbuf pointer will be saved to global pointer, so imgsrv can report /pointers
00082   char                  path_prefix[256];
00083   char                  path[300];
00084   int                   cirbuf_rp; 
00085   int                   fd_circ;   
00086   int                   fd_head;   
00087   int                   fd_sens;   
00088   int                   fd_exif;   
00089   int                   head_size; 
00090   char                  jpegHeader [JPEG_HEADER_SIZE];
00091   int                   metadata_start;
00092   struct interframe_params_t frame_params;
00093   struct interframe_params_t this_frame_params;
00094   int                   jpeg_len;
00095   int                   frame_period ; 
00096   int                   width;
00097   int                   height;
00098   int                   starting;
00099   int                   running;
00100   int                   serialno;
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         int audio_enable;
00154         int audio_rate;
00155         int audio_channels;
00156         int audio_format;
00157         int allow_sync;
00158 
00159 } camogm_state;
00160 extern int   debug_level;
00161 extern FILE* debug_file;
00162 extern camogm_state * state;
00163 void put_uint16(void *buf, u_int16_t val);
00164 void put_uint32(void *buf, u_int32_t val);
00165 void put_uint64(void *buf, u_int64_t val);
00166 
00167 #endif // _CAMOGM__H_

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