diff options
author | Alex Converse <alex.converse@gmail.com> | 2010-05-25 18:31:55 +0000 |
---|---|---|
committer | Alex Converse <alex.converse@gmail.com> | 2010-05-25 18:31:55 +0000 |
commit | acc9f51fe11b3b1771836395f0f9a74788ccab97 (patch) | |
tree | 749620fb44041ad7d78178b9a0c8e6bf3ae3b0f6 /libavcodec | |
parent | 144c5e3dd248dcd621644499f8f5e6168993ae62 (diff) | |
download | ffmpeg-acc9f51fe11b3b1771836395f0f9a74788ccab97.tar.gz |
aacenc: Trellis over scalefactors using an estimated codebook rather than every codebook.
The minimal codebook to encode the band without clipping is used (as is done in the TLS).
Originally committed as revision 23318 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/aaccoder.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/libavcodec/aaccoder.c b/libavcodec/aaccoder.c index f67657292d..951e297d09 100644 --- a/libavcodec/aaccoder.c +++ b/libavcodec/aaccoder.c @@ -568,18 +568,13 @@ static void search_for_quantizers_anmr(AVCodecContext *avctx, AACEncContext *s, minscale = av_clip(minscale - q0, 0, TRELLIS_STATES - 1); maxscale = av_clip(maxscale - q0, 0, TRELLIS_STATES); for (q = minscale; q < maxscale; q++) { - float dists[12], dist; - memset(dists, 0, sizeof(dists)); + float dist = 0; + int cb = find_min_book(sce->sf_idx[w*16+g], sce->ics.group_len[w], sce->ics.swb_sizes[g], s->scoefs+start); for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) { FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g]; - int cb; - for (cb = 0; cb <= ESC_BT; cb++) - dists[cb] += quantize_band_cost(s, coefs + w2*128, s->scoefs + start + w2*128, sce->ics.swb_sizes[g], + dist += quantize_band_cost(s, coefs + w2*128, s->scoefs + start + w2*128, sce->ics.swb_sizes[g], q + q0, cb, lambda / band->threshold, INFINITY, NULL); } - dist = dists[0]; - for (i = 1; i <= ESC_BT; i++) - dist = FFMIN(dist, dists[i]); minrd = FFMIN(minrd, dist); for (i = 0; i < q1 - q0; i++) { |