From 00492234bd0d0c7ff88108918002ab4810e4c36e Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Fri, 21 Apr 2023 13:33:11 -0400 Subject: [PATCH] v4l2: videodec: Detect flushes while setting up the capture As we missed the fact we were flushing, we could create and activate that buffer pool, and wait on it, causing a hang. We detect that we are flushing by checking the related pad state. Part-of: --- .../gst-plugins-good/sys/v4l2/gstv4l2videodec.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2videodec.c b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2videodec.c index b780d23e12..1d95b19599 100644 --- a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2videodec.c +++ b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2videodec.c @@ -746,9 +746,17 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder) goto beach; } + GST_DEBUG_OBJECT (decoder, "Setup the capture queue"); ret = gst_v4l2_video_dec_setup_capture (decoder); + /* FIXME not super nice ? */ + if (ret == GST_FLOW_FLUSHING || GST_PAD_IS_FLUSHING (decoder->sinkpad) + || GST_PAD_IS_FLUSHING (decoder->srcpad)) { + ret = GST_FLOW_FLUSHING; + GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); + goto beach; + } if (ret != GST_FLOW_OK) { - GST_ERROR_OBJECT (decoder, "Failed setup capture queue"); + GST_ERROR_OBJECT (decoder, "Failed to setup capture queue"); GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); goto beach; }