#include "libavutil/internal.h"
#include "libavutil/mem_internal.h"
#include "libavutil/opt.h"
+#include "libavutil/thread.h"
#include "avcodec.h"
#include "internal.h"
#include "me_cmp.h"
/*
* Initialize exponent tables.
*/
-static av_cold void exponent_init(AC3EncodeContext *s)
+static av_cold void exponent_init(void)
{
int expstr, i, grpsize;
}
/* LFE */
exponent_group_tab[0][0][7] = 2;
-
- if (CONFIG_EAC3_ENCODER && s->eac3)
- ff_eac3_exponent_init();
}
av_cold int ff_ac3_encode_init(AVCodecContext *avctx)
{
+ static AVOnce init_static_once = AV_ONCE_INIT;
AC3EncodeContext *s = avctx->priv_data;
int ret, frame_size_58;
s->mdct_init = ff_ac3_float_mdct_init;
s->allocate_sample_buffers = ff_ac3_float_allocate_sample_buffers;
}
- if (CONFIG_EAC3_ENCODER && s->eac3)
+ if (CONFIG_EAC3_ENCODER && s->eac3) {
+ static AVOnce init_static_once = AV_ONCE_INIT;
+ ff_thread_once(&init_static_once, ff_eac3_exponent_init);
s->output_frame_header = ff_eac3_output_frame_header;
- else
+ } else
s->output_frame_header = ac3_output_frame_header;
set_bandwidth(s);
- exponent_init(s);
-
bit_alloc_init(s);
ret = s->mdct_init(s);
dprint_options(s);
+ ff_thread_once(&init_static_once, exponent_init);
+
return 0;
}
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_NONE },
.priv_class = &ac3enc_class,
- .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
.supported_samplerates = ff_ac3_sample_rate_tab,
.channel_layouts = ff_ac3_channel_layouts,
.defaults = ac3_defaults,
.supported_samplerates = ff_ac3_sample_rate_tab,
.channel_layouts = ff_ac3_channel_layouts,
.defaults = ac3_defaults,
- .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
};
.supported_samplerates = ff_ac3_sample_rate_tab,
.channel_layouts = ff_ac3_channel_layouts,
.defaults = ac3_defaults,
- .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
};