From 21a02e7672f6f2282968471436906f25fa79c1a2 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Mon, 12 Nov 2018 19:59:41 +0100 Subject: [PATCH] gstsegment: Add GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED This is generally useful, and mandated by the ONVIF streaming spec, section 6.5.3 --- gst/gstsegment.c | 2 ++ gst/gstsegment.h | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/gst/gstsegment.c b/gst/gstsegment.c index 958b39f737..035e46433f 100644 --- a/gst/gstsegment.c +++ b/gst/gstsegment.c @@ -354,6 +354,8 @@ gst_segment_do_seek (GstSegment * segment, gdouble rate, segment->flags |= GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS; if ((flags & GST_SEEK_FLAG_TRICKMODE_NO_AUDIO) != 0) segment->flags |= GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO; + if ((flags & GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED) != 0) + segment->flags |= GST_SEGMENT_FLAG_TRICKMODE_FORWARD_PREDICTED; segment->rate = rate; segment->applied_rate = 1.0; diff --git a/gst/gstsegment.h b/gst/gstsegment.h index 923a06fe17..64bbd65a63 100644 --- a/gst/gstsegment.h +++ b/gst/gstsegment.h @@ -73,6 +73,11 @@ typedef enum { * playback, request that elements only decode keyframes * and skip all other content, for formats that have * keyframes. (Since: 1.6) + * @GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED: When doing fast forward or fast reverse + * playback, request that elements only decode keyframes and + * forward predicted frames and skip all other content (for example + * B-Frames), for formats that have keyframes and forward predicted + * frames. (Since: 1.18) * @GST_SEEK_FLAG_TRICKMODE_NO_AUDIO: when doing fast forward or fast reverse * playback, request that audio decoder elements skip * decoding and output only gap events or silence. (Since: 1.6) @@ -137,6 +142,7 @@ typedef enum { /* Careful to restart next flag with 1<<7 here */ GST_SEEK_FLAG_TRICKMODE_KEY_UNITS = (1 << 7), GST_SEEK_FLAG_TRICKMODE_NO_AUDIO = (1 << 8), + GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED = (1 << 9), } GstSeekFlags; /** @@ -148,6 +154,8 @@ typedef enum { * @GST_SEGMENT_FLAG_SEGMENT: send SEGMENT_DONE instead of EOS * @GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS: Decode only keyframes, where * possible (Since: 1.6) + * @GST_SEGMENT_FLAG_TRICKMODE_FORWARD_PREDICTED: Decode only keyframes or forward + * predicted frames, where possible (Since: 1.18) * @GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO: Do not decode any audio, where * possible (Since: 1.6) * @GST_SEGMENT_FLAG_SKIP: Deprecated backward compatibility flag, replaced @@ -166,6 +174,7 @@ typedef enum { /*< flags >*/ GST_SEGMENT_FLAG_SKIP = GST_SEEK_FLAG_TRICKMODE, GST_SEGMENT_FLAG_SEGMENT = GST_SEEK_FLAG_SEGMENT, GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS = GST_SEEK_FLAG_TRICKMODE_KEY_UNITS, + GST_SEGMENT_FLAG_TRICKMODE_FORWARD_PREDICTED = GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED, GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO = GST_SEEK_FLAG_TRICKMODE_NO_AUDIO } GstSegmentFlags;