summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Converse <alex.converse@gmail.com>2010-05-25 18:31:55 +0000
committerAlex Converse <alex.converse@gmail.com>2010-05-25 18:31:55 +0000
commitacc9f51fe11b3b1771836395f0f9a74788ccab97 (patch)
tree749620fb44041ad7d78178b9a0c8e6bf3ae3b0f6
parent144c5e3dd248dcd621644499f8f5e6168993ae62 (diff)
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
-rw-r--r--libavcodec/aaccoder.c11
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++) {