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
00025 #define DD(x) {if (debug_file){fprintf(debug_file,"%s:%d:",__FILE__,__LINE__);x;fflush(debug_file);}}
00026
00027 #define JPEG_HEADER_SIZE 0x26f // will not change
00028
00029
00030 #include <asm/elphel/exifa.h>
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 typedef struct {
00072 int segment_duration;
00073 int segment_length;
00074 int save_gp;
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;
00081 int fd_exif;
00082 int head_size;
00083 char jpegHeader [JPEG_HEADER_SIZE];
00084 int metadata_start;
00085 struct frame_params_t frame_params;
00086 struct frame_params_t this_frame_params;
00087 int jpeg_len;
00088 int frame_period ;
00089 int width;
00090 int height;
00091 int starting;
00092 int running;
00093 ogg_stream_state os;
00094 ogg_page og;
00095 ogg_packet op;
00096 elph_ogg_packet eop;
00097 int serialno;
00098 ogg_int64_t packetno;
00099 ogg_int64_t granulepos;
00100 FILE* vf;
00101 int ivf;
00102 int last;
00103
00104 int exif;
00105
00106
00107 int exifSize;
00108 unsigned char ed[MAX_EXIF_SIZE];
00109
00110 int circ_buff_size;
00111 int senspars_size;
00112 char debug_name[256];
00113
00114 int set_samples_per_unit;
00115 double timescale;
00116 double set_timescale;
00117 int max_frames;
00118 int set_max_frames;
00119 int frames_per_chunk;
00120 int set_frames_per_chunk;
00121 int frameno;
00122 int* frame_lengths;
00123 off_t frame_data_start;
00124 ogg_int64_t time_unit;
00125 int formats;
00126 int format;
00127 int set_format;
00128 elph_packet_chunk packetchunks[7];
00129 int chunk_index;
00130 int buf_overruns;
00131 int buf_min;
00132 int set_frames_skip;
00133 int frames_skip;
00134
00135 int frames_skip_left;
00136
00137
00138 int kml_enable;
00139 int kml_used;
00140 char kml_path[300];
00141 FILE* kml_file;
00142 double kml_horHalfFov;
00143 double kml_vertHalfFov;
00144 double kml_near;
00145 int kml_height_mode;
00146 double kml_height;
00147 int kml_period;
00148 int kml_last_ts;
00149 int kml_last_uts;
00150 struct exif_dir_table_t kml_exif[ExifKmlNumber] ;
00151
00152
00153 } camogm_state;
00154 extern int debug_level;
00155 extern FILE* debug_file;
00156 extern camogm_state * state;
00157 void put_uint16(void *buf, u_int16_t val);
00158 void put_uint32(void *buf, u_int32_t val);
00159 void put_uint64(void *buf, u_int64_t val);