From eb1ebf226ff8c29ea976169f81135219f1ab412b Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Sat, 4 Jun 2016 09:49:00 +0200 Subject: [PATCH] videodecoder: Drain decoder on DISCONT buffers This ensures the decoder is properly drained out when receiving a DISCONT buffer. The optimal way of doing this would have been to receive a GAP event before hand but it is not always possible. Fixes big delays with some decoders (ex gst-libav) that will not drain out data when only decoding keyframes. https://bugzilla.gnome.org/show_bug.cgi?id=767232 --- gst-libs/gst/video/gstvideodecoder.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index 957dea1d27..5f463bd5db 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -2179,6 +2179,9 @@ gst_video_decoder_chain_forward (GstVideoDecoder * decoder, g_return_val_if_fail (priv->packetized || klass->parse, GST_FLOW_ERROR); + if (GST_BUFFER_IS_DISCONT (buf)) + ret = gst_video_decoder_drain_out (decoder, FALSE); + if (priv->current_frame == NULL) priv->current_frame = gst_video_decoder_new_frame (decoder);