From 50962bbcb6895560cf039e0b953d1499dc27cbec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Fri, 23 Jun 2006 12:24:56 +0000 Subject: [PATCH] gst/mpegstream/: Also flush packetizer cache when we get a buffer that has the Original commit message from CVS: * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_put): * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain): Also flush packetizer cache when we get a buffer that has the DISCONT flag set; update current byte position from buffer offset after a flush. --- ChangeLog | 9 +++++++++ gst/mpegstream/gstmpegpacketize.c | 9 +++++++++ gst/mpegstream/gstmpegparse.c | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/ChangeLog b/ChangeLog index 594aed624d..0785c11ec9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-06-23 Tim-Philipp Müller + + * gst/mpegstream/gstmpegpacketize.c: + (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_put): + * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain): + Also flush packetizer cache when we get a buffer that has the + DISCONT flag set; update current byte position from buffer + offset after a flush. + 2006-06-23 Tim-Philipp Müller * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new), diff --git a/gst/mpegstream/gstmpegpacketize.c b/gst/mpegstream/gstmpegpacketize.c index bc5090f2b1..c284055fa8 100644 --- a/gst/mpegstream/gstmpegpacketize.c +++ b/gst/mpegstream/gstmpegpacketize.c @@ -57,6 +57,8 @@ gst_mpeg_packetize_flush_cache (GstMPEGPacketize * packetize) { g_return_if_fail (packetize != NULL); + packetize->cache_byte_pos += packetize->cache_tail; + packetize->resync = TRUE; packetize->cache_head = 0; packetize->cache_tail = 0; @@ -84,6 +86,13 @@ gst_mpeg_packetize_put (GstMPEGPacketize * packetize, GstBuffer * buf) { int cache_len = packetize->cache_tail - packetize->cache_head; + if (packetize->cache_head == 0 && cache_len == 0 && + GST_BUFFER_OFFSET_IS_VALID (buf)) { + packetize->cache_byte_pos = GST_BUFFER_OFFSET (buf); + GST_DEBUG ("cache byte position now %" G_GINT64_FORMAT, + packetize->cache_byte_pos); + } + if (cache_len + GST_BUFFER_SIZE (buf) > packetize->cache_size) { /* the buffer does not fit into the cache so grow the cache */ diff --git a/gst/mpegstream/gstmpegparse.c b/gst/mpegstream/gstmpegparse.c index 8a8230b5f2..ed8ee0ed60 100644 --- a/gst/mpegstream/gstmpegparse.c +++ b/gst/mpegstream/gstmpegparse.c @@ -691,6 +691,11 @@ gst_mpeg_parse_chain (GstPad * pad, GstBuffer * buffer) GstClockTime time; guint64 size; + if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) { + GST_DEBUG_OBJECT (mpeg_parse, "buffer with DISCONT flag set"); + gst_mpeg_packetize_flush_cache (mpeg_parse->packetize); + } + gst_mpeg_packetize_put (mpeg_parse->packetize, buffer); buffer = NULL;