[FFmpeg-cvslog] aacdec_usac: dequantize scalefactors after noise synthesis

Lynne git at videolan.org
Wed Jun 12 04:34:15 EEST 2024


ffmpeg | branch: master | Lynne <dev at lynne.ee> | Wed Jun 12 03:20:56 2024 +0200| [11a8e0a4e585c0a5acf09397e39bccf45e1ba7ae] | committer: Lynne

aacdec_usac: dequantize scalefactors after noise synthesis

The issue here is that the spec implied that the offset is done
on the dequantized scalefactor, but in fact, it is done on the
scalefactor offset. Delay dequantizing the scalefactors until
after noise synthesis is performed, and change to apply the
offset onto the offset.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=11a8e0a4e585c0a5acf09397e39bccf45e1ba7ae
---

 libavcodec/aac/aacdec_usac.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c
index aa89b83182..100203ff71 100644
--- a/libavcodec/aac/aacdec_usac.c
+++ b/libavcodec/aac/aacdec_usac.c
@@ -971,7 +971,7 @@ static void apply_noise_fill(AACDecContext *ac, SingleChannelElement *sce,
             }
 
             if (band_quantized_to_zero)
-                sce->sf[g*ics->max_sfb + sfb] += noise_offset;
+                sce->sfo[g*ics->max_sfb + sfb] += noise_offset;
         }
         coef += g_len << 7;
     }
@@ -987,6 +987,9 @@ static void spectrum_scale(AACDecContext *ac, SingleChannelElement *sce,
     if (ue->noise.level)
         apply_noise_fill(ac, sce, ue);
 
+    /* Noise filling may apply an offset to the scalefactor offset */
+    ac->dsp.dequant_scalefactors(sce);
+
     /* Apply scalefactors */
     coef = sce->coeffs;
     for (int g = 0; g < ics->num_window_groups; g++) {
@@ -1371,8 +1374,6 @@ static int decode_usac_core_coder(AACDecContext *ac, AACUSACConfig *usac,
         if (ret < 0)
             return ret;
 
-        ac->dsp.dequant_scalefactors(sce);
-
         if (ue->tns_data_present) {
             sce->tns.present = 1;
             ret = ff_aac_decode_tns(ac, &sce->tns, gb, ics);



More information about the ffmpeg-cvslog mailing list