From patchwork Fri Nov 20 07:32:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23856 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 BDE1F44B17A for ; Fri, 20 Nov 2020 09:45:13 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1A4DC68BCA6; Fri, 20 Nov 2020 09:34:17 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AC9EB68BC8F for ; Fri, 20 Nov 2020 09:34:10 +0200 (EET) Received: by mail-ej1-f65.google.com with SMTP id oq3so11500586ejb.7 for ; Thu, 19 Nov 2020 23:34:10 -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=uGKVAHuedgiCuLKKIXfwvzX55Qs7wZB2ER+eNt24Y8o=; b=pimJnsPAFZ7dwHQ+HY5gzu6Wsc3cvROSO9TIY0UJc2W+J5ZS2oDc+gXTBVBoIMAnJ8 iISxHHqGAIRTUqC7G9DGeDPTRpZbt8HSJEOTA1c1ejtNzjwzjQ/JuiHqJTwoKbEPUJNW sX2JyA/s77LcpL8IvsLvkJySp7PM6km3r0QWh7PDgADLOBu5gvfThgiO5zzf6HQBUCK7 7Q19A/7jlc4bpk2qx9OhiCEWW+feZKBXc5K9xZNNaxpGPGmByejJnCZF9/8/yovA8okf Fvd0Uxhc+tZzspwN4qZZL8IYUqNB/iooxRsVSgrWogc9Qw41Ah+hoseRYyDllxhJG0Ca ImgQ== 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=uGKVAHuedgiCuLKKIXfwvzX55Qs7wZB2ER+eNt24Y8o=; b=Q9XF7mRG+/ZrxKV0PbIblMQ1IFKW0vrFTCMCvQ62zVimHrSrCssrcCmLGjabLZ7SZp yuw2x/VlMxDkrNGbztmmHCn1oOzhxenKGWVAJN+PtSNE8n1PDgT+vYosgH/Ca2koxazO 0gKZ96ZPUoBxnd70AMFKm5DAIMEHfQJ53bFGQgJRC5hzcmrU43f827qcKJj2D+b96vvT hWWYClTr1YHac1uslb7ioMn4WCQXKWQDa+GQHJk5TZSVWkRaBfdpT39evMZXlkoj0O/B hscaIcfAa55mBlzZTnAq+AQ/dU1QnxLBcn4tENR+6LnHPqd6cUIIgu5vFNHinqTWSkxQ 29Zw== X-Gm-Message-State: AOAM5326aPHW4lzAKwsfmue+3qRrX197rvtKge0u9Kaf+2BFWhztHBtf GSZnPxU/oexAXUVAsA951N4pQSuiU0oPAQ== X-Google-Smtp-Source: ABdhPJyeOgJMNDgLdMVTc8Cmuc9VMNZgUhyxdodlkJeT+elFV31OKE5YnWclGt24EJkduZS35+J6Vw== X-Received: by 2002:a17:906:7c95:: with SMTP id w21mr9017616ejo.304.1605857650027; Thu, 19 Nov 2020 23:34:10 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id i13sm769110ejv.84.2020.11.19.23.34.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Nov 2020 23:34:09 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 20 Nov 2020 08:32:33 +0100 Message-Id: <20201120073327.820745-9-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 108/162] avcodec/vc1: Make ff_vc1_init_common() thread-safe 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/vc1.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index c2a440d2e7..d4378cbae9 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -27,6 +27,7 @@ */ #include "libavutil/attributes.h" +#include "libavutil/thread.h" #include "internal.h" #include "avcodec.h" #include "mpegvideo.h" @@ -1355,21 +1356,11 @@ static const uint16_t vlc_offs[] = { 31714, 31746, 31778, 32306, 32340, 32372 }; -/** - * Init VC-1 specific tables and VC1Context members - * @param v The VC1Context to initialize - * @return Status - */ -av_cold int ff_vc1_init_common(VC1Context *v) +static av_cold void vc1_init_static(void) { - static int done = 0; int i = 0; static VLC_TYPE vlc_table[32372][2]; - v->hrd_rate = v->hrd_buffer = NULL; - - /* VLC tables */ - if (!done) { INIT_VLC_STATIC(&ff_vc1_bfraction_vlc, VC1_BFRACTION_VLC_BITS, 23, ff_vc1_bfraction_bits, 1, 1, ff_vc1_bfraction_codes, 1, 1, 1 << VC1_BFRACTION_VLC_BITS); @@ -1488,14 +1479,27 @@ av_cold int ff_vc1_init_common(VC1Context *v) ff_vc1_if_1mv_mbmode_bits[i], 1, 1, ff_vc1_if_1mv_mbmode_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC); } - done = 1; - } +} - /* Other defaults */ +/** + * Init VC-1 specific tables and VC1Context members + * @param v The VC1Context to initialize + * @return Status + */ +av_cold int ff_vc1_init_common(VC1Context *v) +{ + static AVOnce init_static_once = AV_ONCE_INIT; + + v->hrd_rate = v->hrd_buffer = NULL; + + /* Nonstatic defaults */ v->pq = -1; v->mvrange = 0; /* 7.1.1.18, p80 */ ff_vc1dsp_init(&v->vc1dsp); + /* VLC tables */ + ff_thread_once(&init_static_once, vc1_init_static); + return 0; }