diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2023-04-21 13:33:11 -0400 |
---|---|---|
committer | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2023-05-01 13:45:39 -0400 |
commit | 00492234bd0d0c7ff88108918002ab4810e4c36e (patch) | |
tree | 03a5e286c930f7e0a5120e19d8d7f702bda50208 /subprojects | |
parent | c9841a5383d4fc80b5bd3f1bcfb47d116e69f981 (diff) | |
download | gstreamer-00492234bd0d0c7ff88108918002ab4810e4c36e.tar.gz |
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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4437>
Diffstat (limited to 'subprojects')
-rw-r--r-- | subprojects/gst-plugins-good/sys/v4l2/gstv4l2videodec.c | 10 |
1 files changed, 9 insertions, 1 deletions
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; } |