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 // audio debug messages
00027 #define DA(x)
00028 //#define DA(x) {x}
00029 
00030 //#define DD(x)
00031 #define DD(x)  {if (debug_file){fprintf(debug_file,"%s:%d:",__FILE__,__LINE__);x;fflush(debug_file);}}
00032 // HEADER_SIZE is defined to be larger than actual header (later - with EXIF)  to use compile-time buffer
00033 #define JPEG_HEADER_SIZE    0x26f // will not change
00034 
00035 #include <stdio.h>
00036 #include <ogg/ogg.h> // has to be before ogmstreams.h
00037 #include <alsa/asoundlib.h>
00038 //#include "camogm_exif.h"
00039 #include <asm/elphel/c313a.h>
00040 #include <asm/elphel/ext353.h>
00041 #include <asm/elphel/exifa.h>
00042 #include "ogmstreams.h" // move it to <>?
00043 #include <time.h>
00044 
00045 
00046 /*
00047 #define  Exif_Photo_DateTimeOriginal      0x19003
00048 #define  Exif_GPSInfo_GPSLatitudeRef      0x20001
00049 #define  Exif_GPSInfo_GPSLatitude         0x20002
00050 #define  Exif_GPSInfo_GPSLongitudeRef     0x20003
00051 #define  Exif_GPSInfo_GPSLongitude        0x20004
00052 #define  Exif_GPSInfo_GPSAltitudeRef      0x20005
00053 #define  Exif_GPSInfo_GPSAltitude         0x20006
00054 #define  Exif_GPSInfo_GPSTimeStamp        0x20007
00055 #define  Exif_GPSInfo_GPSDateStamp        0x2001D
00056 #define  Exif_GPSInfo_CompassDirectionRef 0x20010
00057 #define  Exif_GPSInfo_CompassDirection    0x20011
00058 #define  Exif_GPSInfo_CompassPitchRef     0x20013
00059 #define  Exif_GPSInfo_CompassPitch        0x20014
00060 #define  Exif_GPSInfo_CompassRollRef      0x20015
00061 #define  Exif_GPSInfo_CompassRoll         0x20016
00062 */
00063 
00065 /*
00066 #define  Exif_Photo_DateTimeOriginal_Index      0x00
00067 #define  Exif_GPSInfo_GPSLatitudeRef_Index      0x01
00068 #define  Exif_GPSInfo_GPSLatitude_Index         0x02
00069 #define  Exif_GPSInfo_GPSLongitudeRef_Index     0x03
00070 #define  Exif_GPSInfo_GPSLongitude_Index        0x04
00071 #define  Exif_GPSInfo_GPSAltitudeRef_Index      0x05
00072 #define  Exif_GPSInfo_GPSAltitude_Index         0x06
00073 #define  Exif_GPSInfo_GPSTimeStamp_Index        0x07
00074 #define  Exif_GPSInfo_GPSDateStamp_Index        0x08
00075 #define  Exif_GPSInfo_CompassDirectionRef_Index 0x09
00076 #define  Exif_GPSInfo_CompassDirection_Index    0x0a
00077 #define  Exif_GPSInfo_CompassPitchRef_Index     0x0b
00078 #define  Exif_GPSInfo_CompassPitch_Index        0x0c
00079 #define  Exif_GPSInfo_CompassRollRef_Index      0x0d
00080 #define  Exif_GPSInfo_CompassRoll_Index         0x0e
00081 #define  ExifKmlNumber                          0x0f
00082 */
00083 typedef struct {
00084   int                   segment_duration;
00085   int                   segment_length;
00086   int                   save_gp; //if non zero, current circbuf pointer will be saved to global pointer, so imgsrv can report /pointers
00087   char                  path_prefix[256];
00088   char                  path[300];
00089   int                   cirbuf_rp; 
00090   int                   fd_circ;   
00091   int                   fd_head;   
00092   int                   fd_sens;   
00093   int                   fd_exif;   
00094   int                   head_size; 
00095   char                  jpegHeader [JPEG_HEADER_SIZE];
00096   int                   metadata_start;
00097   struct frame_params_t frame_params;
00098   struct frame_params_t this_frame_params;
00099   int                   jpeg_len;
00100   int                   frame_period ; 
00101   int                   width;
00102   int                   height;
00103   int                   starting;
00104   int                   running;
00105   int                   serialno;
00106 //  FILE*                 vf; //! video file (ogm, fopen)
00107   int                                   vf;
00108   int                   ivf; 
00109   int                   last; //last packet in a file
00110 
00111   int                   exif; // 1 - calculate and include Exif headers in each frame
00112 //  exif_pointers_t       ep;
00113 //  int                   exifValid;
00114   int                   exifSize; //signed
00115   unsigned char         ed[MAX_EXIF_SIZE];
00116 
00117   int                   circ_buff_size;
00118   int                   senspars_size;
00119   char                  debug_name[256];
00120 //  FILE*             debug_file;
00121   int                   set_samples_per_unit;
00122   double                timescale; 
00123   double                set_timescale;
00124   int                   max_frames;
00125   int                   set_max_frames;
00126   int                   frames_per_chunk;
00127   int                   set_frames_per_chunk; // quicktime -  index for fast forward?
00128   int                   frameno;
00129 
00130         unsigned long *         frames_len;
00131         long                            frames_pos;
00132         int *                           audio_samples_to_chunk;
00133   long                                  offset_current;
00134 
00135         long audio_frameno;
00136         long audio_samples;
00137 
00138   off_t                 frame_data_start; 
00139   ogg_int64_t           time_unit;
00140   int                   formats;          
00141   int                   format;           
00142   int                   set_format;       
00143   elph_packet_chunk     packetchunks[7];
00144   int                   chunk_index;
00145   int                   buf_overruns;
00146   int                   buf_min;
00147   int                   set_frames_skip;  
00148   int                   frames_skip;      
00149 
00150   int                   frames_skip_left; 
00151 
00152 //kml stuff
00153   int                   kml_enable;       
00154   int                   kml_used;         
00155   char                  kml_path[300];    
00156   FILE*                 kml_file;         
00157   double                kml_horHalfFov;   
00158   double                kml_vertHalfFov;  
00159   double                kml_near;         
00160   int                   kml_height_mode;  
00161   double                kml_height;       
00162   int                   kml_period;       
00163   int                   kml_last_ts;      
00164   int                   kml_last_uts;     
00165   struct exif_dir_table_t kml_exif[ExifKmlNumber] ;  
00166    
00167         int audio_enable;
00168         int audio_rate;
00169         int audio_channels;
00170         int allow_sync;
00171 
00172         int set_audio_enable;
00173         int set_audio_rate;
00174         int set_audio_channels;
00175         int set_allow_sync;
00176 
00177 //      int audio_format;
00178 
00179         struct timeval ts_audio;
00180         struct timeval ts_video;
00181         struct timeval ts_video_start;
00182 
00183 } camogm_state;
00184 
00185 struct context_audio_t {
00186         int begin_of_stream_with_audio;
00187         int begin_of_stream_with_audio_trigger;
00188         long long audio_skip_samples;
00189 
00190         int audio_set;
00191         int audio_present;
00192         char *sbuffer;
00193         long sbuffer_len;
00194         long sample_time;
00195         long long audio_count;
00196 
00197         struct timeval movie_start;
00198         struct timeval time_last;
00199         long to_finish_samples;
00200 
00201         snd_pcm_t *capture_handle;
00202 } ctx_a;
00203 
00204 #define AUDIO_SBUFFER_PREFIX    16
00205 
00206 extern int   debug_level;
00207 extern FILE* debug_file;
00208 extern camogm_state * state;
00209 void put_uint16(void *buf, u_int16_t val);
00210 void put_uint32(void *buf, u_int32_t val);
00211 void put_uint64(void *buf, u_int64_t val);
00212 
00213 #endif // _CAMOGM__H_

Generated on Thu Aug 7 16:18:58 2008 for elphel by  doxygen 1.5.1