From b81cb99d9fea5dbe0c1d74008186ef328c7f1a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 5 Jun 2015 11:57:37 +0200 Subject: avviddec: Release stream lock while calling avcodec_decode_video2() It might call back into us from another thread and try to take the stream lock again, e.g. to allocate a buffer. https://bugzilla.gnome.org/show_bug.cgi?id=726020 --- ext/libav/gstavviddec.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c index 18e5439..94bd368 100644 --- a/ext/libav/gstavviddec.c +++ b/ext/libav/gstavviddec.c @@ -1259,8 +1259,15 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec, GST_DEBUG_OBJECT (ffmpegdec, "copy pal %p %p", &packet, pal); } + /* This might call into get_buffer() from another thread, + * which would cause a deadlock. Release the lock here + * and taking it again later seems safe + * See https://bugzilla.gnome.org/show_bug.cgi?id=726020 + */ + GST_VIDEO_DECODER_STREAM_UNLOCK (ffmpegdec); len = avcodec_decode_video2 (ffmpegdec->context, ffmpegdec->picture, have_data, &packet); + GST_VIDEO_DECODER_STREAM_LOCK (ffmpegdec); GST_DEBUG_OBJECT (ffmpegdec, "after decode: len %d, have_data %d", len, *have_data); -- cgit v1.2.1