On Wed, May 1, 2013 at 3:42 AM, Claudio Freire <klaussfre...@gmail.com> wrote: > What I found was a simple numeric bug in aacpsy.c:319 > > float avg_chan_bits = chan_bitrate / ctx->avctx->sample_rate * > (j ? 128.0f : 1024.0f); > > Should be > > float avg_chan_bits = chan_bitrate * (j ? 128.0f : 1024.0f) / > ctx->avctx->sample_rate; > > Why? Rounding. chan_bitrate / sample_rate is an integer op, and can > induce a lot of rounding error for many channels (low chan_bitrate) or > high sample_rate. The perceptual difference is notorious, not > everywhere, but when allocation is stressed, it now performs notably > better. I didn't perform double-blind tests... I should. I've got a > big family to shove test on ;^) > > But still, not perfect... I gave it 256k, and it produced 140k. Lots > of room for improvement still, but I thought I'd share this bit. I'll > keep looking.
Aaand mostly finally in aaccoder.c:713, search_for_quantizers_twoloop ignores lambda, so there's no effective rate control. Replacing int destbits = avctx->bit_rate * 1024.0 / avctx->sample_rate / avctx->channels; with int destbits = avctx->bit_rate * 1024.0 / avctx->sample_rate / avctx->channels * lambda; Results in general bliss. Will check the other search methods. _______________________________________________ Libav-user mailing list Libav-user@ffmpeg.org http://ffmpeg.org/mailman/listinfo/libav-user