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>
This commit is contained in:
Nicolas Dufresne 2023-04-21 13:33:11 -04:00
parent c9841a5383
commit 00492234bd

View file

@ -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;
}