This brings the encoder in-line with the rest of ours and saves on a bit of memory.
Patch attached.
>From 3cdf7075052a7a429cf63385c587df7f839182cd Mon Sep 17 00:00:00 2001 From: Lynne <d...@lynne.ee> Date: Sat, 9 Jan 2021 17:27:16 +0100 Subject: [PATCH 3/6] 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 | 11 ++++------- libavcodec/ac3enc_float.c | 15 ++++----------- libavcodec/ac3enc_template.c | 5 ++++- 3 files changed, 12 insertions(+), 19 deletions(-) diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c index 7aaa55f2e7..6e928aa0d3 100644 --- a/libavcodec/ac3enc_fixed.c +++ b/libavcodec/ac3enc_fixed.c @@ -105,19 +105,16 @@ static av_cold int ac3_fixed_mdct_init(AC3EncodeContext *s) if (ret < 0) return ret; - 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); - float fwin[AC3_WINDOW_SIZE/2]; - ff_kbd_window_init(fwin, 5.0, AC3_WINDOW_SIZE/2); + float fwin[AC3_BLOCK_SIZE]; + ff_kbd_window_init(fwin, 5.0, AC3_BLOCK_SIZE); - for (int i = 0; i < AC3_WINDOW_SIZE/2; i++) + for (int i = 0; i < AC3_BLOCK_SIZE; i++) iwin[i] = lrintf(fwin[i] * (1 << 22)); - for (int i = 0; i < AC3_WINDOW_SIZE/2; i++) - iwin[AC3_WINDOW_SIZE-1-i] = iwin[i]; - s->mdct_window = iwin; s->fdsp = avpriv_alloc_fixed_dsp(s->avctx->flags & AV_CODEC_FLAG_BITEXACT); diff --git a/libavcodec/ac3enc_float.c b/libavcodec/ac3enc_float.c index 45bfed34f9..ecddb5b07b 100644 --- a/libavcodec/ac3enc_float.c +++ b/libavcodec/ac3enc_float.c @@ -109,23 +109,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".