mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/tiff: Make decoder init-threadsafe
The only thing that stands in the way of adding the FF_CODEC_CAP_INIT_THREADSAFE flag to the TIFF 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. Reviewed-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
f41f58f0a7
commit
1d2d91d1cf
|
@ -2168,7 +2168,7 @@ static av_cold int tiff_init(AVCodecContext *avctx)
|
|||
s->avctx_mjpeg->flags2 = avctx->flags2;
|
||||
s->avctx_mjpeg->dct_algo = avctx->dct_algo;
|
||||
s->avctx_mjpeg->idct_algo = avctx->idct_algo;
|
||||
ret = ff_codec_open2_recursive(s->avctx_mjpeg, codec, NULL);
|
||||
ret = avcodec_open2(s->avctx_mjpeg, codec, NULL);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
@ -2219,6 +2219,6 @@ AVCodec ff_tiff_decoder = {
|
|||
.close = tiff_end,
|
||||
.decode = decode_frame,
|
||||
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS,
|
||||
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
|
||||
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
|
||||
.priv_class = &tiff_decoder_class,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue