aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorAlex Converse <alex.converse@gmail.com>2013-12-24 13:03:26 -0800
committerAlex Converse <alex.converse@gmail.com>2014-01-04 14:42:38 -0800
commit7f29644108c5fbd80f160930b31b78b8704c1a49 (patch)
treec3d59f982ac91cb33aa4264bdd7e849d655a39f3 /libavcodec
parent42d1b41983971da63302ac3d12091cad1f3d6324 (diff)
downloadffmpeg-7f29644108c5fbd80f160930b31b78b8704c1a49.tar.gz
aac: Fix low delay windowing.
AAC LD uses a low overlap sine window instead of a KBD window.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/aacdec.c11
-rw-r--r--libavcodec/aactab.c1
-rw-r--r--libavcodec/aactab.h1
3 files changed, 8 insertions, 5 deletions
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index 4ed8f8f0ae..70fbb534fb 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 46aa10a70e..ee9a735873 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 adf2e2c2b8..d19b3fd4d2 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];
// @}