2 #define MUXER_MAX_STREAMS 16
4 #define MUXER_TYPE_VIDEO 0
5 #define MUXER_TYPE_AUDIO 1
7 #define MUXER_TYPE_AVI 0
8 #define MUXER_TYPE_MPEG 1
9 #define MUXER_TYPE_RAWVIDEO 2
10 #define MUXER_TYPE_LAVF 3
11 #define MUXER_TYPE_RAWAUDIO 4
16 int type
; // audio or video
18 uint32_t ckid
; // chunk id (00dc 01wb etc)
21 float aspect
; // aspect ratio of this stream (set by ve_*.c)
23 unsigned char *buffer
;
24 unsigned int buffer_size
;
25 unsigned int buffer_len
;
27 unsigned char *b_buffer
;
28 unsigned int b_buffer_size
; //size of b_buffer
29 unsigned int b_buffer_ptr
; //index to next data to write
30 unsigned int b_buffer_len
; //len of next data to write
32 void* source
; // sh_audio or sh_video
33 int codec
; // codec used for encoding. 0 means copy
35 AVIStreamHeader h
; // Rate/Scale and SampleSize must be filled by caller!
38 BITMAPINFOHEADER
*bih
; // in format
40 unsigned int gop_start
; // frame number of this GOP start
41 size_t ipb
[3]; // sizes of I/P/B frames
42 // muxer of that stream
43 struct muxer_t
*muxer
;
44 void *priv
; // private stream specific data stored by the muxer
52 typedef struct muxer_t
{
57 off_t file_end
; // for MPEG it's system timestamp in 1/90000 s
63 int num_videos
; // for MPEG recalculations
65 unsigned int sysrate
; // max rate in bytes/s
67 muxer_stream_t
* def_v
; // default video stream (for general headers)
68 muxer_stream_t
* streams
[MUXER_MAX_STREAMS
];
69 void (*fix_stream_parameters
)(muxer_stream_t
*);
70 void (*cont_write_chunk
)(muxer_stream_t
*,size_t,unsigned int);
71 void (*cont_write_header
)(struct muxer_t
*);
72 void (*cont_write_index
)(struct muxer_t
*);
73 muxer_stream_t
* (*cont_new_stream
)(struct muxer_t
*,int);
78 muxer_t
*muxer_new_muxer(int type
,FILE *);
79 #define muxer_new_stream(muxer,a) muxer->cont_new_stream(muxer,a)
80 #define muxer_stream_fix_parameters(muxer, a) muxer->fix_stream_parameters(a)
81 #define muxer_write_chunk(a,b,c) a->muxer->cont_write_chunk(a,b,c)
82 #define muxer_write_header(muxer) muxer->cont_write_header(muxer)
83 #define muxer_write_index(muxer) muxer->cont_write_index(muxer)
85 int muxer_init_muxer_avi(muxer_t
*);
86 int muxer_init_muxer_mpeg(muxer_t
*);
87 int muxer_init_muxer_rawvideo(muxer_t
*);
88 int muxer_init_muxer_lavf(muxer_t
*);
89 int muxer_init_muxer_rawaudio(muxer_t
*);