From 7d9dd13c6e11c0e8be2906b41d23103bf6a83200 Mon Sep 17 00:00:00 2001 From: Tim-Philipp Müller Date: Tue, 1 Nov 2005 12:35:39 +0000 Subject: gst/matroska/: Set timestamps on outgoing ebml headers as well, so that the element after matroskamux can get the tim... MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message from CVS: Reviewed by: Tim-Philipp Müller * 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). --- gst/matroska/ebml-write.c | 3 +++ gst/matroska/ebml-write.h | 1 + gst/matroska/matroska-mux.c | 3 +++ 3 files changed, 7 insertions(+) (limited to 'gst/matroska') diff --git a/gst/matroska/ebml-write.c b/gst/matroska/ebml-write.c index 27bc6b55..46c83842 100644 --- a/gst/matroska/ebml-write.c +++ b/gst/matroska/ebml-write.c @@ -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; } diff --git a/gst/matroska/ebml-write.h b/gst/matroska/ebml-write.h index 01a99929..b579d8b2 100644 --- a/gst/matroska/ebml-write.h +++ b/gst/matroska/ebml-write.h @@ -46,6 +46,7 @@ typedef struct _GstEbmlWrite { GstPad *srcpad; guint64 pos; + GstClockTime timestamp; GstBuffer *cache; guint cache_size; diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c index ee19fa38..ca8ab86e 100644 --- a/gst/matroska/matroska-mux.c +++ b/gst/matroska/matroska-mux.c @@ -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)) { -- cgit