From patchwork Fri Nov 20 07:19:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23808 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 2336D44A644 for ; Fri, 20 Nov 2020 09:34:07 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2B2C068BB58; Fri, 20 Nov 2020 09:25:18 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1870468BA5E for ; Fri, 20 Nov 2020 09:25:05 +0200 (EET) Received: by mail-ej1-f48.google.com with SMTP id gj5so11499411ejb.8 for ; Thu, 19 Nov 2020 23:25:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references:reply-to :mime-version:content-transfer-encoding; bh=hYuwVehIc7GiTFLM8fkw6XhsJa8oSGzQ8VoByVcUdkA=; b=OfF2X6rwvr8RkuLsErHV0ZVBAQrX4BL7blnhjw6sgf9YbyWAp+jWgn4WPWF3Q0qNU6 nj3zuEEzXHFTKR0T/RJVqVxf1v8ARfivYiOPb0wLZao6lrfgKn13m7kpTtUKAfbaw8OQ 4H6R2sigg65yAvFc+6tVs6W5TYQpoKfmuMljgK1BDwdfBZWDikkNsdTseeknDLAg6s2Z M7KJQu/6/Uq1n7NoWxbTY579ZWLPUaxYSDmjUb2nvOxXg3jRXCajaR0pq5lsbvPEwXs2 Vs1BO2jV85Q2pIcdPUaVyoH2Nzqi60eEjFq6RwkH/CY8qP+Ea9fLsqiZEFS0jEntpkSX d51A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:reply-to:mime-version:content-transfer-encoding; bh=hYuwVehIc7GiTFLM8fkw6XhsJa8oSGzQ8VoByVcUdkA=; b=fOyBsF+nOO+2L4ifK2jBmFpXV1t+kHEwse/IRu0l6IvtcOZYAwT9cj2oCwDbufE0QZ S5GVLoanSPgaiWjegns8x+j65EqfwKmOe141e9YoKvEQ24HicsaX+UDVGaFDMJ/W5q7T 7XZ4myIldJVumFECh8xxPEqTxvh8rbol2V6LhBIXHYwUAiBnFuiM2SXGNRdt2FuiePIz Q27zZb6ACY3llmmMtxV476zpQMVmijcC5MswCQhv5CXgY6AiRDvF9tcUn6/zbIx2KviA vhQynA/G+qOXD8dlVx0GTq8ekuGe/sbyI6ZV6OGcbG3CEbUj+pN0pdn2w1nXDtHoV8EF Dp1g== X-Gm-Message-State: AOAM530c4L4HASIaJOWTEtJenQBWD3ovtsVYuh0q2znbBa6sfFOHt+n+ NWI73/XI3OQaeiwHaE8bVy7CaPhiuhjr/g== X-Google-Smtp-Source: ABdhPJwrn4XfUQ3vL3ZfUIr6W7i7jpuSOJxJaBsyRCVZDhCT9Cujxnpm/t1ye3OttXFzHvtXlRXXxg== X-Received: by 2002:a17:906:f10e:: with SMTP id gv14mr31194428ejb.346.1605857105017; Thu, 19 Nov 2020 23:25:05 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id lz27sm779419ejb.39.2020.11.19.23.25.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Nov 2020 23:25:04 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 20 Nov 2020 08:19:27 +0100 Message-Id: <20201120072116.818090-55-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201120072116.818090-1-andreas.rheinhardt@gmail.com> References: <20201120072116.818090-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 054/162] avcodec/mpegaudiodsp: Combine initializing float and int tables 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This avoids code duplication in the functions used to initialize them and allows to remove an AVOnce. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegaudiodsp.c | 54 +++++++++++++++++++++++++++--- libavcodec/mpegaudiodsp.h | 3 -- libavcodec/mpegaudiodsp_template.c | 42 ----------------------- 3 files changed, 50 insertions(+), 49 deletions(-) diff --git a/libavcodec/mpegaudiodsp.c b/libavcodec/mpegaudiodsp.c index 3cafca27bf..0a14ff549e 100644 --- a/libavcodec/mpegaudiodsp.c +++ b/libavcodec/mpegaudiodsp.c @@ -21,20 +21,66 @@ #include "config.h" #include "libavutil/attributes.h" #include "libavutil/thread.h" +#include "mpegaudio.h" #include "mpegaudiodsp.h" #include "dct.h" #include "dct32.h" -static AVOnce mpadsp_float_table_init = AV_ONCE_INIT; -static AVOnce mpadsp_fixed_table_init = AV_ONCE_INIT; +static AVOnce mpadsp_table_init = AV_ONCE_INIT; + +static av_cold void mpadsp_init_tabs(void) +{ + int i, j; + /* compute mdct windows */ + for (i = 0; i < 36; i++) { + for (j = 0; j < 4; j++) { + double d; + + if (j == 2 && i % 3 != 1) + continue; + + d = sin(M_PI * (i + 0.5) / 36.0); + if (j == 1) { + if (i >= 30) d = 0; + else if (i >= 24) d = sin(M_PI * (i - 18 + 0.5) / 12.0); + else if (i >= 18) d = 1; + } else if (j == 3) { + if (i < 6) d = 0; + else if (i < 12) d = sin(M_PI * (i - 6 + 0.5) / 12.0); + else if (i < 18) d = 1; + } + //merge last stage of imdct into the window coefficients + d *= 0.5 * IMDCT_SCALAR / cos(M_PI * (2 * i + 19) / 72); + + if (j == 2) { + ff_mdct_win_float[j][i/3] = d / (1 << 5); + ff_mdct_win_fixed[j][i/3] = d / (1 << 5) * (1LL << 32) + 0.5; + } else { + int idx = i < 18 ? i : i + (MDCT_BUF_SIZE/2 - 18); + ff_mdct_win_float[j][idx] = d / (1 << 5); + ff_mdct_win_fixed[j][idx] = d / (1 << 5) * (1LL << 32) + 0.5; + } + } + } + + /* NOTE: we do frequency inversion after the MDCT by changing + the sign of the right window coefs */ + for (j = 0; j < 4; j++) { + for (i = 0; i < MDCT_BUF_SIZE; i += 2) { + ff_mdct_win_float[j + 4][i ] = ff_mdct_win_float[j][i ]; + ff_mdct_win_float[j + 4][i + 1] = -ff_mdct_win_float[j][i + 1]; + ff_mdct_win_fixed[j + 4][i ] = ff_mdct_win_fixed[j][i ]; + ff_mdct_win_fixed[j + 4][i + 1] = -ff_mdct_win_fixed[j][i + 1]; + } + } +} av_cold void ff_mpadsp_init(MPADSPContext *s) { DCTContext dct; ff_dct_init(&dct, 5, DCT_II); - ff_thread_once(&mpadsp_float_table_init, &ff_init_mpadsp_tabs_float); - ff_thread_once(&mpadsp_fixed_table_init, &ff_init_mpadsp_tabs_fixed); + ff_thread_once(&mpadsp_table_init, &mpadsp_init_tabs); s->apply_window_float = ff_mpadsp_apply_window_float; s->apply_window_fixed = ff_mpadsp_apply_window_fixed; diff --git a/libavcodec/mpegaudiodsp.h b/libavcodec/mpegaudiodsp.h index 0e4352deab..28dcec576c 100644 --- a/libavcodec/mpegaudiodsp.h +++ b/libavcodec/mpegaudiodsp.h @@ -82,9 +82,6 @@ void ff_imdct36_blocks_float(float *out, float *buf, float *in, void ff_imdct36_blocks_fixed(int *out, int *buf, int *in, int count, int switch_point, int block_type); -void ff_init_mpadsp_tabs_float(void); -void ff_init_mpadsp_tabs_fixed(void); - /** For SSE implementation, MDCT_BUF_SIZE/2 should be 128-bit aligned */ #define MDCT_BUF_SIZE FFALIGN(36, 2*4) diff --git a/libavcodec/mpegaudiodsp_template.c b/libavcodec/mpegaudiodsp_template.c index e531f8a904..f8d0870df6 100644 --- a/libavcodec/mpegaudiodsp_template.c +++ b/libavcodec/mpegaudiodsp_template.c @@ -221,48 +221,6 @@ av_cold void RENAME(ff_mpa_synth_init)(MPA_INT *window) window[512+128+16*i+j] = window[64*i+48-j]; } -av_cold void RENAME(ff_init_mpadsp_tabs)(void) -{ - int i, j; - /* compute mdct windows */ - for (i = 0; i < 36; i++) { - for (j = 0; j < 4; j++) { - double d; - - if (j == 2 && i % 3 != 1) - continue; - - d = sin(M_PI * (i + 0.5) / 36.0); - if (j == 1) { - if (i >= 30) d = 0; - else if (i >= 24) d = sin(M_PI * (i - 18 + 0.5) / 12.0); - else if (i >= 18) d = 1; - } else if (j == 3) { - if (i < 6) d = 0; - else if (i < 12) d = sin(M_PI * (i - 6 + 0.5) / 12.0); - else if (i < 18) d = 1; - } - //merge last stage of imdct into the window coefficients - d *= 0.5 * IMDCT_SCALAR / cos(M_PI * (2 * i + 19) / 72); - - if (j == 2) - RENAME(ff_mdct_win)[j][i/3] = FIXHR((d / (1<<5))); - else { - int idx = i < 18 ? i : i + (MDCT_BUF_SIZE/2 - 18); - RENAME(ff_mdct_win)[j][idx] = FIXHR((d / (1<<5))); - } - } - } - - /* NOTE: we do frequency inversion adter the MDCT by changing - the sign of the right window coefs */ - for (j = 0; j < 4; j++) { - for (i = 0; i < MDCT_BUF_SIZE; i += 2) { - RENAME(ff_mdct_win)[j + 4][i ] = RENAME(ff_mdct_win)[j][i ]; - RENAME(ff_mdct_win)[j + 4][i + 1] = -RENAME(ff_mdct_win)[j][i + 1]; - } - } -} /* cos(pi*i/18) */ #define C1 FIXHR(0.98480775301220805936/2) #define C2 FIXHR(0.93969262078590838405/2)