Index: third_party/opus/src/celt/quant_bands.c |
diff --git a/third_party/opus/src/celt/quant_bands.c b/third_party/opus/src/celt/quant_bands.c |
index 95076e0af2d4ee07b25b5b3330542773e24497b2..56101b1cfecb8f5811c07618830d7ee3842aeb48 100644 |
--- a/third_party/opus/src/celt/quant_bands.c |
+++ b/third_party/opus/src/celt/quant_bands.c |
@@ -418,6 +418,7 @@ void quant_energy_finalise(const CELTMode *m, int start, int end, opus_val16 *ol |
offset = (q2-.5f)*(1<<(14-fine_quant[i]-1))*(1.f/16384); |
#endif |
oldEBands[i+c*m->nbEBands] += offset; |
+ error[i+c*m->nbEBands] -= offset; |
bits_left--; |
} while (++c < C); |
} |
@@ -547,9 +548,15 @@ void amp2Log2(const CELTMode *m, int effEnd, int end, |
c=0; |
do { |
for (i=0;i<effEnd;i++) |
+ { |
bandLogE[i+c*m->nbEBands] = |
- celt_log2(SHL32(bandE[i+c*m->nbEBands],2)) |
+ celt_log2(bandE[i+c*m->nbEBands]) |
- SHL16((opus_val16)eMeans[i],6); |
+#ifdef FIXED_POINT |
+ /* Compensate for bandE[] being Q12 but celt_log2() taking a Q14 input. */ |
+ bandLogE[i+c*m->nbEBands] += QCONST16(2.f, DB_SHIFT); |
+#endif |
+ } |
for (i=effEnd;i<end;i++) |
bandLogE[c*m->nbEBands+i] = -QCONST16(14.f,DB_SHIFT); |
} while (++c < C); |