diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-11-15 12:19:55 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-12-08 17:51:45 +0100 |
commit | 8887232c770f0b191e559945a05e3b99ca8d8561 (patch) | |
tree | 9b1aabea08a3330484f22e501619b988fe2eb113 | |
parent | 4a772b1397f1384831b58ac8eb60781fe7362442 (diff) | |
download | ffmpeg-8887232c770f0b191e559945a05e3b99ca8d8561.tar.gz |
avcodec/wnv1: Make decoder init-threadsafe
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavcodec/wnv1.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libavcodec/wnv1.c b/libavcodec/wnv1.c index 7dd0e72596..dcf417763c 100644 --- a/libavcodec/wnv1.c +++ b/libavcodec/wnv1.c @@ -24,6 +24,8 @@ * Winnov WNV1 codec. */ +#include "libavutil/thread.h" + #define BITSTREAM_READER_LE #include "avcodec.h" #include "get_bits.h" @@ -112,14 +114,22 @@ static int decode_frame(AVCodecContext *avctx, return buf_size; } -static av_cold int decode_init(AVCodecContext *avctx) +static av_cold void wnv1_init_static(void) { - avctx->pix_fmt = AV_PIX_FMT_YUV422P; - INIT_VLC_STATIC_FROM_LENGTHS(&code_vlc, CODE_VLC_BITS, 16, &code_tab[0][1], 2, &code_tab[0][0], 2, 1, -7, INIT_VLC_OUTPUT_LE, 1 << CODE_VLC_BITS); +} + +static av_cold int decode_init(AVCodecContext *avctx) +{ + static AVOnce init_static_once = AV_ONCE_INIT; + + avctx->pix_fmt = AV_PIX_FMT_YUV422P; + + ff_thread_once(&init_static_once, wnv1_init_static); + return 0; } @@ -131,4 +141,5 @@ AVCodec ff_wnv1_decoder = { .init = decode_init, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; |