From: Tim-Philipp Müller Date: Wed, 13 Oct 2010 22:46:02 +0000 (+0100) Subject: matroskamux: set correct buffer offsets after seeks X-Git-Tag: RELEASE-0.10.26~37 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=84e47e579bf1383a73d15351476fcc2eec8e0fd9;p=platform%2Fupstream%2Fgst-plugins-good.git matroskamux: set correct buffer offsets after seeks Re-use the existing 'pos' field maintained by ebml writer to set buffer offsets. This also makes sure that we set the right offsets on buffers after a seek (e.g. when writing an index at the end). --- diff --git a/gst/matroska/ebml-write.c b/gst/matroska/ebml-write.c index da619da..9ac786d 100644 --- a/gst/matroska/ebml-write.c +++ b/gst/matroska/ebml-write.c @@ -65,7 +65,6 @@ gst_ebml_write_init (GstEbmlWrite * ebml, GstEbmlWriteClass * klass) ebml->streamheader = NULL; ebml->streamheader_pos = 0; ebml->writing_streamheader = FALSE; - ebml->current_offset = 0; ebml->caps = NULL; } @@ -135,7 +134,6 @@ gst_ebml_write_reset (GstEbmlWrite * ebml) ebml->last_write_result = GST_FLOW_OK; ebml->timestamp = GST_CLOCK_TIME_NONE; ebml->need_newsegment = TRUE; - ebml->current_offset = 0; } @@ -224,9 +222,8 @@ gst_ebml_write_flush_cache (GstEbmlWrite * ebml, gboolean is_keyframe) ebml->cache = NULL; GST_DEBUG ("Flushing cache of size %d", GST_BUFFER_SIZE (buffer)); gst_buffer_set_caps (buffer, ebml->caps); - GST_BUFFER_OFFSET (buffer) = ebml->current_offset; - ebml->current_offset += GST_BUFFER_SIZE (buffer); - GST_BUFFER_OFFSET_END (buffer) = ebml->current_offset; + GST_BUFFER_OFFSET (buffer) = ebml->pos - GST_BUFFER_SIZE (buffer); + GST_BUFFER_OFFSET_END (buffer) = ebml->pos; if (ebml->last_write_result == GST_FLOW_OK) { if (ebml->need_newsegment) { GstEvent *ev; @@ -406,9 +403,8 @@ gst_ebml_write_element_push (GstEbmlWrite * ebml, GstBuffer * buf) } buf = gst_buffer_make_metadata_writable (buf); gst_buffer_set_caps (buf, ebml->caps); - GST_BUFFER_OFFSET (buf) = ebml->current_offset; - ebml->current_offset += GST_BUFFER_SIZE (buf); - GST_BUFFER_OFFSET_END (buf) = ebml->current_offset; + GST_BUFFER_OFFSET (buf) = ebml->pos - GST_BUFFER_SIZE (buf); + GST_BUFFER_OFFSET_END (buf) = ebml->pos; if (ebml->writing_streamheader) { GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_IN_CAPS); } diff --git a/gst/matroska/ebml-write.h b/gst/matroska/ebml-write.h index 852d6c8..2240f4f 100644 --- a/gst/matroska/ebml-write.h +++ b/gst/matroska/ebml-write.h @@ -59,7 +59,6 @@ typedef struct _GstEbmlWrite { gboolean writing_streamheader; GstByteWriter *streamheader; guint64 streamheader_pos; - guint64 current_offset; GstCaps *caps; } GstEbmlWrite;