diff options
author | Claudio Freire <klaussfreire@gmail.com> | 2015-03-06 04:05:32 -0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-03-06 13:36:25 +0100 |
commit | 6dbbb981b5730be5ee618688d848df5face31e84 (patch) | |
tree | b65472faf59457f1a498a480692cf311f046b70d /libavcodec/aacenc.c | |
parent | b32cae1cc24fd5e627202d85883b4e0aeef61b42 (diff) | |
download | ffmpeg-6dbbb981b5730be5ee618688d848df5face31e84.tar.gz |
AAC: Add support for 7350Hz sampling rates, no error on too hight bitrate.
Instead, warn that bitrate will be clamped down to the maximum allowed.
Patch is mostly work of Kamendo2 in issue #2686, quite tested within that issue.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/aacenc.c')
-rw-r--r-- | libavcodec/aacenc.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c index 7c286aac20..7015a2789c 100644 --- a/libavcodec/aacenc.c +++ b/libavcodec/aacenc.c @@ -53,6 +53,11 @@ return AVERROR(EINVAL); \ } +#define WARN_IF(cond, ...) \ + if (cond) { \ + av_log(avctx, AV_LOG_WARNING, __VA_ARGS__); \ + } + float ff_aac_pow34sf_tab[428]; static const uint8_t swb_size_1024_96[] = { @@ -102,7 +107,8 @@ static const uint8_t *swb_size_1024[] = { swb_size_1024_96, swb_size_1024_96, swb_size_1024_64, swb_size_1024_48, swb_size_1024_48, swb_size_1024_32, swb_size_1024_24, swb_size_1024_24, swb_size_1024_16, - swb_size_1024_16, swb_size_1024_16, swb_size_1024_8 + swb_size_1024_16, swb_size_1024_16, swb_size_1024_8, + swb_size_1024_8 }; static const uint8_t swb_size_128_96[] = { @@ -131,7 +137,8 @@ static const uint8_t *swb_size_128[] = { swb_size_128_96, swb_size_128_96, swb_size_128_96, swb_size_128_48, swb_size_128_48, swb_size_128_48, swb_size_128_24, swb_size_128_24, swb_size_128_16, - swb_size_128_16, swb_size_128_16, swb_size_128_8 + swb_size_128_16, swb_size_128_16, swb_size_128_8, + swb_size_128_8 }; /** default channel configurations */ @@ -754,14 +761,20 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) s->channels = avctx->channels; - ERROR_IF(i >= 12, + ERROR_IF(i == 16 + || i >= (sizeof(swb_size_1024) / sizeof(*swb_size_1024)) + || i >= (sizeof(swb_size_128) / sizeof(*swb_size_128)), "Unsupported sample rate %d\n", avctx->sample_rate); ERROR_IF(s->channels > AAC_MAX_CHANNELS, "Unsupported number of channels: %d\n", s->channels); ERROR_IF(avctx->profile != FF_PROFILE_UNKNOWN && avctx->profile != FF_PROFILE_AAC_LOW, "Unsupported profile %d\n", avctx->profile); - ERROR_IF(1024.0 * avctx->bit_rate / avctx->sample_rate > 6144 * s->channels, - "Too many bits per frame requested\n"); + WARN_IF(1024.0 * avctx->bit_rate / avctx->sample_rate > 6144 * s->channels, + "Too many bits per frame requested, clamping to max\n"); + + avctx->bit_rate = (int)FFMIN( + 6144 * s->channels / 1024.0 * avctx->sample_rate, + avctx->bit_rate); s->samplerate_index = i; |