From 6b18f0233900ae4ecdbcde0ce76ab55fd85286f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 26 Sep 2024 15:48:54 +0300 Subject: [PATCH] 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: --- subprojects/gst-libav/ext/libav/gstavviddec.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/subprojects/gst-libav/ext/libav/gstavviddec.c b/subprojects/gst-libav/ext/libav/gstavviddec.c index fe51832d23..ab77eee67e 100644 --- a/subprojects/gst-libav/ext/libav/gstavviddec.c +++ b/subprojects/gst-libav/ext/libav/gstavviddec.c @@ -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",