aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaudio Freire <klaussfreire@gmail.com>2015-03-06 04:05:32 -0300
committerMichael Niedermayer <michaelni@gmx.at>2015-03-06 13:36:25 +0100
commit6dbbb981b5730be5ee618688d848df5face31e84 (patch)
treeb65472faf59457f1a498a480692cf311f046b70d
parentb32cae1cc24fd5e627202d85883b4e0aeef61b42 (diff)
downloadffmpeg-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>
-rw-r--r--libavcodec/aacenc.c23
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;