gst/flv/gstflvdemux.c: Fix non key unit seeking by always going to the previous keyfr...
authorJulien Moutte <julien@moutte.net>
Mon, 24 Nov 2008 11:17:19 +0000 (11:17 +0000)
committerJulien Moutte <julien@moutte.net>
Mon, 24 Nov 2008 11:17:19 +0000 (11:17 +0000)
Original commit message from CVS:
2008-11-24  Julien Moutte  <julien@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.

ChangeLog
gst/flv/gstflvdemux.c
gst/flv/gstflvparse.c

index 6c8ec60..3e7cf2c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-11-24  Julien Moutte  <julien@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.
+
 2008-11-24  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
 
        Patch by: vanista <vanista at gmail dot com>
index 9e1e62f..a2bbd7c 100644 (file)
@@ -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;
index 067ba94..c4a3cb9 100644 (file)
@@ -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: