mirror of https://git.ffmpeg.org/ffmpeg.git
AAC encoder: use signed coeffs when measuring IS energy
I/S energy, especially when it comes to phase cancellations, needs to use signed coefficients as input, yet it was using abs'd coefficients. That was a slight bug.
This commit is contained in:
parent
60a76f8be8
commit
df3fa48288
|
@ -120,8 +120,8 @@ void ff_aac_search_for_is(AACEncContext *s, AVCodecContext *avctx, ChannelElemen
|
||||||
struct AACISError ph_err1, ph_err2, *best;
|
struct AACISError ph_err1, ph_err2, *best;
|
||||||
for (w2 = 0; w2 < sce0->ics.group_len[w]; w2++) {
|
for (w2 = 0; w2 < sce0->ics.group_len[w]; w2++) {
|
||||||
for (i = 0; i < sce0->ics.swb_sizes[g]; i++) {
|
for (i = 0; i < sce0->ics.swb_sizes[g]; i++) {
|
||||||
float coef0 = fabsf(sce0->coeffs[start+(w+w2)*128+i]);
|
float coef0 = sce0->coeffs[start+(w+w2)*128+i];
|
||||||
float coef1 = fabsf(sce1->coeffs[start+(w+w2)*128+i]);
|
float coef1 = sce1->coeffs[start+(w+w2)*128+i];
|
||||||
ener0 += coef0*coef0;
|
ener0 += coef0*coef0;
|
||||||
ener1 += coef1*coef1;
|
ener1 += coef1*coef1;
|
||||||
ener01 += (coef0 + coef1)*(coef0 + coef1);
|
ener01 += (coef0 + coef1)*(coef0 + coef1);
|
||||||
|
|
|
@ -191,7 +191,7 @@ fate-aac-is-encode: CMD = enc_dec_pcm adts wav s16le $(TARGET_SAMPLES)/audio-ref
|
||||||
fate-aac-is-encode: CMP = stddev
|
fate-aac-is-encode: CMP = stddev
|
||||||
fate-aac-is-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav
|
fate-aac-is-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav
|
||||||
fate-aac-is-encode: CMP_SHIFT = -4096
|
fate-aac-is-encode: CMP_SHIFT = -4096
|
||||||
fate-aac-is-encode: CMP_TARGET = 597
|
fate-aac-is-encode: CMP_TARGET = 615
|
||||||
fate-aac-is-encode: SIZE_TOLERANCE = 3560
|
fate-aac-is-encode: SIZE_TOLERANCE = 3560
|
||||||
fate-aac-is-encode: FUZZ = 10
|
fate-aac-is-encode: FUZZ = 10
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue