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 DA(x)
00028
00029
00030
00031 #define DD(x) {if (debug_file){fprintf(debug_file,"%s:%d:",__FILE__,__LINE__);x;fflush(debug_file);}}
00032
00033 #define JPEG_HEADER_SIZE 0x26f // will not change
00034
00035 #include <stdio.h>
00036 #include <ogg/ogg.h>
00037 #include <alsa/asoundlib.h>
00038
00039 #include <asm/elphel/c313a.h>
00040 #include <asm/elphel/ext353.h>
00041 #include <asm/elphel/exifa.h>
00042 #include "ogmstreams.h"
00043 #include <time.h>
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 typedef struct {
00084 int segment_duration;
00085 int segment_length;
00086 int save_gp;
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
00107 int vf;
00108 int ivf;
00109 int last;
00110
00111 int exif;
00112
00113
00114 int exifSize;
00115 unsigned char ed[MAX_EXIF_SIZE];
00116
00117 int circ_buff_size;
00118 int senspars_size;
00119 char debug_name[256];
00120
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;
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
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
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_