mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 02:00:33 +00:00
videodecoder: Don't queue frames in TRICKMODE_KEY_UNITS
When the input is TRICKMODE_KEY_UNITS, we expect to only receive keyframes which we want to decode/push immediately. Therefore don't queue them. If upstream didn't send just keyframes (which is the ideal situation), two different things can happen: 1) Either the subclass checks the segment flags and properly configures the decoder implementation to only decode/output keyframes, 2) Or the subclass really decodes and outputs everything, in which case the reverse frames will end up arriving "late" downstream (and will be dropped). If upstream did properly send GOP in reverse order, we still end up just showing keyframes (but at the overhead of decoding everything). https://bugzilla.gnome.org/show_bug.cgi?id=777094
This commit is contained in:
parent
36b7e5890f
commit
dfa548dc5b
1 changed files with 2 additions and 1 deletions
|
@ -3052,7 +3052,8 @@ gst_video_decoder_finish_frame (GstVideoDecoder * decoder,
|
||||||
gst_video_decoder_release_frame (decoder, frame);
|
gst_video_decoder_release_frame (decoder, frame);
|
||||||
frame = NULL;
|
frame = NULL;
|
||||||
|
|
||||||
if (decoder->output_segment.rate < 0.0) {
|
if (decoder->output_segment.rate < 0.0
|
||||||
|
&& !(decoder->output_segment.flags & GST_SEEK_FLAG_TRICKMODE_KEY_UNITS)) {
|
||||||
GST_LOG_OBJECT (decoder, "queued frame");
|
GST_LOG_OBJECT (decoder, "queued frame");
|
||||||
priv->output_queued = g_list_prepend (priv->output_queued, output_buffer);
|
priv->output_queued = g_list_prepend (priv->output_queued, output_buffer);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue