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_MAXSIZE 0x300 // 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
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;
00104
00105 int exif;
00106
00107
00108 int exifSize;
00109 unsigned char ed[MAX_EXIF_SIZE];
00110
00111 int circ_buff_size;
00112 int senspars_size;
00113 char debug_name[256];
00114
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;
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
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);
00164 int isDaemonEnabled(int daemonBit);
00165