2529
|
1
|
|
2 #define AVIWRITE_MAX_STREAMS 16
|
|
3
|
|
4 #define AVIWRITE_TYPE_VIDEO 0
|
|
5 #define AVIWRITE_TYPE_AUDIO 1
|
|
6
|
|
7 typedef struct {
|
|
8 // muxer data:
|
|
9 int type; // audio or video
|
|
10 int id; // stream no
|
|
11 unsigned int ckid; // chunk id (00dc 01wb etc)
|
|
12 double timer;
|
2652
|
13 unsigned int size;
|
2529
|
14 // buffering:
|
|
15 unsigned char *buffer;
|
|
16 unsigned int buffer_size;
|
2592
|
17 unsigned int buffer_len;
|
2529
|
18 // source stream:
|
|
19 void* source; // sh_audio or sh_video
|
|
20 int codec; // codec used for encoding. 0 means copy
|
|
21 // avi stream header:
|
|
22 AVIStreamHeader h; // Rate/Scale and SampleSize must be filled by caller!
|
|
23 // stream specific:
|
|
24 WAVEFORMATEX *wf;
|
|
25 BITMAPINFOHEADER *bih; // in format
|
|
26 } aviwrite_stream_t;
|
|
27
|
|
28 typedef struct {
|
|
29 // encoding:
|
|
30 MainAVIHeader avih;
|
|
31 unsigned int movi_start;
|
|
32 unsigned int movi_end;
|
|
33 unsigned int file_end;
|
|
34 // index:
|
|
35 AVIINDEXENTRY *idx;
|
|
36 int idx_pos;
|
|
37 int idx_size;
|
|
38 // streams:
|
|
39 //int num_streams;
|
|
40 aviwrite_stream_t* def_v; // default video stream (for general headers)
|
|
41 aviwrite_stream_t* streams[AVIWRITE_MAX_STREAMS];
|
|
42 } aviwrite_t;
|
|
43
|
|
44 aviwrite_stream_t* aviwrite_new_stream(aviwrite_t *muxer,int type);
|
|
45 aviwrite_t* aviwrite_new_muxer();
|
|
46 void aviwrite_write_chunk(aviwrite_t *muxer,aviwrite_stream_t *s, FILE *f,int len,unsigned int flags);
|
|
47 void aviwrite_write_header(aviwrite_t *muxer,FILE *f);
|
|
48 void aviwrite_write_index(aviwrite_t *muxer,FILE *f);
|
|
49
|
|
50
|
|
51
|