summaryrefslogtreecommitdiffstats
path: root/libmpdemux/muxer.h
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-12-27 22:43:20 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-12-27 22:43:20 +0000
commitbf46a109ede5d25f506cc75ae80fe1acc5b34edd (patch)
treea2cd8454df8950c0ab1ced5add63f293ea35d242 /libmpdemux/muxer.h
parentbc9afe8d39c9e12596677be1141f8098fec73db6 (diff)
downloadmpv-bf46a109ede5d25f506cc75ae80fe1acc5b34edd.tar.bz2
mpv-bf46a109ede5d25f506cc75ae80fe1acc5b34edd.tar.xz
the long-waited MUXER layer, and new MPEG-PS muxer
patch by Andriy N. Gritsenko <andrej@lucky.net> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8586 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/muxer.h')
-rw-r--r--libmpdemux/muxer.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/libmpdemux/muxer.h b/libmpdemux/muxer.h
new file mode 100644
index 0000000000..4410209559
--- /dev/null
+++ b/libmpdemux/muxer.h
@@ -0,0 +1,74 @@
+
+#define MUXER_MAX_STREAMS 16
+
+#define MUXER_TYPE_VIDEO 0
+#define MUXER_TYPE_AUDIO 1
+
+#define MUXER_TYPE_AVI 0
+#define MUXER_TYPE_MPEG 1
+
+#define MUXER_MPEG_BLOCKSIZE 2048 // 2048 or 2324 - ?
+
+typedef struct {
+ // muxer data:
+ int type; // audio or video
+ int id; // stream no
+ uint32_t ckid; // chunk id (00dc 01wb etc)
+ double timer;
+ off_t size;
+ // buffering:
+ unsigned char *buffer;
+ unsigned int buffer_size;
+ unsigned int buffer_len;
+ // mpeg block buffer:
+ unsigned char *b_buffer;
+ unsigned int b_buffer_ptr;
+ // source stream:
+ void* source; // sh_audio or sh_video
+ int codec; // codec used for encoding. 0 means copy
+ // avi stream header:
+ AVIStreamHeader h; // Rate/Scale and SampleSize must be filled by caller!
+ // stream specific:
+ WAVEFORMATEX *wf;
+ BITMAPINFOHEADER *bih; // in format
+ // mpeg specific:
+ unsigned int gop_start; // frame number of this GOP start
+ size_t ipb[3]; // sizes of I/P/B frames
+} muxer_stream_t;
+
+typedef struct {
+ uint32_t id;
+ char *text;
+} muxer_info_t;
+
+typedef struct muxer_t{
+ // encoding:
+ MainAVIHeader avih;
+ unsigned int movi_start;
+ unsigned int movi_end;
+ unsigned int file_end; // for MPEG it's system timestamp in 1/90000 s
+ // index:
+ AVIINDEXENTRY *idx;
+ int idx_pos;
+ int idx_size;
+ // streams:
+ int num_videos; // for MPEG recalculations
+ unsigned int sysrate; // max rate in bytes/s
+ //int num_streams;
+ muxer_stream_t* def_v; // default video stream (for general headers)
+ muxer_stream_t* streams[MUXER_MAX_STREAMS];
+ void (*cont_write_chunk)(struct muxer_t *,muxer_stream_t *,FILE *,size_t,unsigned int);
+ void (*cont_write_header)(struct muxer_t *,FILE *);
+ void (*cont_write_index)(struct muxer_t *,FILE *);
+ muxer_stream_t* (*cont_new_stream)(struct muxer_t *,int);
+} muxer_t;
+
+muxer_t* muxer_new_muxer(int type);
+#define muxer_new_stream(muxer,a) muxer->cont_new_stream(muxer,a)
+#define muxer_write_chunk(muxer,a,b,c,d) muxer->cont_write_chunk(muxer,a,b,c,d)
+#define muxer_write_header(muxer,f) muxer->cont_write_header(muxer,f)
+#define muxer_write_index(muxer,f) muxer->cont_write_index(muxer,f)
+
+void muxer_init_muxer_avi(muxer_t *);
+void muxer_init_muxer_mpeg(muxer_t *);
+