avviddec: Unlock video decoder stream lock temporarily while finishing frames

Temporarily release the video decoder stream lock so that other
threads can continue decoding (e.g. call get_frame()) while data
is being pushed downstream.

At this point it is locked twice, we release one, and then the base class
releases the last one just before pushing the data.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7584>
This commit is contained in:
Sebastian Dröge 2024-09-26 15:48:54 +03:00 committed by Backport Bot
parent cf09100e36
commit 6b18f02339

View file

@ -2092,9 +2092,16 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
GST_VIDEO_BUFFER_FLAG_TFF);
}
}
/* Temporarily release the video decoder stream lock so that other
* threads can continue decoding (e.g. call get_frame()) while data
* is being pushed downstream.
*/
GST_VIDEO_DECODER_STREAM_UNLOCK (ffmpegdec);
*ret =
gst_video_decoder_finish_frame (GST_VIDEO_DECODER (ffmpegdec),
output_frame);
GST_VIDEO_DECODER_STREAM_LOCK (ffmpegdec);
beach:
GST_DEBUG_OBJECT (ffmpegdec, "return flow %s, got frame: %d",