gst/matroska/: Set timestamps on outgoing ebml headers as well, so that the element...
authorTim-Philipp Müller <tim@centricular.net>
Tue, 1 Nov 2005 12:35:39 +0000 (12:35 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Tue, 1 Nov 2005 12:35:39 +0000 (12:35 +0000)
Original commit message from CVS:
Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
* gst/matroska/ebml-write.c: (gst_ebml_write_new),
(gst_ebml_write_reset), (gst_ebml_write_element_new):
* gst/matroska/ebml-write.h:
* gst/matroska/matroska-mux.c: (gst_matroska_mux_write_data):
Set timestamps on outgoing ebml headers as well, so that the
element after matroskamux can get the timestamp already when
reading the first ebml element and doesn't have to wait for
the actual data buffer for that (#320308).

ChangeLog
gst/matroska/ebml-write.c
gst/matroska/ebml-write.h
gst/matroska/matroska-mux.c

index 31dac8f..4ff9977 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2005-11-01  Josef Zlomek  <josef dot zlomek at xeris dot cz>
+
+       Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/matroska/ebml-write.c: (gst_ebml_write_new),
+       (gst_ebml_write_reset), (gst_ebml_write_element_new):
+       * gst/matroska/ebml-write.h:
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_write_data):
+         Set timestamps on outgoing ebml headers as well, so that the
+         element after matroskamux can get the timestamp already when
+         reading the first ebml element and doesn't have to wait for
+         the actual data buffer for that (#320308).
+         
 2005-10-31  Andy Wingo  <wingo@pobox.com>
 
        * gst/videomixer/videomixer.c (gst_videomixer_pad_unlink)
index 27bc6b5..46c8384 100644 (file)
@@ -89,6 +89,7 @@ gst_ebml_write_new (GstPad * srcpad)
       GST_EBML_WRITE (g_object_new (GST_TYPE_EBML_WRITE, NULL));
 
   ebml->srcpad = gst_object_ref (srcpad);
+  ebml->timestamp = GST_CLOCK_TIME_NONE;
 
   gst_ebml_write_reset (ebml);
 
@@ -113,6 +114,7 @@ gst_ebml_write_reset (GstEbmlWrite * ebml)
   }
   ebml->cache_size = 0;
   ebml->last_write_result = GST_FLOW_OK;
+  ebml->timestamp = GST_CLOCK_TIME_NONE;
 }
 
 
@@ -220,6 +222,7 @@ gst_ebml_write_element_new (GstEbmlWrite * ebml, guint size)
   /* else, use a one-element buffer. This is slower */
   buf = gst_buffer_new_and_alloc (size);
   GST_BUFFER_SIZE (buf) = 0;
+  GST_BUFFER_TIMESTAMP (buf) = ebml->timestamp;
 
   return buf;
 }
index 01a9992..b579d8b 100644 (file)
@@ -46,6 +46,7 @@ typedef struct _GstEbmlWrite {
 
   GstPad *srcpad;
   guint64 pos;
+  GstClockTime timestamp;
 
   GstBuffer *cache;
   guint cache_size;
index ee19fa3..ca8ab86 100644 (file)
@@ -1338,6 +1338,9 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux)
   buf = best->buffer;
   best->buffer = NULL;
 
+  /* set the timestamp for outgoing buffers */
+  ebml->timestamp = GST_BUFFER_TIMESTAMP (buf);
+
   if (mux->cluster) {
     /* start a new cluster every two seconds */
     if (mux->cluster_time + GST_SECOND * 2 < GST_BUFFER_TIMESTAMP (buf)) {