mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
aac_latm: reconfigure decoder on audio specific config changes
This commit is contained in:
parent
fd095539d1
commit
d268b79e34
@ -2319,8 +2319,9 @@ static inline uint32_t latm_get_value(GetBitContext *b)
|
||||
static int latm_decode_audio_specific_config(struct LATMContext *latmctx,
|
||||
GetBitContext *gb, int asclen)
|
||||
{
|
||||
AVCodecContext *avctx = latmctx->aac_ctx.avctx;
|
||||
MPEG4AudioConfig m4ac;
|
||||
AACContext *ac = &latmctx->aac_ctx;
|
||||
AVCodecContext *avctx = ac->avctx;
|
||||
MPEG4AudioConfig m4ac = {0};
|
||||
int config_start_bit = get_bits_count(gb);
|
||||
int sync_extension = 0;
|
||||
int bits_consumed, esize;
|
||||
@ -2335,18 +2336,23 @@ static int latm_decode_audio_specific_config(struct LATMContext *latmctx,
|
||||
av_log_missing_feature(latmctx->aac_ctx.avctx, "audio specific "
|
||||
"config not byte aligned.\n", 1);
|
||||
return AVERROR_INVALIDDATA;
|
||||
} else {
|
||||
bits_consumed =
|
||||
decode_audio_specific_config(NULL, avctx, &m4ac,
|
||||
}
|
||||
bits_consumed = decode_audio_specific_config(NULL, avctx, &m4ac,
|
||||
gb->buffer + (config_start_bit / 8),
|
||||
asclen, sync_extension);
|
||||
|
||||
if (bits_consumed < 0)
|
||||
return AVERROR_INVALIDDATA;
|
||||
if (bits_consumed < 0)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if (ac->m4ac.sample_rate != m4ac.sample_rate ||
|
||||
ac->m4ac.chan_config != m4ac.chan_config) {
|
||||
|
||||
av_log(avctx, AV_LOG_INFO, "audio config changed\n");
|
||||
latmctx->initialized = 0;
|
||||
|
||||
esize = (bits_consumed+7) / 8;
|
||||
|
||||
if (avctx->extradata_size <= esize) {
|
||||
if (avctx->extradata_size < esize) {
|
||||
av_free(avctx->extradata);
|
||||
avctx->extradata = av_malloc(esize + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!avctx->extradata)
|
||||
@ -2356,9 +2362,8 @@ static int latm_decode_audio_specific_config(struct LATMContext *latmctx,
|
||||
avctx->extradata_size = esize;
|
||||
memcpy(avctx->extradata, gb->buffer + (config_start_bit/8), esize);
|
||||
memset(avctx->extradata+esize, 0, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
|
||||
skip_bits_long(gb, bits_consumed);
|
||||
}
|
||||
skip_bits_long(gb, bits_consumed);
|
||||
|
||||
return bits_consumed;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user