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
This commit is contained in:
parent
06d6b962e5
commit
0bd9aa449a
@ -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,
|
|||||||
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,
|
|||||||
}
|
}
|
||||||
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,
|
|||||||
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,
|
|||||||
}
|
}
|
||||||
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user