00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef AVILIB_H
00034 #define AVILIB_H
00035
00036 #include "defs.h"
00037 #include <inttypes.h>
00038 #include <sys/types.h>
00039
00040
00041 #define AVI_MAX_TRACKS 8
00042 #define FRAME_RATE_SCALE 1000000
00043
00044 typedef struct _video_index_entry
00045 {
00046 off_t key;
00047 off_t pos;
00048 off_t len;
00049 } video_index_entry;
00050
00051 typedef struct _audio_index_entry
00052 {
00053 off_t pos;
00054 off_t len;
00055 off_t tot;
00056 } audio_index_entry;
00057
00058
00059 typedef struct track_s
00060 {
00061
00062 long a_fmt;
00063 long a_chans;
00064 long a_rate;
00065 long a_bits;
00066 long mpgrate;
00067 long a_vbr;
00068 long padrate;
00069
00070 long audio_strn;
00071 off_t audio_bytes;
00072 long audio_chunks;
00073
00074 char audio_tag[4];
00075 long audio_posc;
00076 long audio_posb;
00077
00078 off_t a_codech_off;
00079 off_t a_codecf_off;
00080
00081 audio_index_entry *audio_index;
00082
00083 } __attribute__ ((packed)) track_t;
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 struct avi_t
00140 {
00141 long fdes;
00142 long mode;
00143
00144
00145 long width;
00146 long height;
00147 double fps;
00148 char compressor[8];
00149 char compressor2[8];
00150 long video_strn;
00151 long video_frames;
00152 char video_tag[4];
00153 long video_pos;
00154
00155
00156 DWORD max_len;
00157
00158 track_t track[AVI_MAX_TRACKS];
00159
00160 off_t pos;
00161 long n_idx;
00162 long max_idx;
00163
00164 off_t v_codech_off;
00165 off_t v_codecf_off;
00166
00167 BYTE (*idx)[16];
00168
00169 video_index_entry *video_index;
00170
00171
00172
00173 off_t last_pos;
00174 DWORD last_len;
00175 int must_use_index;
00176 off_t movi_start;
00177 int total_frames;
00178
00179 int anum;
00180 int aptr;
00181
00182
00183
00184
00185
00186
00187 void* extradata;
00188 ULONG extradata_size;
00189 int closed;
00190
00191 } __attribute__ ((packed));
00192
00193 #define AVI_MODE_WRITE 0
00194 #define AVI_MODE_READ 1
00195
00196
00197
00198 #define AVI_ERR_SIZELIM 1
00199
00200
00201
00202
00203 #define AVI_ERR_OPEN 2
00204
00205
00206 #define AVI_ERR_READ 3
00207
00208 #define AVI_ERR_WRITE 4
00209
00210
00211 #define AVI_ERR_WRITE_INDEX 5
00212
00213
00214
00215 #define AVI_ERR_CLOSE 6
00216
00217
00218
00219 #define AVI_ERR_NOT_PERM 7
00220
00221
00222
00223 #define AVI_ERR_NO_MEM 8
00224
00225 #define AVI_ERR_NO_AVI 9
00226
00227 #define AVI_ERR_NO_HDRL 10
00228
00229
00230 #define AVI_ERR_NO_MOVI 11
00231
00232
00233 #define AVI_ERR_NO_VIDS 12
00234
00235 #define AVI_ERR_NO_IDX 13
00236
00237
00238
00239
00240
00241 #define WAVE_FORMAT_UNKNOWN (0x0000)
00242 #define WAVE_FORMAT_PCM (0x0001)
00243 #define WAVE_FORMAT_ADPCM (0x0002)
00244 #define WAVE_FORMAT_IBM_CVSD (0x0005)
00245 #define WAVE_FORMAT_ALAW (0x0006)
00246 #define WAVE_FORMAT_MULAW (0x0007)
00247 #define WAVE_FORMAT_OKI_ADPCM (0x0010)
00248 #define WAVE_FORMAT_DVI_ADPCM (0x0011)
00249 #define WAVE_FORMAT_DIGISTD (0x0015)
00250 #define WAVE_FORMAT_DIGIFIX (0x0016)
00251 #define WAVE_FORMAT_YAMAHA_ADPCM (0x0020)
00252 #define WAVE_FORMAT_DSP_TRUESPEECH (0x0022)
00253 #define WAVE_FORMAT_GSM610 (0x0031)
00254 #define IBM_FORMAT_MULAW (0x0101)
00255 #define IBM_FORMAT_ALAW (0x0102)
00256 #define IBM_FORMAT_ADPCM (0x0103)
00257
00258 #define DOLBY_FORMAT_AC3 (0x2000)
00259 #define ANTEX_FORMAT_ADPCME (0x0033)
00260 #define AUDIO_FORMAT_APTX (0x0025)
00261 #define AUDIOFILE_FORMAT_AF10 (0x0026)
00262 #define AUDIOFILE_FORMAT_AF36 (0x0024)
00263 #define BROOKTREE_FORMAT_BTVD (0x0400)
00264 #define CANOPUS_FORMAT_ATRAC (0x0063)
00265 #define CIRRUS_FORMAT_CIRRUS (0x0060)
00266 #define CONTROL_FORMAT_CR10 (0x0037)
00267 #define CONTROL_FORMAT_VQLPC (0x0034)
00268 #define CREATIVE_FORMAT_ADPCM (0x0200)
00269 #define CREATIVE_FORMAT_FASTSPEECH10 (0x0203)
00270 #define CREATIVE_FORMAT_FASTSPEECH8 (0x0202)
00271 #define IMA_FORMAT_ADPCM (0x0039)
00272 #define CONSISTENT_FORMAT_CS2 (0x0260)
00273 #define HP_FORMAT_CU (0x0019)
00274 #define DEC_FORMAT_G723 (0x0123)
00275 #define DF_FORMAT_G726 (0x0085)
00276 #define DSP_FORMAT_ADPCM (0x0036)
00277 #define DOLBY_FORMAT_AC2 (0x0030)
00278 #define DOLBY_FORMAT_AC3_SPDIF (0x0092)
00279 #define ESS_FORMAT_ESPCM (0x0061)
00280 #define IEEE_FORMAT_FLOAT (0x0003)
00281 #define ISO_FORMAT_MP3 (0x0055)
00282 #define ISO_FORMAT_MPEG12 (0x0050)
00283 #define MS_FORMAT_MSAUDIO1_DIVX (0x0160)
00284 #define MS_FORMAT_MSAUDIO2_DIVX (0x0161)
00285 #define OGG_FORMAT_VORBIS1 (0x674f)
00286 #define OGG_FORMAT_VORBIS1P (0x676f)
00287 #define OGG_FORMAT_VORBIS2 (0x6750)
00288 #define OGG_FORMAT_VORBIS2P (0x6770)
00289 #define OGG_FORMAT_VORBIS3 (0x6751)
00290 #define OGG_FORMAT_VORBIS3P (0x6771)
00291 #define MS_FORMAT_WMA9 (0x0163)
00292 #define MS_FORMAT_WMA9_PRO (0x0162)
00293
00294 int AVI_open_output_file(struct avi_t *AVI, const char * filename);
00295 void AVI_set_video(struct avi_t *AVI, int width, int height, double fps, char *compressor);
00296 void AVI_set_audio(struct avi_t *AVI, int channels, long rate, int mpgrate, int bits, int format);
00297 int AVI_write_frame(struct avi_t *AVI, BYTE *data, long bytes, int keyframe);
00298 int AVI_dup_frame(struct avi_t *AVI);
00299 int AVI_write_audio(struct avi_t *AVI, BYTE *data, long bytes);
00300 int AVI_append_audio(struct avi_t *AVI, BYTE *data, long bytes);
00301 ULONG AVI_bytes_remain(struct avi_t *AVI);
00302 int AVI_close(struct avi_t *AVI);
00303
00304
00305 int AVI_set_audio_track(struct avi_t *AVI, int track);
00306 void AVI_set_audio_vbr(struct avi_t *AVI, long is_vbr);
00307
00308
00309 ULONG AVI_set_MAX_LEN(ULONG len);
00310
00311 int AVI_getErrno();
00312
00313 void AVI_print_error(char *str);
00314 char *AVI_strerror();
00315 char *AVI_syserror();
00316
00317 #endif