#include <stdio.h>
#include "libavutil/channel_layout.h"
+#include "libavutil/mem_internal.h"
+#include "libavutil/thread.h"
#define BITSTREAM_READER_LE
#include "avcodec.h"
value = get_vlc2(gb, vlc->table, vlc->bits, depth);
/* stage-2, 3 bits exponent escape sequence */
- if (value-- == 0)
+ if (value < 0)
value = get_bits(gb, get_bits(gb, 3) + 1);
/* stage-3, optional */
* 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;
}
/**
*/
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:
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
+ ff_thread_once(&init_static_once, qdm2_init_static_data);
+
return 0;
}
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,
.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,
};