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/7576>
This commit is contained in:
Sebastian Dröge 2024-09-26 15:48:54 +03:00 committed by GStreamer Marge Bot
parent bbd3d6f4f6
commit 90728a1166

View file

@ -2146,9 +2146,16 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
GST_VIDEO_BUFFER_FLAG_TFF); 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 = *ret =
gst_video_decoder_finish_frame (GST_VIDEO_DECODER (ffmpegdec), gst_video_decoder_finish_frame (GST_VIDEO_DECODER (ffmpegdec),
output_frame); output_frame);
GST_VIDEO_DECODER_STREAM_LOCK (ffmpegdec);
beach: beach:
GST_DEBUG_OBJECT (ffmpegdec, "return flow %s, got frame: %d", GST_DEBUG_OBJECT (ffmpegdec, "return flow %s, got frame: %d",