diff libmpdemux/muxer.c @ 17487:fa17424b4c7b

change muxer_write_chunk() so that pts/dts _could_ be passed from encoder to muxer
author michael
date Thu, 26 Jan 2006 19:32:07 +0000
parents 60189cd9bbc8
children f36966ddbf77
line wrap: on
line diff
--- a/libmpdemux/muxer.c	Thu Jan 26 00:48:53 2006 +0000
+++ b/libmpdemux/muxer.c	Thu Jan 26 19:32:07 2006 +0000
@@ -52,9 +52,12 @@
 /* buffer frames until we either:
  * (a) have at least one frame from each stream
  * (b) run out of memory */
-void muxer_write_chunk(muxer_stream_t *s, size_t len, unsigned int flags) {
+void muxer_write_chunk(muxer_stream_t *s, size_t len, unsigned int flags, double dts, double pts) {
+    if(dts == MP_NOPTS_VALUE) dts= s->timer;
+    if(pts == MP_NOPTS_VALUE) pts= s->timer; // this is wrong
+
     if (s->muxer->muxbuf_skip_buffer) {
-      s->muxer->cont_write_chunk(s, len, flags);
+      s->muxer->cont_write_chunk(s, len, flags, dts, pts);
     }
     else {
       int num = s->muxer->muxbuf_num++;
@@ -70,7 +73,8 @@
       
       /* buffer this frame */
       buf->stream = s;
-      buf->timer = s->timer;
+      buf->dts= dts;
+      buf->pts= pts;
       buf->len = len;
       buf->flags = flags;
       buf->buffer = malloc(len * sizeof (unsigned char));
@@ -89,11 +93,6 @@
       
       /* see if we can flush buffer now */
       if (s->muxer->muxbuf_skip_buffer) {
-        muxbuf_t *tmp_buf = malloc(sizeof(muxbuf_t));
-        if (!tmp_buf) {
-          mp_msg(MSGT_MUXER, MSGL_FATAL, MSGTR_MuxbufMallocErr);
-          return;
-        }
         mp_msg(MSGT_MUXER, MSGL_V, MSGTR_MuxbufSending, s->muxer->muxbuf_num);
         
         /* fix parameters for all streams */
@@ -109,23 +108,23 @@
         
         /* send all buffered frames to muxer */
         for (num = 0; num < s->muxer->muxbuf_num; ++num) {
+          muxbuf_t tmp_buf;
           buf = s->muxer->muxbuf + num;
           s = buf->stream;
           
           /* 1. save timer and buffer (might have changed by now) */
-          tmp_buf->timer = s->timer;
-          tmp_buf->buffer = s->buffer;
+          tmp_buf.dts = s->timer;
+          tmp_buf.buffer = s->buffer;
           
           /* 2. move stored timer and buffer into stream and mux it */
-          s->timer = buf->timer;
+          s->timer = buf->dts;
           s->buffer = buf->buffer;
-          s->muxer->cont_write_chunk(s, buf->len, buf->flags);
+          s->muxer->cont_write_chunk(s, buf->len, buf->flags, buf->dts, buf->pts);
           
           /* 3. restore saved timer and buffer */
-          s->timer = tmp_buf->timer;
-          s->buffer = tmp_buf->buffer;
+          s->timer = tmp_buf.dts;
+          s->buffer = tmp_buf.buffer;
         }
-        free(tmp_buf);
         
         free(s->muxer->muxbuf);
         s->muxer->muxbuf_num = 0;