summaryrefslogtreecommitdiffstats
path: root/gst/flv
diff options
context:
space:
mode:
authorJulien Moutte <julien@moutte.net>2008-11-24 11:17:19 +0000
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-05-12 21:21:00 +0200
commitd759265a51fa3e5aadf18723a650ae92f859644c (patch)
treeab89fb009da6e93469f67787330f5d52d316cd37 /gst/flv
parent17d96d04273a31995108db7edb3150bbfc92461d (diff)
[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@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/flv')
-rw-r--r--gst/flv/gstflvdemux.c12
-rw-r--r--gst/flv/gstflvparse.c3
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: