annotate libmpdemux/muxer.h @ 16429:84174804804b

Updates to NUT spec: 1. remove average_bitrate 2. add other_stream_header, for subtitles and metadata 3. add max_pts to index 4. index_ptr - a 64 bit integer to say the total length of all index packets 5. specify how to write "multiple" indexes 6. change forward_ptr behavior, starts right after forward_ptr, ends after checksum 7. remove stream_id <-> stream_class limitation. 8. time_base_nom must also be non zero. 9. rename time_base_nom and time_base_denom, now timebase means the length of a tick, not amounts of ticks 10. remove (old?) sample_rate_mul stuff. 11. specify what exactly the checksum covers. 12. specify that stream classes which have multiple streams must have an info packet.. (in new Semantic requirements section) 13. Rename 'timestamp' to pts. 14. Change date of draft... 15. Add myself to authors...
author ods15
date Fri, 09 Sep 2005 10:26:21 +0000
parents 7b0599d9614a
children dd5be8f8d16d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
1
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
2 #define MUXER_MAX_STREAMS 16
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
3
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
4 #define MUXER_TYPE_VIDEO 0
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
5 #define MUXER_TYPE_AUDIO 1
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
6
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
7 #define MUXER_TYPE_AVI 0
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
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
7b0599d9614a rawaudio muxer
ranma
parents: 14955
diff changeset
11 #define MUXER_TYPE_RAWAUDIO 4
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
12
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
13
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
14 typedef struct {
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
15 // muxer data:
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
16 int type; // audio or video
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
17 int id; // stream no
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
18 uint32_t ckid; // chunk id (00dc 01wb etc)
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
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
656a1b45b309 Use aspect from encoder for AVI vprp header
ranma
parents: 12036
diff changeset
21 float aspect; // aspect ratio of this stream (set by ve_*.c)
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
22 // buffering:
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
23 unsigned char *buffer;
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
24 unsigned int buffer_size;
2592
2efa0d20e4c4 buffer_len added
arpi
parents: 2529
diff changeset
25 unsigned int buffer_len;
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
26 // mpeg block buffer:
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
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
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
31 // source stream:
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
32 void* source; // sh_audio or sh_video
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
33 int codec; // codec used for encoding. 0 means copy
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
34 // avi stream header:
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
35 AVIStreamHeader h; // Rate/Scale and SampleSize must be filled by caller!
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
36 // stream specific:
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
37 WAVEFORMATEX *wf;
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
38 BITMAPINFOHEADER *bih; // in format
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
39 // mpeg specific:
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
40 unsigned int gop_start; // frame number of this GOP start
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
41 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
42 // muxer of that stream
12fc55eb3373 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
43 struct muxer_t *muxer;
11222
b82e3ecb11e0 some updates in muxer api
alex
parents: 9007
diff changeset
44 void *priv; // private stream specific data stored by the muxer
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
45 } muxer_stream_t;
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
46
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
47 typedef struct {
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
48 uint32_t id;
7145
3854945aefbb new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents: 5572
diff changeset
49 char *text;
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
50 } muxer_info_t;
7145
3854945aefbb new mencoder option -info, to store copyright, title, encoder version etc in AVI
arpi
parents: 5572
diff changeset
51
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
52 typedef struct muxer_t{
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
53 // encoding:
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
54 MainAVIHeader avih;
12036
846ed866f86c OpenDML read/write support
ranma
parents: 12016
diff changeset
55 off_t movi_start;
846ed866f86c OpenDML read/write support
ranma
parents: 12016
diff changeset
56 off_t movi_end;
846ed866f86c OpenDML read/write support
ranma
parents: 12016
diff changeset
57 off_t file_end; // for MPEG it's system timestamp in 1/90000 s
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
58 // index:
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
59 AVIINDEXENTRY *idx;
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
60 int idx_pos;
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
61 int idx_size;
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
62 // streams:
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
63 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
64 int num_audios;
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
65 unsigned int sysrate; // max rate in bytes/s
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
66 //int num_streams;
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
67 muxer_stream_t* def_v; // default video stream (for general headers)
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
68 muxer_stream_t* streams[MUXER_MAX_STREAMS];
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
69 void (*fix_stream_parameters)(muxer_stream_t *);
9007
12fc55eb3373 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
70 void (*cont_write_chunk)(muxer_stream_t *,size_t,unsigned int);
12fc55eb3373 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
71 void (*cont_write_header)(struct muxer_t *);
12fc55eb3373 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
72 void (*cont_write_index)(struct muxer_t *);
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
73 muxer_stream_t* (*cont_new_stream)(struct muxer_t *,int);
9007
12fc55eb3373 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
74 FILE* file;
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
75 void *priv;
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
76 } muxer_t;
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
77
9007
12fc55eb3373 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
78 muxer_t *muxer_new_muxer(int type,FILE *);
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7145
diff changeset
79 #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
80 #define muxer_stream_fix_parameters(muxer, a) muxer->fix_stream_parameters(a)
9007
12fc55eb3373 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
81 #define muxer_write_chunk(a,b,c) a->muxer->cont_write_chunk(a,b,c)
12fc55eb3373 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
82 #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
83 #define muxer_write_index(muxer) muxer->cont_write_index(muxer)
2529
266dab71162b AVI muxer rewritten
arpi
parents:
diff changeset
84
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
85 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
86 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
87 int muxer_init_muxer_rawvideo(muxer_t *);
14955
081167e3d000 missing declaration, fixes:
rathann
parents: 14757
diff changeset
88 int muxer_init_muxer_lavf(muxer_t *);
15754
7b0599d9614a rawaudio muxer
ranma
parents: 14955
diff changeset
89 int muxer_init_muxer_rawaudio(muxer_t *);