Mercurial > mplayer.hg
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 *); |