X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fqdm2.c;h=5e4e741e59a42ce34a60cf0d0c09adb90ff624f2;hb=a247ac640df3da573cd661065bf53f37863e2b46;hp=118e2eac1f8cbc1e98b824d65278b4fa0be4aa5f;hpb=760217f469df4bb9f73535abb39c4282cc8b4e02;p=ffmpeg diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c index 118e2eac1f8..5e4e741e59a 100644 --- a/libavcodec/qdm2.c +++ b/libavcodec/qdm2.c @@ -36,6 +36,8 @@ #include #include "libavutil/channel_layout.h" +#include "libavutil/mem_internal.h" +#include "libavutil/thread.h" #define BITSTREAM_READER_LE #include "avcodec.h" @@ -1596,19 +1598,12 @@ static void qdm2_synthesis_filter(QDM2Context *q, int index) * Init static data (does not depend on specific file) */ static av_cold void qdm2_init_static_data(void) { - static int done; - - if(done) - return; - qdm2_init_vlc(); softclip_table_init(); rnd_table_init(); init_noise_samples(); ff_mpa_synth_init_float(); - - done = 1; } /** @@ -1616,12 +1611,11 @@ static av_cold void qdm2_init_static_data(void) { */ static av_cold int qdm2_decode_init(AVCodecContext *avctx) { + static AVOnce init_static_once = AV_ONCE_INIT; QDM2Context *s = avctx->priv_data; int tmp_val, tmp, size; GetByteContext gb; - qdm2_init_static_data(); - /* extradata parsing Structure: @@ -1767,6 +1761,8 @@ static av_cold int qdm2_decode_init(AVCodecContext *avctx) avctx->sample_fmt = AV_SAMPLE_FMT_S16; + ff_thread_once(&init_static_once, qdm2_init_static_data); + return 0; } @@ -1873,7 +1869,7 @@ static int qdm2_decode_frame(AVCodecContext *avctx, void *data, return s->checksum_size; } -AVCodec ff_qdm2_decoder = { +const AVCodec ff_qdm2_decoder = { .name = "qdm2", .long_name = NULL_IF_CONFIG_SMALL("QDesign Music Codec 2"), .type = AVMEDIA_TYPE_AUDIO, @@ -1882,5 +1878,6 @@ AVCodec ff_qdm2_decoder = { .init = qdm2_decode_init, .close = qdm2_decode_close, .decode = qdm2_decode_frame, - .capabilities = AV_CODEC_CAP_DR1, + .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, };