From a3059bec1f4d32c42d3aae27834fd520c8bbb65d Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Wed, 4 Feb 2015 21:50:51 +1100 Subject: [PATCH] qtdemux: Simple implementation of GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS When the trickmode key-units flag is set on the segment, simply skip any sample on a video stream that isn't a keyframe --- gst/isomp4/qtdemux.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index baffc76a2b..5f1fffac6f 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -4531,6 +4531,15 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux) &offset, &sample_size, &dts, &pts, &duration, &keyframe))) goto eos_stream; + /* If we're doing a keyframe-only trickmode, only push keyframes on video streams */ + if (G_UNLIKELY (qtdemux-> + segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS)) { + if (stream->subtype == FOURCC_vide && !keyframe) { + GST_LOG_OBJECT (qtdemux, "Skipping non-keyframe on stream %d", index); + goto next; + } + } + GST_DEBUG_OBJECT (qtdemux, "pushing from stream %d, empty %d offset %" G_GUINT64_FORMAT ", size %d, dts=%" GST_TIME_FORMAT ", pts=%" GST_TIME_FORMAT