diff 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
line wrap: on
line diff
--- a/libmpdemux/muxer.h	Mon Nov 21 21:17:27 2005 +0000
+++ b/libmpdemux/muxer.h	Mon Nov 21 22:53:14 2005 +0000
@@ -28,6 +28,8 @@
   unsigned int b_buffer_size;	//size of b_buffer
   unsigned int b_buffer_ptr;	//index to next data to write
   unsigned int b_buffer_len;	//len of next data to write
+  // muxer frame buffer:
+  unsigned int muxbuf_seen;
   // source stream:
   void* source; // sh_audio or sh_video
   int codec; // codec used for encoding. 0 means copy
@@ -37,7 +39,6 @@
   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 of that stream
   struct muxer_t *muxer;
@@ -66,6 +67,11 @@
   //int num_streams;
   muxer_stream_t* def_v;  // default video stream (for general headers)
   muxer_stream_t* streams[MUXER_MAX_STREAMS];
+  // muxer frame buffer:
+  struct muxbuf_t * muxbuf;
+  int muxbuf_num;
+  int muxbuf_skip_buffer;
+  // functions:
   void (*fix_stream_parameters)(muxer_stream_t *);
   void (*cont_write_chunk)(muxer_stream_t *,size_t,unsigned int);
   void (*cont_write_header)(struct muxer_t *);
@@ -75,10 +81,20 @@
   void *priv;
 } muxer_t;
 
+/* muxer frame buffer */
+typedef struct muxbuf_t {
+  muxer_stream_t *stream; /* pointer back to corresponding stream */
+  double timer; /* snapshot of stream timer */
+  unsigned char *buffer;
+  size_t len;
+  unsigned int flags;
+} muxbuf_t;
+
+
 muxer_t *muxer_new_muxer(int type,FILE *);
 #define muxer_new_stream(muxer,a) muxer->cont_new_stream(muxer,a)
 #define muxer_stream_fix_parameters(muxer, a) muxer->fix_stream_parameters(a)
-#define muxer_write_chunk(a,b,c) a->muxer->cont_write_chunk(a,b,c)
+void muxer_write_chunk(muxer_stream_t *s, size_t len, unsigned int flags);
 #define muxer_write_header(muxer) muxer->cont_write_header(muxer)
 #define muxer_write_index(muxer) muxer->cont_write_index(muxer)