comparison libmpdemux/muxer.h @ 17023:dd5be8f8d16d

buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
author nicodvb
date Mon, 21 Nov 2005 22:53:14 +0000
parents 7b0599d9614a
children 3993a5fad89a
comparison
equal deleted inserted replaced
17022:2627a9e6570c 17023:dd5be8f8d16d
26 // mpeg block buffer: 26 // mpeg block buffer:
27 unsigned char *b_buffer; 27 unsigned char *b_buffer;
28 unsigned int b_buffer_size; //size of b_buffer 28 unsigned int b_buffer_size; //size of b_buffer
29 unsigned int b_buffer_ptr; //index to next data to write 29 unsigned int b_buffer_ptr; //index to next data to write
30 unsigned int b_buffer_len; //len of next data to write 30 unsigned int b_buffer_len; //len of next data to write
31 // muxer frame buffer:
32 unsigned int muxbuf_seen;
31 // source stream: 33 // source stream:
32 void* source; // sh_audio or sh_video 34 void* source; // sh_audio or sh_video
33 int codec; // codec used for encoding. 0 means copy 35 int codec; // codec used for encoding. 0 means copy
34 // avi stream header: 36 // avi stream header:
35 AVIStreamHeader h; // Rate/Scale and SampleSize must be filled by caller! 37 AVIStreamHeader h; // Rate/Scale and SampleSize must be filled by caller!
36 // stream specific: 38 // stream specific:
37 WAVEFORMATEX *wf; 39 WAVEFORMATEX *wf;
38 BITMAPINFOHEADER *bih; // in format 40 BITMAPINFOHEADER *bih; // in format
39 // mpeg specific: 41 // mpeg specific:
40 unsigned int gop_start; // frame number of this GOP start
41 size_t ipb[3]; // sizes of I/P/B frames 42 size_t ipb[3]; // sizes of I/P/B frames
42 // muxer of that stream 43 // muxer of that stream
43 struct muxer_t *muxer; 44 struct muxer_t *muxer;
44 void *priv; // private stream specific data stored by the muxer 45 void *priv; // private stream specific data stored by the muxer
45 } muxer_stream_t; 46 } muxer_stream_t;
64 int num_audios; 65 int num_audios;
65 unsigned int sysrate; // max rate in bytes/s 66 unsigned int sysrate; // max rate in bytes/s
66 //int num_streams; 67 //int num_streams;
67 muxer_stream_t* def_v; // default video stream (for general headers) 68 muxer_stream_t* def_v; // default video stream (for general headers)
68 muxer_stream_t* streams[MUXER_MAX_STREAMS]; 69 muxer_stream_t* streams[MUXER_MAX_STREAMS];
70 // muxer frame buffer:
71 struct muxbuf_t * muxbuf;
72 int muxbuf_num;
73 int muxbuf_skip_buffer;
74 // functions:
69 void (*fix_stream_parameters)(muxer_stream_t *); 75 void (*fix_stream_parameters)(muxer_stream_t *);
70 void (*cont_write_chunk)(muxer_stream_t *,size_t,unsigned int); 76 void (*cont_write_chunk)(muxer_stream_t *,size_t,unsigned int);
71 void (*cont_write_header)(struct muxer_t *); 77 void (*cont_write_header)(struct muxer_t *);
72 void (*cont_write_index)(struct muxer_t *); 78 void (*cont_write_index)(struct muxer_t *);
73 muxer_stream_t* (*cont_new_stream)(struct muxer_t *,int); 79 muxer_stream_t* (*cont_new_stream)(struct muxer_t *,int);
74 FILE* file; 80 FILE* file;
75 void *priv; 81 void *priv;
76 } muxer_t; 82 } muxer_t;
77 83
84 /* muxer frame buffer */
85 typedef struct muxbuf_t {
86 muxer_stream_t *stream; /* pointer back to corresponding stream */
87 double timer; /* snapshot of stream timer */
88 unsigned char *buffer;
89 size_t len;
90 unsigned int flags;
91 } muxbuf_t;
92
93
78 muxer_t *muxer_new_muxer(int type,FILE *); 94 muxer_t *muxer_new_muxer(int type,FILE *);
79 #define muxer_new_stream(muxer,a) muxer->cont_new_stream(muxer,a) 95 #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) 96 #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) 97 void muxer_write_chunk(muxer_stream_t *s, size_t len, unsigned int flags);
82 #define muxer_write_header(muxer) muxer->cont_write_header(muxer) 98 #define muxer_write_header(muxer) muxer->cont_write_header(muxer)
83 #define muxer_write_index(muxer) muxer->cont_write_index(muxer) 99 #define muxer_write_index(muxer) muxer->cont_write_index(muxer)
84 100
85 int muxer_init_muxer_avi(muxer_t *); 101 int muxer_init_muxer_avi(muxer_t *);
86 int muxer_init_muxer_mpeg(muxer_t *); 102 int muxer_init_muxer_mpeg(muxer_t *);