[FFmpeg-devel] [PATCH] aacdec: buf_mdct data array reduction
Young Han Lee
cpumaker
Wed Feb 16 02:27:56 CET 2011
The "buf_mdct" array, which is expanded to implement the LTP, is shrunk.
The memory copy for folded data is removed in "update_ltp",
and arrays for "predTime" and "predFreq" are switched.
---
libavcodec/aac.h | 2 +-
libavcodec/aacdec.c | 19 +++++++++++--------
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/libavcodec/aac.h b/libavcodec/aac.h
index a2bf70b..73bc408 100644
--- a/libavcodec/aac.h
+++ b/libavcodec/aac.h
@@ -272,7 +272,7 @@ typedef struct {
* @defgroup temporary aligned temporary buffers (We do not want to
have these on the stack.)
* @{
*/
- DECLARE_ALIGNED(16, float, buf_mdct)[2048];
+ DECLARE_ALIGNED(16, float, buf_mdct)[1024];
/** @} */
/**
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index ee5affe..2cc9318 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -1761,8 +1761,8 @@ static void apply_ltp(AACContext *ac,
SingleChannelElement *sce)
int i, sfb;
if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
- float *predTime = ac->buf_mdct;
- float *predFreq = sce->ret;
+ float *predTime = sce->ret;
+ float *predFreq = ac->buf_mdct;
int16_t num_samples = 2048;
if (ltp->lag < 1024)
@@ -1795,19 +1795,22 @@ static void update_ltp(AACContext *ac,
SingleChannelElement *sce)
const float *swindow = ics->use_kb_window[0] ? ff_aac_kbd_short_128 :
ff_sine_128;
int i;
- for (i = 0; i < 512; i++)
- ac->buf_mdct[1535 - i] = ac->buf_mdct[512 + i];
-
if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
memcpy(saved_ltp, saved, 512 * sizeof(float));
memset(saved_ltp + 576, 0, 448 * sizeof(float));
- ac->dsp.vector_fmul_reverse(saved_ltp + 448, ac->buf_mdct +
960, swindow, 128);
+ ac->dsp.vector_fmul_reverse(saved_ltp + 448, ac->buf_mdct +
960, &swindow[64], 64);
+ for (i = 0; i < 64; i++)
+ saved_ltp[i + 512] = ac->buf_mdct[1023 - i] * swindow[63 - i];
} else if (ics->window_sequence[0] == LONG_START_SEQUENCE) {
memcpy(saved_ltp, ac->buf_mdct + 512, 448 * sizeof(float));
memset(saved_ltp + 576, 0, 448 * sizeof(float));
- ac->dsp.vector_fmul_reverse(saved_ltp + 448, ac->buf_mdct +
960, swindow, 128);
+ ac->dsp.vector_fmul_reverse(saved_ltp + 448, ac->buf_mdct +
960, &swindow[64], 64);
+ for (i = 0; i < 64; i++)
+ saved_ltp[i + 512] = ac->buf_mdct[1023 - i] * swindow[63 - i];
} else { // LONG_STOP or ONLY_LONG
- ac->dsp.vector_fmul_reverse(saved_ltp, ac->buf_mdct +
512, lwindow, 1024);
+ ac->dsp.vector_fmul_reverse(saved_ltp, ac->buf_mdct +
512, &lwindow[512], 512);
+ for (i = 0; i < 512; i++)
+ saved_ltp[i + 512] = ac->buf_mdct[1023 - i] * lwindow[511 - i];
}
memcpy(sce->ltp_state, &sce->ltp_state[1024], 1024 * sizeof(int16_t));
--
1.7.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-aacdec-buf_mdct-data-array-reduction.patch
Type: text/x-patch
Size: 3026 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20110216/bb83ae5d/attachment.bin>
More information about the ffmpeg-devel
mailing list