[FFmpeg-cvslog] aac: Fix low delay windowing.

Alex Converse git at videolan.org
Sun Jan 5 02:26:18 CET 2014


ffmpeg | branch: master | Alex Converse <alex.converse at gmail.com> | Tue Dec 24 13:03:26 2013 -0800| [7f29644108c5fbd80f160930b31b78b8704c1a49] | committer: Alex Converse

aac: Fix low delay windowing.

AAC LD uses a low overlap sine window instead of a KBD window.

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

 libavcodec/aacdec.c |   11 ++++++++---
 libavcodec/aactab.c |    1 -
 libavcodec/aactab.h |    1 -
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index 4ed8f8f..70fbb53 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -1065,7 +1065,6 @@ static av_cold int aac_decode_init(AVCodecContext *avctx)
     ff_mdct_init(&ac->mdct_ltp,   11, 0, -2.0 * 32768.0);
     // window initialization
     ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
-    ff_kbd_window_init(ff_aac_kbd_long_512,  4.0, 512);
     ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
     ff_init_ff_sine_windows(10);
     ff_init_ff_sine_windows( 9);
@@ -2430,14 +2429,20 @@ static void imdct_and_windowing_ld(AACContext *ac, SingleChannelElement *sce)
     float *in    = sce->coeffs;
     float *out   = sce->ret;
     float *saved = sce->saved;
-    const float *lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_512 : ff_sine_512;
     float *buf  = ac->buf_mdct;
 
     // imdct
     ac->mdct.imdct_half(&ac->mdct_ld, buf, in);
 
     // window overlapping
-    ac->fdsp.vector_fmul_window(out, saved, buf, lwindow_prev, 256);
+    if (ics->use_kb_window[1]) {
+        // AAC LD uses a low overlap sine window instead of a KBD window
+        memcpy(out, saved, 192 * sizeof(float));
+        ac->fdsp.vector_fmul_window(out + 192, saved + 192, buf, ff_sine_128, 64);
+        memcpy(                     out + 320, buf + 64, 192 * sizeof(float));
+    } else {
+        ac->fdsp.vector_fmul_window(out, saved, buf, ff_sine_512, 256);
+    }
 
     // buffer update
     memcpy(saved, buf + 256, 256 * sizeof(float));
diff --git a/libavcodec/aactab.c b/libavcodec/aactab.c
index 46aa10a..ee9a735 100644
--- a/libavcodec/aactab.c
+++ b/libavcodec/aactab.c
@@ -34,7 +34,6 @@
 #include <stdint.h>
 
 DECLARE_ALIGNED(32, float,  ff_aac_kbd_long_1024)[1024];
-DECLARE_ALIGNED(32, float,  ff_aac_kbd_long_512 )[512];
 DECLARE_ALIGNED(32, float,  ff_aac_kbd_short_128)[128];
 
 const uint8_t ff_aac_num_swb_1024[] = {
diff --git a/libavcodec/aactab.h b/libavcodec/aactab.h
index adf2e2c..d19b3fd 100644
--- a/libavcodec/aactab.h
+++ b/libavcodec/aactab.h
@@ -45,7 +45,6 @@
  * @{
  */
 DECLARE_ALIGNED(32, extern float,  ff_aac_kbd_long_1024)[1024];
-DECLARE_ALIGNED(32, extern float,  ff_aac_kbd_long_512 )[512];
 DECLARE_ALIGNED(32, extern float,  ff_aac_kbd_short_128)[128];
 const DECLARE_ALIGNED(32, extern float, ff_aac_eld_window)[1920];
 // @}



More information about the ffmpeg-cvslog mailing list