From patchwork Tue Jan 12 18:13:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 24927 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 7A6E244B228 for ; Tue, 12 Jan 2021 20:13:21 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 60A3068ABD5; Tue, 12 Jan 2021 20:13:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from w4.tutanota.de (w4.tutanota.de [81.3.6.165]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BDCB068AB67 for ; Tue, 12 Jan 2021 20:13:14 +0200 (EET) Received: from w3.tutanota.de (unknown [192.168.1.164]) by w4.tutanota.de (Postfix) with ESMTP id 6A03410602E3 for ; Tue, 12 Jan 2021 18:13:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1610475194; s=s1; d=lynne.ee; h=From:From:To:To:Subject:Subject:Content-Description:Content-ID:Content-Type:Content-Type:Content-Transfer-Encoding:Cc:Date:Date:In-Reply-To:MIME-Version:MIME-Version:Message-ID:Message-ID:Reply-To:References:Sender; bh=yqIOcUqDVgjoe3pvYyjYRWo4rpLq4/Q4Y6FYD2IPcAg=; b=AlmSJh/o8Mp/6slL3uIeClxbA1a3uieUY7Ba7frtg3bFZXjZELvQ1N6fQZL14n+X +MwBUc9tJHi/ZwTrbwGUM/0N/rrOcBJjJkWS7HD/Pj5jWdhSIuY6B2HCrbsyPkz/++u VmLaOsI5LhDAV/ofRLqs+ddCUNCXy9qI4pnoufUkGDry7SiJ7Ar7KEtGOjlNZPDkpsx KY50hFqmc+3uzGwSd3TyBhbq7qrl9sHz58u0aKbDX+5EPYKh+/loynMAkJTNEc5tBKn 3k0rAIbCIjt+7jCsomjlv4FN8kUw4KB+dB4Zh0awdXY1ig9Mm9dGab35Ad2GrsFtz12 b2zxOiPgvw== Date: Tue, 12 Jan 2021 19:13:14 +0100 (CET) From: Lynne To: Ffmpeg Devel Message-ID: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/5] ac3enc: halve the MDCT window size by using vector_fmul_reverse X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This brings the encoder in-line with the rest of ours and saves on a bit of memory. Patch attached. 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);