diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-11-30 18:04:51 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-05-02 03:52:06 +0200 |
commit | 2648df16c6549b5c9c83d312a9011f32afe75353 (patch) | |
tree | 7880fb831cdb7fefc310045ff07ddfce3090604e | |
parent | c13b3fdb1965300f6311c0cf646f85ad1e6c1375 (diff) | |
download | ffmpeg-2648df16c6549b5c9c83d312a9011f32afe75353.tar.gz |
avcodec/4xm: Make decoder init-threadsafe
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavcodec/4xm.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c index e628edde43..cb315cd7e4 100644 --- a/libavcodec/4xm.c +++ b/libavcodec/4xm.c @@ -31,6 +31,7 @@ #include "libavutil/imgutils.h" #include "libavutil/intreadwrite.h" #include "libavutil/mem_internal.h" +#include "libavutil/thread.h" #include "avcodec.h" #include "blockdsp.h" #include "bswapdsp.h" @@ -246,7 +247,7 @@ static void idct(int16_t block[64]) } } -static av_cold void init_vlcs(FourXContext *f) +static av_cold void init_vlcs(void) { static VLC_TYPE table[2][4][32][2]; int i, j; @@ -988,6 +989,7 @@ static av_cold int decode_end(AVCodecContext *avctx) static av_cold int decode_init(AVCodecContext *avctx) { + static AVOnce init_static_once = AV_ONCE_INIT; FourXContext * const f = avctx->priv_data; int ret; @@ -1015,13 +1017,14 @@ static av_cold int decode_init(AVCodecContext *avctx) ff_blockdsp_init(&f->bdsp, avctx); ff_bswapdsp_init(&f->bbdsp); f->avctx = avctx; - init_vlcs(f); if (f->version > 2) avctx->pix_fmt = AV_PIX_FMT_RGB565; else avctx->pix_fmt = AV_PIX_FMT_BGR555; + ff_thread_once(&init_static_once, init_vlcs); + return 0; } @@ -1035,4 +1038,5 @@ const AVCodec ff_fourxm_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; |