summaryrefslogtreecommitdiff
path: root/libavcodec/ac3enc.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2007-12-28 06:13:55 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2007-12-28 06:13:55 +0000
commit02c164c1482e16715716b2615964481877412e4b (patch)
tree0ce15124dfd2f81e15ea04b4648ec917eae13cbc /libavcodec/ac3enc.c
parent08ac1e783e5160257fe58aec5b0ca611ab8c7498 (diff)
use cutoff frequency to adjust bandwidth in ac3 encoder
Originally committed as revision 11338 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ac3enc.c')
-rw-r--r--libavcodec/ac3enc.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index e84b220dc8..4ed58e7e84 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -632,6 +632,7 @@ static int AC3_encode_init(AVCodecContext *avctx)
AC3EncodeContext *s = avctx->priv_data;
int i, j, ch;
float alpha;
+ int bw_code;
static const uint8_t channel_mode_defs[6] = {
0x01, /* C */
0x02, /* L R */
@@ -683,12 +684,21 @@ static int AC3_encode_init(AVCodecContext *avctx)
s->frame_size = s->frame_size_min;
/* bit allocation init */
- for(ch=0;ch<s->nb_channels;ch++) {
- /* bandwidth for each channel */
+ if(avctx->cutoff) {
+ /* calculate bandwidth based on user-specified cutoff frequency */
+ int cutoff = av_clip(avctx->cutoff, 1, s->sample_rate >> 1);
+ int fbw_coeffs = cutoff * 512 / s->sample_rate;
+ bw_code = av_clip((fbw_coeffs - 73) / 3, 0, 60);
+ } else {
+ /* use default bandwidth setting */
/* XXX: should compute the bandwidth according to the frame
size, so that we avoid anoying high freq artefacts */
- s->chbwcod[ch] = 50; /* sample bandwidth as mpeg audio layer 2 table 0 */
- s->nb_coefs[ch] = ((s->chbwcod[ch] + 12) * 3) + 37;
+ bw_code = 50;
+ }
+ for(ch=0;ch<s->nb_channels;ch++) {
+ /* bandwidth for each channel */
+ s->chbwcod[ch] = bw_code;
+ s->nb_coefs[ch] = bw_code * 3 + 73;
}
if (s->lfe) {
s->nb_coefs[s->lfe_channel] = 7; /* fixed */