[FFmpeg-cvslog] avcodec/smvjpegdec: Make decoder init-threadsafe

Andreas Rheinhardt git at videolan.org
Fri Dec 4 17:40:59 EET 2020


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Fri Nov 27 00:25:44 2020 +0100| [d9b70d64dfb0955783739944db3ce61606338d24] | committer: Andreas Rheinhardt

avcodec/smvjpegdec: Make decoder init-threadsafe

The only thing that stands in the way of adding the
FF_CODEC_CAP_INIT_THREADSAFE flag to the SMV JPEG decoder is its usage
of ff_codec_open2_recursive(): This function requires its caller to hold
the lock for the mutex that guards initialization of AVCodecContexts
whose codecs have a non-threadsafe init function and only callers whose
codec does not have the FF_CODEC_CAP_INIT_THREADSAFE flag set hold said
lock (the others don't need to care about said lock). But one can set
the flag if one switches to avcodec_open2() at the same time.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d9b70d64dfb0955783739944db3ce61606338d24
---

 libavcodec/smvjpegdec.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavcodec/smvjpegdec.c b/libavcodec/smvjpegdec.c
index 973a9117f2..796788d7e4 100644
--- a/libavcodec/smvjpegdec.c
+++ b/libavcodec/smvjpegdec.c
@@ -129,7 +129,7 @@ static av_cold int smvjpeg_decode_init(AVCodecContext *avctx)
     s->avctx->refcounted_frames = 1;
     s->avctx->flags = avctx->flags;
     s->avctx->idct_algo = avctx->idct_algo;
-    if ((r = ff_codec_open2_recursive(s->avctx, codec, &thread_opt)) < 0) {
+    if ((r = avcodec_open2(s->avctx, codec, &thread_opt)) < 0) {
         av_log(avctx, AV_LOG_ERROR, "MJPEG codec failed to open\n");
         ret = r;
     }
@@ -220,4 +220,5 @@ AVCodec ff_smvjpeg_decoder = {
     .close          = smvjpeg_decode_end,
     .decode         = smvjpeg_decode_frame,
     .priv_class     = &smvjpegdec_class,
+    .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE,
 };



More information about the ffmpeg-cvslog mailing list