Mercurial > mplayer.hg
annotate libmpdemux/muxer.h @ 25194:e816d546c4fe
ao_null: Make duration of "buffered" audio constant
Choose the "buffer size" for the amount of audio the driver accepts so
that it corresponds to about 0.2 seconds of playback based on the
number of channels, sample size and samplerate.
author | uau |
---|---|
date | Sat, 01 Dec 2007 01:39:39 +0000 |
parents | f63408f61f0f |
children | 6ac1ece1f9fe |
rev | line source |
---|---|
2529 | 1 |
8585 | 2 #define MUXER_MAX_STREAMS 16 |
2529 | 3 |
8585 | 4 #define MUXER_TYPE_VIDEO 0 |
5 #define MUXER_TYPE_AUDIO 1 | |
6 | |
7 #define MUXER_TYPE_AVI 0 | |
8 #define MUXER_TYPE_MPEG 1 | |
12016
b962aaad2940
rawvideo muxer patch by John Earl <jwe21@cam.ac.uk>
ranma
parents:
11222
diff
changeset
|
9 #define MUXER_TYPE_RAWVIDEO 2 |
14757
7a2adc5e8928
initial, extremely experimental, libavformat muxer; don't expect anything to work yet
nicodvb
parents:
14753
diff
changeset
|
10 #define MUXER_TYPE_LAVF 3 |
15754 | 11 #define MUXER_TYPE_RAWAUDIO 4 |
8585 | 12 |
2529 | 13 |
14 typedef struct { | |
15 // muxer data: | |
16 int type; // audio or video | |
17 int id; // stream no | |
8585 | 18 uint32_t ckid; // chunk id (00dc 01wb etc) |
2529 | 19 double timer; |
5572
8cd761968f35
BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents:
2652
diff
changeset
|
20 off_t size; |
12061 | 21 float aspect; // aspect ratio of this stream (set by ve_*.c) |
2529 | 22 // buffering: |
23 unsigned char *buffer; | |
24 unsigned int buffer_size; | |
2592 | 25 unsigned int buffer_len; |
8585 | 26 // mpeg block buffer: |
27 unsigned char *b_buffer; | |
14753
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
28 unsigned int b_buffer_size; //size of b_buffer |
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
29 unsigned int b_buffer_ptr; //index to next data to write |
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
30 unsigned int b_buffer_len; //len of next data to write |
17023
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
31 // muxer frame buffer: |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
32 unsigned int muxbuf_seen; |
2529 | 33 // source stream: |
34 void* source; // sh_audio or sh_video | |
35 int codec; // codec used for encoding. 0 means copy | |
36 // avi stream header: | |
37 AVIStreamHeader h; // Rate/Scale and SampleSize must be filled by caller! | |
38 // stream specific: | |
39 WAVEFORMATEX *wf; | |
40 BITMAPINFOHEADER *bih; // in format | |
17660 | 41 int encoder_delay; // in number of frames |
42 int decoder_delay; // in number of frames | |
23308
f63408f61f0f
Add imgfmt (AKA pixel format) to muxer_stream_t so that encoders can
corey
parents:
21960
diff
changeset
|
43 int imgfmt; |
8585 | 44 // mpeg specific: |
45 size_t ipb[3]; // sizes of I/P/B frames | |
9007
12fc55eb3373
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
8585
diff
changeset
|
46 // muxer of that stream |
12fc55eb3373
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
8585
diff
changeset
|
47 struct muxer_t *muxer; |
11222 | 48 void *priv; // private stream specific data stored by the muxer |
17480
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17023
diff
changeset
|
49 |
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17023
diff
changeset
|
50 int vbv_size; |
3993a5fad89a
pass vbv_size & max_rate from encoder to muxer over muxer_stream_t (if this is wrong/silly/10000000l then dont hesitate to flame / reverse)
michael
parents:
17023
diff
changeset
|
51 int max_rate; |
19360
d4d72e5eea07
pass average bitrate from encoder to (lavf) muxer
michael
parents:
18241
diff
changeset
|
52 int avg_rate; |
8585 | 53 } muxer_stream_t; |
2529 | 54 |
55 typedef struct { | |
8585 | 56 uint32_t id; |
7145
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
5572
diff
changeset
|
57 char *text; |
8585 | 58 } muxer_info_t; |
7145
3854945aefbb
new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents:
5572
diff
changeset
|
59 |
8585 | 60 typedef struct muxer_t{ |
2529 | 61 // encoding: |
62 MainAVIHeader avih; | |
12036 | 63 off_t movi_start; |
64 off_t movi_end; | |
65 off_t file_end; // for MPEG it's system timestamp in 1/90000 s | |
17648 | 66 float audio_delay_fix; |
2529 | 67 // index: |
68 AVIINDEXENTRY *idx; | |
69 int idx_pos; | |
70 int idx_size; | |
71 // streams: | |
8585 | 72 int num_videos; // for MPEG recalculations |
14753
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
73 int num_audios; |
8585 | 74 unsigned int sysrate; // max rate in bytes/s |
2529 | 75 //int num_streams; |
8585 | 76 muxer_stream_t* def_v; // default video stream (for general headers) |
77 muxer_stream_t* streams[MUXER_MAX_STREAMS]; | |
17023
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
78 // muxer frame buffer: |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
79 struct muxbuf_t * muxbuf; |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
80 int muxbuf_num; |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
81 int muxbuf_skip_buffer; |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
82 // functions: |
21660
ca9da45d13e9
muxers now write to output muxer->stream rather than to muxer->file
nicodvb
parents:
19360
diff
changeset
|
83 stream_t *stream; |
14753
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
84 void (*fix_stream_parameters)(muxer_stream_t *); |
17487
fa17424b4c7b
change muxer_write_chunk() so that pts/dts _could_ be passed from encoder to muxer
michael
parents:
17480
diff
changeset
|
85 void (*cont_write_chunk)(muxer_stream_t *,size_t,unsigned int, double dts, double pts); |
9007
12fc55eb3373
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
8585
diff
changeset
|
86 void (*cont_write_header)(struct muxer_t *); |
12fc55eb3373
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
8585
diff
changeset
|
87 void (*cont_write_index)(struct muxer_t *); |
8585 | 88 muxer_stream_t* (*cont_new_stream)(struct muxer_t *,int); |
14753
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
89 void *priv; |
8585 | 90 } muxer_t; |
2529 | 91 |
17023
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
92 /* muxer frame buffer */ |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
93 typedef struct muxbuf_t { |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
94 muxer_stream_t *stream; /* pointer back to corresponding stream */ |
17487
fa17424b4c7b
change muxer_write_chunk() so that pts/dts _could_ be passed from encoder to muxer
michael
parents:
17480
diff
changeset
|
95 double dts; /* decode timestamp / time at which this packet should be feeded into the decoder */ |
fa17424b4c7b
change muxer_write_chunk() so that pts/dts _could_ be passed from encoder to muxer
michael
parents:
17480
diff
changeset
|
96 double pts; /* presentation timestamp / time at which the data in this packet will be presented to the user */ |
17023
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
97 unsigned char *buffer; |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
98 size_t len; |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
99 unsigned int flags; |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
100 } muxbuf_t; |
dd5be8f8d16d
buffering in the muxer layer; patch by Corey Hickey (bugfood-ml ad fatooh punctum org) plus small fixes by me
nicodvb
parents:
15754
diff
changeset
|
101 |
21960 | 102 extern char *force_fourcc; |
103 | |
21660
ca9da45d13e9
muxers now write to output muxer->stream rather than to muxer->file
nicodvb
parents:
19360
diff
changeset
|
104 muxer_t *muxer_new_muxer(int type,stream_t *stream); |
8585 | 105 #define muxer_new_stream(muxer,a) muxer->cont_new_stream(muxer,a) |
14753
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
106 #define muxer_stream_fix_parameters(muxer, a) muxer->fix_stream_parameters(a) |
17487
fa17424b4c7b
change muxer_write_chunk() so that pts/dts _could_ be passed from encoder to muxer
michael
parents:
17480
diff
changeset
|
107 void muxer_write_chunk(muxer_stream_t *s, size_t len, unsigned int flags, double dts, double pts); |
9007
12fc55eb3373
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
8585
diff
changeset
|
108 #define muxer_write_header(muxer) muxer->cont_write_header(muxer) |
12fc55eb3373
Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents:
8585
diff
changeset
|
109 #define muxer_write_index(muxer) muxer->cont_write_index(muxer) |
2529 | 110 |
14753
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
111 int muxer_init_muxer_avi(muxer_t *); |
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
112 int muxer_init_muxer_mpeg(muxer_t *); |
70c446099f40
new mpeg muxer compatible with dvd/[s]vcd; small changes in the muxer layer (sanity checks in the muxer_init functions)
nicodvb
parents:
12061
diff
changeset
|
113 int muxer_init_muxer_rawvideo(muxer_t *); |
14955 | 114 int muxer_init_muxer_lavf(muxer_t *); |
15754 | 115 int muxer_init_muxer_rawaudio(muxer_t *); |