[gst-cvs] gst-plugins-good: [MOVED FROM BAD 47/57] gst/flv/gstflvdemux.c: Fix non key unit seeking by always going to the previous keyframe. Mark the discont flag when ...

Sebastian Dröge slomo at kemper.freedesktop.org
Tue May 12 12:58:01 PDT 2009


Module: gst-plugins-good
Branch: master
Commit: d759265a51fa3e5aadf18723a650ae92f859644c
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=d759265a51fa3e5aadf18723a650ae92f859644c

Author: Julien Moutte <julien at moutte.net>
Date:   Mon Nov 24 11:17:19 2008 +0000

[MOVED FROM BAD 47/57] gst/flv/gstflvdemux.c: Fix non key unit seeking by always going to the previous keyframe. Mark the discont flag when ...

Original commit message from CVS:
2008-11-24  Julien Moutte  <julien at fluendo.com>

* gst/flv/gstflvdemux.c: (gst_flv_demux_find_offset),
(gst_flv_demux_handle_seek_push),
(gst_flv_demux_handle_seek_pull):
Fix non key unit seeking by always going to the previous
keyframe. Mark
the discont flag when we've moved in the file.
* gst/flv/gstflvparse.c: (gst_flv_parse_audio_negotiate): MP3
streams
are parsed already, makes autoplugged pipelines shorter.

---

 gst/flv/gstflvdemux.c |   12 +++++++++---
 gst/flv/gstflvparse.c |    3 ++-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index 9e1e62f..a2bbd7c 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -612,9 +612,7 @@ gst_flv_demux_find_offset (GstFLVDemux * demux, GstSegment * segment)
   if (demux->index) {
     /* Let's check if we have an index entry for that seek time */
     entry = gst_index_get_assoc_entry (demux->index, demux->index_id,
-        GST_INDEX_LOOKUP_BEFORE,
-        (segment->flags & GST_SEEK_FLAG_KEY_UNIT) ?
-        GST_ASSOCIATION_FLAG_KEY_UNIT : GST_ASSOCIATION_FLAG_NONE,
+        GST_INDEX_LOOKUP_BEFORE, GST_ASSOCIATION_FLAG_KEY_UNIT,
         GST_FORMAT_TIME, time);
 
     if (entry) {
@@ -688,6 +686,10 @@ gst_flv_demux_handle_seek_push (GstFLVDemux * demux, GstEvent * event)
     if (G_UNLIKELY (!ret)) {
       GST_WARNING_OBJECT (demux, "upstream seek failed");
     }
+
+    /* Tell all the stream we moved to a different position (discont) */
+    demux->audio_need_discont = TRUE;
+    demux->video_need_discont = TRUE;
   } else {
     ret = TRUE;
   }
@@ -777,6 +779,10 @@ gst_flv_demux_handle_seek_pull (GstFLVDemux * demux, GstEvent * event)
     /* Do the actual seeking */
     demux->offset = gst_flv_demux_find_offset (demux, &seeksegment);
 
+    /* Tell all the stream we moved to a different position (discont) */
+    demux->audio_need_discont = TRUE;
+    demux->video_need_discont = TRUE;
+
     /* If we seeked at the beginning of the file parse the header again */
     if (G_UNLIKELY (!demux->offset)) {
       demux->state = FLV_STATE_HEADER;
diff --git a/gst/flv/gstflvparse.c b/gst/flv/gstflvparse.c
index 067ba94..c4a3cb9 100644
--- a/gst/flv/gstflvparse.c
+++ b/gst/flv/gstflvparse.c
@@ -393,7 +393,8 @@ gst_flv_parse_audio_negotiate (GstFLVDemux * demux, guint32 codec_tag,
     case 2:
     case 14:
       caps = gst_caps_new_simple ("audio/mpeg",
-          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
+          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3,
+          "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
       codec_name = "MPEG 1 Audio, Layer 3 (MP3)";
       break;
     case 0:





More information about the Gstreamer-commits mailing list