videodecoder: Avoid recursive drain/flush calls
authorEdward Hervey <edward@centricular.com>
Tue, 7 Jun 2016 08:31:59 +0000 (10:31 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Tue, 7 Jun 2016 08:31:59 +0000 (10:31 +0200)
_chain_forward() can also be called with reverse playback. Blindly
calling drain_out() on DISCONT buffers would end up in a recursive
call.

gst-libs/gst/video/gstvideodecoder.c

index ebcd7f2..c2e5f0d 100644 (file)
@@ -2179,7 +2179,7 @@ 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))
+  if (decoder->input_segment.rate > 0.0 && GST_BUFFER_IS_DISCONT (buf))
     ret = gst_video_decoder_drain_out (decoder, FALSE);
 
   if (priv->current_frame == NULL)