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 31dac8fb612267ab8efb5c01e7e1b8b9c06745e0..4ff99774e913b6a1b0b5328160375229d3dd3ebc 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 27bc6b55fcaf00f58ded02d04afc53ffb5890b59..46c83842ea7fc03a01a0afa6183dd687437e5d1b 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 01a999292930a1f3f6cab7cc836717cfd9fd8a8d..b579d8b2b36521ff5be6a9dcde1833af7e2dc4ad 100644 (file)
@@ -46,6 +46,7 @@ typedef struct _GstEbmlWrite {
 
   GstPad *srcpad;
   guint64 pos;
+  GstClockTime timestamp;
 
   GstBuffer *cache;
   guint cache_size;
index ee19fa3813910d967c88a0533583f08faebc5b87..ca8ab86ead50c18562a1b60e52ce82ea129432a9 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)) {