diff options
author | Julien Moutte <julien@moutte.net> | 2008-11-24 11:17:19 +0000 |
---|---|---|
committer | Julien Moutte <julien@moutte.net> | 2008-11-24 11:17:19 +0000 |
commit | 25a21ecdef154073baa7a247126b72143f3fd44b (patch) | |
tree | 48b07e8820e1c98d3b01e238c30c52b016b3661f /gst | |
parent | 2082d618f99327f27a76a2296c2846923c1bddf2 (diff) | |
download | gst-plugins-bad-25a21ecdef154073baa7a247126b72143f3fd44b.tar.gz gst-plugins-bad-25a21ecdef154073baa7a247126b72143f3fd44b.tar.bz2 gst-plugins-bad-25a21ecdef154073baa7a247126b72143f3fd44b.zip |
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@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.
Diffstat (limited to 'gst')
-rw-r--r-- | gst/flv/gstflvdemux.c | 12 | ||||
-rw-r--r-- | 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 9e1e62f2..a2bbd7cb 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 067ba94f..c4a3cb94 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: |