From patchwork Fri May 7 06:46:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 27638 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp273738iof; Thu, 6 May 2021 23:48:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxlQfKl8sgVoRNQRQEILQi39OKrLKZzPoNDfz1u9WBI2BUCZAUBUIymQaSZ0lZD6IELwsGd X-Received: by 2002:a17:906:c1c9:: with SMTP id bw9mr8493277ejb.239.1620370112187; Thu, 06 May 2021 23:48:32 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s25si5053636edy.17.2021.05.06.23.48.31; Thu, 06 May 2021 23:48:32 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=pwIS+SbW; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4834F680BFE; Fri, 7 May 2021 09:47:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067011.outbound.protection.outlook.com [40.92.67.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 90479680968 for ; Fri, 7 May 2021 09:47:18 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oPHTCrsrpCYwr0u43j1Mc+8RolXEhqcnOZHvGOSkO/tFomEPI6NS5Dt+8SfNIzQsPkZPl+bXgu//hDUbBxoMKtIfouIeoe29ccCKUQnuIPQdWGE2AfKWIMHQ1UqiPLp2yq2FsdBCyPJzSzVyQRmfvQHydG9idsI5uCh2aIHvo7DwKnzuhE3tOFL8sMiUuKy3V7QRJswoy+nyQlRFdYzcElbLUIad5hspm8BOLA1ttv1KtVQn7c0RTmBU1fIXJOXFPL3VU7cxk0Yvbfjp8FjtlTMfqIfUpUqsn7RYsvXGHchtXnUpBOlQf0NiPXxb9RjAzzvLhEspJkWa3AzDZOIjuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ud7/EnffHS6qTjZAknRXYi0JcmMqyuI5nW+yLW35vWo=; b=BAt0zGUi3Sp4uYcMJ4dtiBNC0D0H0VpX9CEuTQPrN6IW+jlleP35MWX4JntxGJqY6cOyjfp5snB8kzV0CzZJPGNsWl7O1CtSnxP8tvb6U6g7S5hOcNT5r14ivlLamudihG912+0q/neOSU2uUpB8odDFiLpFrNmX1pacroVPFo3L4THIfbICyecQcjsrtenkoV7wlReV7xknptqfCAyjzWVVHKmCfEvsJAalYFLX6b6pwJJ/vmIKJJTDUtuucZAAMIe691p3BKuac77JpevyU75GKt4aDPX8wWCwYYljk5P1QBKubQb+x8MIqkXpGTEswgSI5G9e4tcfHgP7RI2aYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ud7/EnffHS6qTjZAknRXYi0JcmMqyuI5nW+yLW35vWo=; b=pwIS+SbWtoBNXkzNUrz+agb4vjG7kxKbbBslDJ/Azt7x8AkMVOV8RH/PufvcndQ11+nZGVIRjYQn5pg0znR9DxrdBcyAc6lFRLE2iUFgIy1yn8Bjx2gaOLmVz84f6g7zD9UDNGnhvS/B4yE9bvFGLQ9cp/c8zcLX1gXsP1vOhTiZHdT+/FHNWZNxqTQM5NcTJxiwtqUqw5sAvJm24JjHwYjZfC1rcsyDhScX6JN2tqQsE/qmdMgSIj0I9WvjJNsjATXSjoTosZRKNp4hhItlorWyjsSlGlkp2nMYM96bjclVpCfbjDmCin+7lfh8Zxd7/a0kJ9/6tQ3EAf0BdkvkNg== Received: from HE1EUR02FT024.eop-EUR02.prod.protection.outlook.com (2a01:111:e400:7e1d::43) by HE1EUR02HT199.eop-EUR02.prod.protection.outlook.com (2a01:111:e400:7e1d::347) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25; Fri, 7 May 2021 06:47:17 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:7e1d::52) by HE1EUR02FT024.mail.protection.outlook.com (2a01:111:e400:7e1d::181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25 via Frontend Transport; Fri, 7 May 2021 06:47:17 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:C0B574BEF7D140338DF03A2D1F0E87D613ACD2D9E97B00542E279B50E8EE10E1; UpperCasedChecksum:E646574038844F12670A6C871698D39A008B626B2C6D137AD314AE1076B70637; SizeAsReceived:7605; Count:48 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::45bb:c44f:2b75:23b7]) by HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::45bb:c44f:2b75:23b7%5]) with mapi id 15.20.4108.027; Fri, 7 May 2021 06:47:17 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 May 2021 08:46:40 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [ACOu0rvNsBf2k24KrVyi3tS15ZIuNuaqSDQKzuwJqls=] X-ClientProxiedBy: AM0PR06CA0117.eurprd06.prod.outlook.com (2603:10a6:208:ab::22) To HE1PR0301MB2154.eurprd03.prod.outlook.com (2603:10a6:3:2a::22) X-Microsoft-Original-Message-ID: <20210507064647.362502-12-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.193.170.150) by AM0PR06CA0117.eurprd06.prod.outlook.com (2603:10a6:208:ab::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25 via Frontend Transport; Fri, 7 May 2021 06:47:16 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 5b12cb21-33bb-456c-692e-08d91123f423 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTy/gRYuf0ZoVb1eIH22myRV32oymBW/b7dyMShpyEB33bdJiDhypC9OZufnf1HzyO6W0qGPws8+4IZ0JNRcSn88nbeHHKwTxdIQasTV4DLHLsfiqSoN2BRglRZsOj87mLHgy+LbSPE7rUK2UB7odBWr0JnvEV+C6957zfq7EbqvgB8TpKdS/qVdvbL9pp8T8rb5/Hnt2W60blRfLZO8Z/guG71dfNRK90aLuGNzIc5IXo6//flFjQvq8oA8pVyXeWNNH6yn9aB0PAeZjA7yjFsqfeCV0Jcv9j/+v//PQYliLQvIi72j/n++H2+mao1lYsoXOBtEWI7tr87AMquyMZkxDRe38y0pq01u6zNisfJJkcwALFiAqYBsvceM0uRTnrxd7FDkZtbz+r0woaVDHEDyzajuTmJSspzq7J/400+gDp1tk5ydDc1qNWiV5vSQW92edQ94aUWT1pU9TjlQdQLvQuUpM5XF3T++T+Lr65qMoEA7bji5lWVN8ZAZGqBwzSR2+dcmzwM0rkdnillt8dUCSWYj6hBWQTbi2TS3jI5aDsXpDmcXHUcVViwbS59jTnz8GQJ7xVKtJVaI9StsCReMoGXsQSiAHBNI1HuyHbKOr5uBXuik0OcnMnDCuO8WVFRItl+SlixGYxPv5p6A3EA9CJYp9cZfVaiuMHDZNhhkjQXe27yu6/Sv16r0FJl63ZVSlX7g/Ig1s8WOojFa5wDMnPE69vN37RL/Hm7cCJmn+OpYKZNkhbjoywTaMN+gJY= X-MS-TrafficTypeDiagnostic: HE1EUR02HT199: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6FZo459y6CONcmanyOke/RfnrhV7tQgt1M9gNlzDIhNRa7/MH2TVKk/vcOcgmCMzQauwv/Cqj8Xxi8DejXm3gMYQhuYeG4Gf4wCVMPTUIlF5Tfk4RcENpsvl5dd4hh473X4P14oXeMTVufEj2wu6Tz6eDf1OV+KVjDqZVA1pBjF6JH4SFk3MjpRiePgkmwOQ6f/ENafO2V70OjOoQ6yTLeYdEJXWx3m/LjJtat4nLzS59QWwJH1TUBwSe3F8p8jLNGZuRfYetXELwPZ+0gaFOlFVOjL746jZh1Dtmfwtjn3p3V5FhOGPkvPjrrfqpQYYyyB6Kbdhmt+s9SmJceLuVezwQdwpZZ13YdLsmW8r154hOKlt28KrGCO4paIPcyBkNPNo7vWepfTRuE9iHcxq0A== X-MS-Exchange-AntiSpam-MessageData: XMoxdWWpjbwdqqHUuJc/YIogjWsAd6d+3NH08mmRLWOrRdbRQqyqoFldwGW2qZe7dBGQYxbM6K5LcxEB7Vj0FogkVAHxRYKeFlntlxqE+NJwltXYY9t5Md3vxzdVvq5nP/5FnmW4/b8bcuYF1rWefg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b12cb21-33bb-456c-692e-08d91123f423 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2021 06:47:16.9683 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: HE1EUR02FT024.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1EUR02HT199 Subject: [FFmpeg-devel] [PATCH 13/20] avcodec/jpeg2000dec: Make decoder init-threadsafe X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: Ot0JOjQItw4P The JPEG-2000 decoder and encoder share common luts; the decoder initializes them once, guarded by a dedicated AVOnce, whereas the encoder initializes them always during init. This means that the decoder is not init-threadsafe; in fact there is a potential data race because these luts can be initialized while an active decoder/encoder is using them. Fix this and make the decoder init-threadsafe by making the initialization function guard initialization itself with a dedicated AVOnce. Signed-off-by: Andreas Rheinhardt --- libavcodec/jpeg2000.c | 9 ++++++++- libavcodec/jpeg2000dec.c | 12 +++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/libavcodec/jpeg2000.c b/libavcodec/jpeg2000.c index 56d98c8a89..324908d833 100644 --- a/libavcodec/jpeg2000.c +++ b/libavcodec/jpeg2000.c @@ -30,6 +30,7 @@ #include "libavutil/common.h" #include "libavutil/imgutils.h" #include "libavutil/mem.h" +#include "libavutil/thread.h" #include "avcodec.h" #include "internal.h" #include "jpeg2000.h" @@ -157,7 +158,7 @@ static int getsgnctxno(int flag, uint8_t *xorbit) return ctxlbltab[hcontrib][vcontrib]; } -void av_cold ff_jpeg2000_init_tier1_luts(void) +static void av_cold jpeg2000_init_tier1_luts(void) { int i, j; for (i = 0; i < 256; i++) @@ -169,6 +170,12 @@ void av_cold ff_jpeg2000_init_tier1_luts(void) getsgnctxno(i + (j << 8), &ff_jpeg2000_xorbit_lut[i][j]); } +void av_cold ff_jpeg2000_init_tier1_luts(void) +{ + static AVOnce init_static_once = AV_ONCE_INIT; + ff_thread_once(&init_static_once, jpeg2000_init_tier1_luts); +} + void ff_jpeg2000_set_significance(Jpeg2000T1Context *t1, int x, int y, int negative) { diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 1295c96305..e62f7b19e6 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -34,7 +34,6 @@ #include "libavutil/imgutils.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" -#include "libavutil/thread.h" #include "avcodec.h" #include "bytestream.h" #include "internal.h" @@ -2473,18 +2472,12 @@ static int jp2_find_codestream(Jpeg2000DecoderContext *s) return 0; } -static av_cold void jpeg2000_init_static_data(void) -{ - ff_jpeg2000_init_tier1_luts(); -} - static av_cold int jpeg2000_decode_init(AVCodecContext *avctx) { - static AVOnce init_static_once = AV_ONCE_INIT; Jpeg2000DecoderContext *s = avctx->priv_data; - ff_thread_once(&init_static_once, jpeg2000_init_static_data); ff_jpeg2000dsp_init(&s->dsp); + ff_jpeg2000_init_tier1_luts(); return 0; } @@ -2588,5 +2581,6 @@ const AVCodec ff_jpeg2000_decoder = { .decode = jpeg2000_decode_frame, .priv_class = &jpeg2000_class, .max_lowres = 5, - .profiles = NULL_IF_CONFIG_SMALL(ff_jpeg2000_profiles) + .profiles = NULL_IF_CONFIG_SMALL(ff_jpeg2000_profiles), + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, };