From patchwork Mon Nov 23 19:37:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24006 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 B119744B44C for ; Mon, 23 Nov 2020 21:41:19 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DBFB068BC38; Mon, 23 Nov 2020 21:38:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E730368BC1C for ; Mon, 23 Nov 2020 21:38:27 +0200 (EET) Received: by mail-wr1-f67.google.com with SMTP id t4so6851192wrr.12 for ; Mon, 23 Nov 2020 11:38:27 -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=De6SH3OC13JdpVzlRQNe+Q3PV8eLXN5wNkYyv83Eno4=; b=EQqM14marDY/dH/ZhZv1GQGQH6AmvLA2jJ75hJ+Wh0OR5/WxMabiMZPe6ePq6OxEcn 9W1P4TNti/ADI1gFRBe3BV53QPJurS76c/aayXrN9BtAQSL3U/9qZ8hkqrd1N0fDW8lO 5UNseUmGOn8hcjtjgyHFElSZRHAZUf/gYUhSVFZEd88A83JzhBISEilsIec/pqsUp1Bb ftKqNVc2IJmBkWzWwDO5N75g4C/Phji8dQ/Vg+N8nu5WdZw1C0/BS8OYrpXd0cFx+RX0 CkOemoImogbWcPixP+DA5bmyxvN3VCZ1s2dbr+F4IQLw8mBZGBItsMkFHyfBENHsn/Lr g9+A== 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=De6SH3OC13JdpVzlRQNe+Q3PV8eLXN5wNkYyv83Eno4=; b=RIt/zxMWWMpiiP2qx4S6B/g6LdA+oTWhPSK+TfrY9yy3pj2Jp0qXp6wuVJvY2+YopG ENTjsXQrITHUpF/gA7peSnk9/HEE3sWVU/e10PgC1lBnWZGxI5K/5BlpEwpwXygrSfgx GIrfKVzm0rR1UfemtFFNcqTGAAys5VmHuun3s9GyOtnuomSyJIem7Yl2E+s4lGifcQao wNALgKAeovNBEaSkxReVTWRwlzoK5F+EARxMWBfQMvQ3qxGTWzqBXnOWNVEN+pSBmpn1 W4X5DeGANFuQ19Gp7dlfaxyB0LePyOdaUPpi4rqR7Hd69rv99+nLzYDqCB4pqhrkF+Ec ZJ1w== X-Gm-Message-State: AOAM532mcejzh1hiWOBDnYPyQuH2EsRDSB5TiWaxQFBom5iasfS/fo32 UgIq6fraAJJE2f2qV6ILKIrW57z9C8twhQ== X-Google-Smtp-Source: ABdhPJxJFgEZszMVzvhCWbpTjsxD4duMGEBTXBni2JH3RJMosGi8utNFMccOWwV3IVPCb6EOucDBFA== X-Received: by 2002:a5d:4fc1:: with SMTP id h1mr1388950wrw.226.1606160306876; Mon, 23 Nov 2020 11:38:26 -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.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Nov 2020 11:38:26 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 23 Nov 2020 20:37:32 +0100 Message-Id: <20201123193739.1249300-22-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 184/191] avcodec/asvdec: Make decoders 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/asvdec.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c index 6b6d7b3fa7..d40535bed4 100644 --- a/libavcodec/asvdec.c +++ b/libavcodec/asvdec.c @@ -25,6 +25,7 @@ #include "libavutil/attributes.h" #include "libavutil/mem.h" +#include "libavutil/thread.h" #include "asv.h" #include "avcodec.h" @@ -45,13 +46,8 @@ static VLC dc_ccp_vlc; static VLC ac_ccp_vlc; static VLC asv2_level_vlc; -static av_cold void init_vlcs(ASV1Context *a) +static av_cold void init_vlcs(void) { - static int done = 0; - - if (!done) { - done = 1; - INIT_VLC_STATIC(&ccp_vlc, CCP_VLC_BITS, 17, &ff_asv_ccp_tab[0][1], 2, 1, &ff_asv_ccp_tab[0][0], 2, 1, 32); @@ -67,7 +63,6 @@ static av_cold void init_vlcs(ASV1Context *a) INIT_LE_VLC_STATIC(&asv2_level_vlc, ASV2_LEVEL_VLC_BITS, 63, &ff_asv2_level_tab[0][1], 4, 2, &ff_asv2_level_tab[0][0], 4, 2, 1024); - } } static inline int asv1_get_level(GetBitContext *gb) @@ -286,6 +281,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, static av_cold int decode_init(AVCodecContext *avctx) { + static AVOnce init_static_once = AV_ONCE_INIT; ASV1Context *const a = avctx->priv_data; const int scale = avctx->codec_id == AV_CODEC_ID_ASV1 ? 1 : 2; int i; @@ -297,7 +293,6 @@ static av_cold int decode_init(AVCodecContext *avctx) ff_asv_common_init(avctx); ff_blockdsp_init(&a->bdsp, avctx); ff_idctdsp_init(&a->idsp, avctx); - init_vlcs(a); ff_init_scantable(a->idsp.idct_permutation, &a->scantable, ff_asv_scantab); avctx->pix_fmt = AV_PIX_FMT_YUV420P; @@ -316,6 +311,8 @@ static av_cold int decode_init(AVCodecContext *avctx) a->inv_qscale; } + ff_thread_once(&init_static_once, init_vlcs); + return 0; } @@ -340,6 +337,7 @@ AVCodec ff_asv1_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif @@ -353,5 +351,6 @@ AVCodec ff_asv2_decoder = { .init = decode_init, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif