This brings the encoder in-line with the rest of ours and saves on a bit of memory.
Patch attached.
>From aa4464763919145eb3c58475b6f1fd1418d684c9 Mon Sep 17 00:00:00 2001 From: Lynne <d...@lynne.ee> Date: Sat, 9 Jan 2021 17:27:16 +0100 Subject: [PATCH v2 3/5] ac3enc: halve the MDCT window size by using vector_fmul_reverse This brings the encoder in-line with the rest of ours and saves on a bit of memory. --- libavcodec/ac3enc_fixed.c | 9 ++++----- libavcodec/ac3enc_float.c | 15 ++++----------- libavcodec/ac3enc_template.c | 5 ++++- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c index 3b302d40df..7a8a77fb93 100644 --- a/libavcodec/ac3enc_fixed.c +++ b/libavcodec/ac3enc_fixed.c @@ -101,14 +101,13 @@ static av_cold int ac3_fixed_mdct_init(AC3EncodeContext *s) { float fwin[AC3_BLOCK_SIZE]; - int32_t *iwin = av_malloc_array(AC3_WINDOW_SIZE, sizeof(*iwin)); + int32_t *iwin = av_malloc_array(AC3_BLOCK_SIZE, sizeof(*iwin)); if (!iwin) return AVERROR(ENOMEM); - ff_kbd_window_init(fwin, 5.0, AC3_WINDOW_SIZE/2); - - for (int i = 0; i < AC3_WINDOW_SIZE/2; i++) - iwin[AC3_WINDOW_SIZE-1-i] = lrintf(fwin[i] * (1 << 22)); + ff_kbd_window_init(fwin, 5.0, AC3_BLOCK_SIZE); + for (int i = 0; i < AC3_BLOCK_SIZE; i++) + iwin[i] = lrintf(fwin[i] * (1 << 22)); s->mdct_window = iwin; diff --git a/libavcodec/ac3enc_float.c b/libavcodec/ac3enc_float.c index b17b3a2365..74f3ab8d86 100644 --- a/libavcodec/ac3enc_float.c +++ b/libavcodec/ac3enc_float.c @@ -108,23 +108,16 @@ static av_cold void ac3_float_mdct_end(AC3EncodeContext *s) */ static av_cold int ac3_float_mdct_init(AC3EncodeContext *s) { - float *window; - int i, n, n2; - - n = 1 << 9; - n2 = n >> 1; - - window = av_malloc_array(n, sizeof(*window)); + float *window = av_malloc_array(AC3_BLOCK_SIZE, sizeof(*window)); if (!window) { av_log(s->avctx, AV_LOG_ERROR, "Cannot allocate memory.\n"); return AVERROR(ENOMEM); } - ff_kbd_window_init(window, 5.0, n2); - for (i = 0; i < n2; i++) - window[n-1-i] = window[i]; + + ff_kbd_window_init(window, 5.0, AC3_BLOCK_SIZE); s->mdct_window = window; - return ff_mdct_init(&s->mdct, 9, 0, -2.0 / n); + return ff_mdct_init(&s->mdct, 9, 0, -2.0 / AC3_WINDOW_SIZE); } diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c index 4f1e181e0b..5ecef3b178 100644 --- a/libavcodec/ac3enc_template.c +++ b/libavcodec/ac3enc_template.c @@ -92,7 +92,10 @@ static void apply_mdct(AC3EncodeContext *s) const SampleType *input_samples = &s->planar_samples[ch][blk * AC3_BLOCK_SIZE]; s->fdsp->vector_fmul(s->windowed_samples, input_samples, - s->mdct_window, AC3_WINDOW_SIZE); + s->mdct_window, AC3_BLOCK_SIZE); + s->fdsp->vector_fmul_reverse(s->windowed_samples + AC3_BLOCK_SIZE, + &input_samples[AC3_BLOCK_SIZE], + s->mdct_window, AC3_BLOCK_SIZE); s->mdct.mdct_calc(&s->mdct, block->mdct_coef[ch+1], s->windowed_samples); -- 2.30.0.rc2
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".