X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Faacenc.c;h=e65b76cd74ab3cf86f23de0528cce115e91350f3;hb=3d51f2a12c97773ec66ec4580f905743f4513ed1;hp=4d0abb107f3397452323c426276b555f5cc66d6c;hpb=1b98bfb932ad36667ea7f18e24c54978623f6654;p=ffmpeg diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c index 4d0abb107f3..e65b76cd74a 100644 --- a/libavcodec/aacenc.c +++ b/libavcodec/aacenc.c @@ -39,6 +39,7 @@ #include "mpeg4audio.h" #include "kbdwin.h" #include "sinewin.h" +#include "profiles.h" #include "aac.h" #include "aactab.h" @@ -940,15 +941,14 @@ static av_cold int dsp_init(AVCodecContext *avctx, AACEncContext *s) static av_cold int alloc_buffers(AVCodecContext *avctx, AACEncContext *s) { int ch; - FF_ALLOCZ_ARRAY_OR_GOTO(avctx, s->buffer.samples, s->channels, 3 * 1024 * sizeof(s->buffer.samples[0]), alloc_fail); - FF_ALLOCZ_ARRAY_OR_GOTO(avctx, s->cpe, s->chan_map[0], sizeof(ChannelElement), alloc_fail); + if (!FF_ALLOCZ_TYPED_ARRAY(s->buffer.samples, s->channels * 3 * 1024) || + !FF_ALLOCZ_TYPED_ARRAY(s->cpe, s->chan_map[0])) + return AVERROR(ENOMEM); for(ch = 0; ch < s->channels; ch++) s->planar_samples[ch] = s->buffer.samples + 3 * 1024 * ch; return 0; -alloc_fail: - return AVERROR(ENOMEM); } static av_cold void aac_encode_init_tables(void) @@ -1077,13 +1077,13 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) s->options.mid_side = 0; if ((ret = dsp_init(avctx, s)) < 0) - goto fail; + return ret; if ((ret = alloc_buffers(avctx, s)) < 0) - goto fail; + return ret; if ((ret = put_audio_specific_config(avctx))) - goto fail; + return ret; sizes[0] = ff_aac_swb_size_1024[s->samplerate_index]; sizes[1] = ff_aac_swb_size_128[s->samplerate_index]; @@ -1093,7 +1093,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) grouping[i] = s->chan_map[i + 1] == TYPE_CPE; if ((ret = ff_psy_init(&s->psy, avctx, 2, sizes, lengths, s->chan_map[0], grouping)) < 0) - goto fail; + return ret; s->psypp = ff_psy_preprocess_init(avctx); ff_lpc_init(&s->lpc, 2*avctx->frame_size, TNS_MAX_ORDER, FF_LPC_TYPE_LEVINSON); s->random_state = 0x1f2e3d4c; @@ -1113,9 +1113,6 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) ff_af_queue_init(avctx, &s->afq); return 0; -fail: - aac_encode_end(avctx); - return ret; } #define AACENC_FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM @@ -1131,6 +1128,7 @@ static const AVOption aacenc_options[] = { {"aac_ltp", "Long term prediction", offsetof(AACEncContext, options.ltp), AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS}, {"aac_pred", "AAC-Main prediction", offsetof(AACEncContext, options.pred), AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS}, {"aac_pce", "Forces the use of PCEs", offsetof(AACEncContext, options.pce), AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS}, + FF_AAC_PROFILE_OPTS {NULL} }; @@ -1157,7 +1155,7 @@ AVCodec ff_aac_encoder = { .close = aac_encode_end, .defaults = aac_encode_defaults, .supported_samplerates = mpeg4audio_sample_rates, - .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE },