Commit 0bd9aa44 authored by Alex Converse's avatar Alex Converse

aacenc: Multiple distortion by lambda after it's summed and not each individual

term before.

Originally committed as revision 19945 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 06d6b962
...@@ -121,10 +121,10 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in, ...@@ -121,10 +121,10 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in,
if (!cb) { if (!cb) {
for (i = 0; i < size; i++) for (i = 0; i < size; i++)
cost += in[i]*in[i]*lambda; cost += in[i]*in[i];
if (bits) if (bits)
*bits = 0; *bits = 0;
return cost; return cost * lambda;
} }
#ifndef USE_REALLY_FULL_SEARCH #ifndef USE_REALLY_FULL_SEARCH
offs[0] = 1; offs[0] = 1;
...@@ -141,10 +141,10 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in, ...@@ -141,10 +141,10 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in,
int (*quants)[2] = &s->qcoefs[i]; int (*quants)[2] = &s->qcoefs[i];
mincost = 0.0f; mincost = 0.0f;
for (j = 0; j < dim; j++) for (j = 0; j < dim; j++)
mincost += in[i+j]*in[i+j]*lambda; mincost += in[i+j]*in[i+j];
minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40; minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
minbits = ff_aac_spectral_bits[cb-1][minidx]; minbits = ff_aac_spectral_bits[cb-1][minidx];
mincost += minbits; mincost = mincost * lambda + minbits;
for (j = 0; j < (1<<dim); j++) { for (j = 0; j < (1<<dim); j++) {
float rd = 0.0f; float rd = 0.0f;
int curbits; int curbits;
...@@ -192,15 +192,15 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in, ...@@ -192,15 +192,15 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in,
} }
if (vec[k] != 0.0f) if (vec[k] != 0.0f)
curbits++; curbits++;
rd += di*di*lambda; rd += di*di;
} }
} else { } else {
for (k = 0; k < dim; k++) { for (k = 0; k < dim; k++) {
float di = in[i+k] - vec[k]*IQ; float di = in[i+k] - vec[k]*IQ;
rd += di*di*lambda; rd += di*di;
} }
} }
rd += curbits; rd = rd * lambda + curbits;
if (rd < mincost) { if (rd < mincost) {
mincost = rd; mincost = rd;
minidx = j; minidx = j;
...@@ -255,10 +255,10 @@ static void quantize_and_encode_band(struct AACEncContext *s, PutBitContext *pb, ...@@ -255,10 +255,10 @@ static void quantize_and_encode_band(struct AACEncContext *s, PutBitContext *pb,
int (*quants)[2] = &s->qcoefs[i]; int (*quants)[2] = &s->qcoefs[i];
mincost = 0.0f; mincost = 0.0f;
for (j = 0; j < dim; j++) for (j = 0; j < dim; j++)
mincost += in[i+j]*in[i+j]*lambda; mincost += in[i+j]*in[i+j];
minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40; minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
minbits = ff_aac_spectral_bits[cb-1][minidx]; minbits = ff_aac_spectral_bits[cb-1][minidx];
mincost += minbits; mincost = mincost * lambda + minbits;
for (j = 0; j < (1<<dim); j++) { for (j = 0; j < (1<<dim); j++) {
float rd = 0.0f; float rd = 0.0f;
int curbits; int curbits;
...@@ -307,15 +307,15 @@ static void quantize_and_encode_band(struct AACEncContext *s, PutBitContext *pb, ...@@ -307,15 +307,15 @@ static void quantize_and_encode_band(struct AACEncContext *s, PutBitContext *pb,
} }
if (vec[k] != 0.0f) if (vec[k] != 0.0f)
curbits++; curbits++;
rd += di*di*lambda; rd += di*di;
} }
} else { } else {
for (k = 0; k < dim; k++) { for (k = 0; k < dim; k++) {
float di = in[i+k] - vec[k]*IQ; float di = in[i+k] - vec[k]*IQ;
rd += di*di*lambda; rd += di*di;
} }
} }
rd += curbits; rd = rd * lambda + curbits;
if (rd < mincost) { if (rd < mincost) {
mincost = rd; mincost = rd;
minidx = curidx; minidx = curidx;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment