From patchwork Mon Nov 23 19:37:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23989 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 27D1B44A49B for ; Mon, 23 Nov 2020 21:38:22 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0887868BB9C; Mon, 23 Nov 2020 21:38:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B442C68BBAC for ; Mon, 23 Nov 2020 21:38:12 +0200 (EET) Received: by mail-wm1-f66.google.com with SMTP id 10so318387wml.2 for ; Mon, 23 Nov 2020 11:38:12 -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=2RlDaN8Gh4OtnrSjWoY8c73wDbt6d2HZ0qIaXwvcUG8=; b=XCSmzD/XVYkIiH1VADw/BQeuS8/xdwAMNr4xPalGykG3QaIkufioIWGppgPHhWBvjJ H618ntO0UY/nq7EZWzxFAvhRtfyrE4x2C3hZrFM4gEu/JEbIQCM3cVav0+e21n8JbzGl S1IQmLSoaVRGTJvxgk1Xu44Hs0G9GvB5V5F4vdWTIcszEywXN0H0cpjEZ+rmfISlLPn6 lQVZCKvJkd4Aq6VJVcsWA8ZbvnbNrUlRxjHYbSsrU1ZHUhwNGhnKCKmwD6/jTg0DoFA5 RM0HlX0R8gdBv53StbQZWYgD2xRgm6DTZsRMyu10upRJGBGk95jeu0v3hoDA3Gc3c+7X +BmQ== 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=2RlDaN8Gh4OtnrSjWoY8c73wDbt6d2HZ0qIaXwvcUG8=; b=dW1XpRb5t7UsJWc54peCBb4O20AQhKeZevIW6yUZuMBz9YZf08BmlUwK1c09DJ61f6 GOaRmWvFZy7PAO5IBlTMNi4FlQ6WmA36Th/8gHVI98VIb+18tIy/Wpg7wPaNnMCdvedO hC83dFiWneAvjs40JcOkG4lOSQvgA3SIihF3HhP+KOKUNszTuJQ1qpTopjApMWjSkGwU XvuIV/noHgZl2a6gqv4TSDuMFHy2iHYIirDqnRXg+mPTssAvSPo+dqOtz3G0dfB/S72a 4X1GQPZOUKB2U6GiY9PEhSID9tt5GXDvUOFoOzaEQNvkSh5hNwFwY+oAqFC9wBB/BJ/5 s9qQ== X-Gm-Message-State: AOAM530Xl11PMB+6Bsdetdj2qD0rfLGswrLjcLeoVQzYR00aS/pi2bKs aFier9M2yFEWR3R0VZmi+KH4OEq0+TaCvw== X-Google-Smtp-Source: ABdhPJyJDdUl76S6R6CK4EeZoBgNiiftmPKJJ1WlDXgVEGnhbYbuTx11BnvThl749ac86EMCKKkVYQ== X-Received: by 2002:a1c:c284:: with SMTP id s126mr454663wmf.109.1606160291869; Mon, 23 Nov 2020 11:38:11 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id e6sm564086wme.27.2020.11.23.11.38.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Nov 2020 11:38:10 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 23 Nov 2020 20:37:17 +0100 Message-Id: <20201123193739.1249300-7-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 169/191] avcodec/atrac3plus: Make decoder init-threadsafe 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" Signed-off-by: Andreas Rheinhardt --- libavcodec/atrac3plus.h | 4 ++-- libavcodec/atrac3plusdec.c | 16 +++++++++++----- libavcodec/atrac3plusdsp.c | 8 ++++---- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/libavcodec/atrac3plus.h b/libavcodec/atrac3plus.h index 3c39e293c7..82fe0fe1f8 100644 --- a/libavcodec/atrac3plus.h +++ b/libavcodec/atrac3plus.h @@ -179,9 +179,9 @@ int ff_atrac3p_decode_channel_unit(GetBitContext *gb, Atrac3pChanUnitCtx *ctx, void ff_atrac3p_init_imdct(AVCodecContext *avctx, FFTContext *mdct_ctx); /** - * Initialize sine waves synthesizer. + * Initialize sine waves synthesizer and ff_sine_* tables. */ -void ff_atrac3p_init_wave_synth(void); +void ff_atrac3p_init_dsp_static(void); /** * Synthesize sine waves for a particular subband. diff --git a/libavcodec/atrac3plusdec.c b/libavcodec/atrac3plusdec.c index 4b008ba0ee..b75f7eab5e 100644 --- a/libavcodec/atrac3plusdec.c +++ b/libavcodec/atrac3plusdec.c @@ -39,6 +39,7 @@ #include "libavutil/channel_layout.h" #include "libavutil/float_dsp.h" +#include "libavutil/thread.h" #include "avcodec.h" #include "get_bits.h" #include "internal.h" @@ -144,8 +145,15 @@ static av_cold int set_channel_params(ATRAC3PContext *ctx, return 0; } +static av_cold void atrac3p_init_static(void) +{ + ff_atrac3p_init_vlcs(); + ff_atrac3p_init_dsp_static(); +} + static av_cold int atrac3p_decode_init(AVCodecContext *avctx) { + static AVOnce init_static_once = AV_ONCE_INIT; ATRAC3PContext *ctx = avctx->priv_data; int i, ch, ret; @@ -154,8 +162,6 @@ static av_cold int atrac3p_decode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } - ff_atrac3p_init_vlcs(); - /* initialize IPQF */ ff_mdct_init(&ctx->ipqf_dct_ctx, 5, 1, 32.0 / 32768.0); @@ -163,8 +169,6 @@ static av_cold int atrac3p_decode_init(AVCodecContext *avctx) ff_atrac_init_gain_compensation(&ctx->gainc_ctx, 6, 2); - ff_atrac3p_init_wave_synth(); - if ((ret = set_channel_params(ctx, avctx)) < 0) return ret; @@ -194,6 +198,8 @@ static av_cold int atrac3p_decode_init(AVCodecContext *avctx) avctx->sample_fmt = AV_SAMPLE_FMT_FLTP; + ff_thread_once(&init_static_once, atrac3p_init_static); + return 0; } @@ -405,7 +411,7 @@ AVCodec ff_atrac3pal_decoder = { .type = AVMEDIA_TYPE_AUDIO, .id = AV_CODEC_ID_ATRAC3PAL, .capabilities = AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_INIT_THREADSAFE, .priv_data_size = sizeof(ATRAC3PContext), .init = atrac3p_decode_init, .close = atrac3p_decode_close, diff --git a/libavcodec/atrac3plusdsp.c b/libavcodec/atrac3plusdsp.c index ca3154e133..7af1fa2141 100644 --- a/libavcodec/atrac3plusdsp.c +++ b/libavcodec/atrac3plusdsp.c @@ -79,9 +79,6 @@ const float ff_atrac3p_mant_tab[8] = { av_cold void ff_atrac3p_init_imdct(AVCodecContext *avctx, FFTContext *mdct_ctx) { - ff_init_ff_sine_windows(7); - ff_init_ff_sine_windows(6); - /* Initialize the MDCT transform. */ ff_mdct_init(mdct_ctx, 8, 1, -1.0); } @@ -94,7 +91,7 @@ static DECLARE_ALIGNED(32, float, sine_table)[2048]; ///< wave table static DECLARE_ALIGNED(32, float, hann_window)[256]; ///< Hann windowing function static float amp_sf_tab[64]; ///< scalefactors for quantized amplitudes -av_cold void ff_atrac3p_init_wave_synth(void) +av_cold void ff_atrac3p_init_dsp_static(void) { int i; @@ -109,6 +106,9 @@ av_cold void ff_atrac3p_init_wave_synth(void) /* generate amplitude scalefactors table */ for (i = 0; i < 64; i++) amp_sf_tab[i] = exp2f((i - 3) / 4.0f); + + ff_init_ff_sine_windows(7); + ff_init_ff_sine_windows(6); } /**