From patchwork Sat Feb 12 06:41:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34248 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:14aa:0:0:0:0 with SMTP id bz10csp3855741nkb; Fri, 11 Feb 2022 22:42:57 -0800 (PST) X-Google-Smtp-Source: ABdhPJy2oNhuoNn7X8KdXLBTa/wzrBpMfEgoqN9/GTq5OtUEou4EcaGmP4uy1w/YPCk9xO6qmjZ8 X-Received: by 2002:a05:6402:270a:: with SMTP id y10mr5594606edd.413.1644648177758; Fri, 11 Feb 2022 22:42:57 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id oz7si2914443ejc.911.2022.02.11.22.42.57; Fri, 11 Feb 2022 22:42:57 -0800 (PST) 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=ckSiGcuD; 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 C076F68B29E; Sat, 12 Feb 2022 08:42:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074018.outbound.protection.outlook.com [40.92.74.18]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 181E768B273 for ; Sat, 12 Feb 2022 08:42:03 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JaZz9kEwt870p0zrxk7E9Vok2H2UMWlyBB9uTSAlWGWtELkNYh880LzmUAYvVB4v0LKaMtUgLUFqyfL1HhEw1B3DNq7EJhuX/bZ01siL5rE8AKMm7uY6xdvXiamETS13vXh/n+Iv95hz2izqeSaIVw7GI7sQxSb3efVaLZXCP7XP9/WBxNAWrLyqN1Amuij/WVB9JvhVh232tkNV3PULoDvIop6bDu8pQJOQfBVQltDWnhb2HCwJgTBGMPFMX8hqodTil4od+ICDEaMk4g4rc8/0Ts+LqH+43C4XlTxJWHqknpB7Yxt1xvNlOgrUxLQp7P7+Rw/1M+6AFxPw1yRfhw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ruQWBkoMxKGraIUej7GnYC5h9Bf5iz3VMY5Y+nZcQ44=; b=I4TKCdRdd7RiOlZJhr2tyiJKZm16HKb+NanIWnLdSfriavI/mDP/DKocZKom00QYhRIXmqFfIfhGikQ+eU1H19bh5lvz4VdadcjEHRo8oYz8MPRvH/O4pGy1nqPKblQ6Fgt1I8pJ920SnAt01dYQLdTsrvHwnSztSm0PzxJj8p9djzlNUec3DO0qCEi6PEoVlJiAMWwL1TT01s6sAvmdpTyJZdBPfHpHcOAY4PWiPIsPkZpY1UVC5kX+BZ6vq6dDH6DUJMFqugM1dhODSXS63SJHNOde4lOK2673eold6yPH+G+inj6HTx78dttXfqW7fb3gAzv6yzPed0fF1VCe4Q== 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=ruQWBkoMxKGraIUej7GnYC5h9Bf5iz3VMY5Y+nZcQ44=; b=ckSiGcuDmwS9EQ7l0b3DZGGUH2XDlD/H6eKM41/h4iW1j6f/dut7YzTuiJkJtyR1je181UM4qrspJB1hZxTqOeFn30+D08F+NRN7GdfEFYAp03Va6XATraadoW3CWRKyTyBGFB0xJ0grJYSgDdgFWDPzwnMotrKaefamrSWW3pm2BtlHGdHs6F1TxtiYFwgp2pZcbl5zs7pYE3Srdi8TNM9PNxlvtLh/YEXT9PzB9yBJzJTJAHW3RPaLdTf6JpDQ86cmRh/T6YZjSwWNek6/anGrrYARI/SUuVproIAE5W8LwQNuhjNF4c9m7VuLwZaSM/lFWYDzQYv/a8WWPREKCw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM9PR03MB6723.eurprd03.prod.outlook.com (2603:10a6:20b:2d8::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4975.11; Sat, 12 Feb 2022 06:41:53 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%5]) with mapi id 15.20.4975.011; Sat, 12 Feb 2022 06:41:53 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 12 Feb 2022 07:41:25 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [WSG5DcenNBIdLQId12jN7ZrUF33t0vD1] X-ClientProxiedBy: AM7PR03CA0008.eurprd03.prod.outlook.com (2603:10a6:20b:130::18) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220212064131.2265452-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 49251986-e1e3-4954-565c-08d9edf2c176 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNUp0/JksszMwZGXS7aFQs58vTR7H7tsd3M7kxJc9YCbtLxQ5hh0B/h88CqiUcNdvqpvQQhhoEmS+gKuMRYXibSQpAIdGKbxXUIm9tfoFBGMYihxW5uR4Wj8xR4uHbSLStJqkk/GWj4Jp5DDciFYX8CvcslE0ac9c+9S7cMgSuCmGKUBsQ3n0mhhmowGvyfpbFpESUuMQrA4Op1kex5KMvjii+vbaZ80s0+vHZ+hmjIWCK4OnqovLdd9Zz8ywTlPaiPlhyUZZ55ixcNMsWBRk/dI1H9GdTHulHazMEIL9F6zUqGpMcgU105KxFboTUSu1fYmsb+/iueL5YcETA8tMq88lq4nnkOnHSmYZVe+eytCEUaQBCWHP5P4YOPrtXVjg2YxYbSdb75LMQL4ismUyU0vgNMKUmqDM4rUNLEoyX+VokVJFU3vcgQhiHe/H8buQ9LzLb93HEn7WiVn9/+rVg6p2J46Yb3RNly27/UvfDJL9xULiOsE/i7Dvz9ht6Yi86ZZ6iCoJB9jD4qqja8ET29eAerWy3HUz0/dnNJBPiQkCHz8BNG/a5NNR3B5Z6SvfbjEnZD4ZZlAz0YkTk0EOiR+08ZBgSY9CCUmrRZL3z/cQSdaOMGuCDwahMpqEpnRuNgJCgecxSuCJPsfKFVGoh0vuY/mXgMgdzXJGz40gF4gakOwLu/MBe6ZQpnvL6v7HiSwvnDRdG7VuEkkQZa9Zbk6UZ8P69gGKfI= X-MS-TrafficTypeDiagnostic: AM9PR03MB6723:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3Yyuef+yc43jn3SnvoFt67e5FInfZWJmCxBwLDxjLK4a6IGJk2m7VpRVxzyXRbM03ntT8ZjRKhr4lne0/glT/zBVGU526Zm5ML1rxH1i85j0zyymWElBG9mFpL3UOB06nNxd/2YSk+kFo8Q0OvZceoxkFJKRBrJ9YAWAHbyir0asl5tWygqoEQIL+X8sDXsnGU3cTiGsC7aG2kUS033T5eNMvhX9C8J3kBO49XQNAYfZaB7xDcHBoO6ZOCZD6xZ/fYYQEoJtrDcEKcGcXXIZPmcrofbkmZN7XKeE2p4Jbw4I0NlI83E1Ck9MA7a533RUHA9viGICEdngsnynNortQy0vJd7UQh69oDq548/kX6rBcvPJSNuW02V4iT6yh2wY8HNA1FnBMpKZ6sApgQ+ZZ8IfVEGzB3R+8FUgdeyeedRUWs9OL1dw26gEkdyx/fiLx2s7vEkHmR1jQT1wTpySRfnWPP5LjOvmMlrVUT0+E8xPF28vikFt7Y6zdd1CIvvXb1/Dp11Tw5QTLFEi8ksdIA6hP7QF/0cyNd45FH2ulPBi79IRIQiWu0XLIs748Cspr+PKr3EZzovvd6HYg1LeRQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: X+dDOeYbgsqv+dAADTCZfk3LmBbvNfKc0IsbxIm+kujBGJ/Xr/L6fzbvrS6+GDWWCAY43PpzGCmYLvktTuTO3VZZPoCLhuxc/YcM1qY9ZMQ0CZm8PU7g1WgfMzD5p4VuFu7qr8HRifBDTe0Ixgd+OsSPzkuAiwFoyUVhnEMga6AuRd+xsbxzLgKR+yUdbt0NS/qg2Akwf/06qrOlVSZXWq6onZRIKyA0QgTHKqAwSqTf5ZNspkawyIMfZC5sZC6Oa2dw1QBtmfy/ILtiEleVUhRV+Y+EZde+/IOfIN8hbh/h8nQYBpNHYJlQjiL+EijuxNARvsGFVx3fWTrqlACI45lLVEjbQO/CfEEOYM/O+HWK1lzhYXCMRzw7sD67vK05KjRxVdsN71FbObzBmNeltBq5hxqKv1XGf8O5LcA8lcgrcEJRZfdLzPCksf8z69+j975iKWjhef0gXGxvd5umQWRaI/h3unmZmS7KGGGNag6A9XDHHLeW+4PjT9xAbJ7vG9rEpgxZeiK6nc3ER/CgrXh3n5nGhoZFQbVIrI3z3kdVVj1yrtpWXK27LPEqep34ZRjezKOym9t9cijjwVxgHSVoaEkwwgp504SQOug7nwSkbKGn2JPULuObwUItnVsSc4yh5fOPOvi3PUkZzCwpH0r3velJ26osWubFPJphE4xQZaMuY20kLIAE7lGDhBqRpllQuVImjDsOO27jmXolYs5relcerbgjqa5Bh5Mb7MvRSIn7sDEd8HLo3wT5i2xTYmd/ltBa2b6JErQvz3ffC9mkMaanVNWBvbhqMF88J7l37J8tzDMQ9JryDnkCTWZhh4Jsr0C220lLPDsn7wUGQyPkQZlcN30Q85jnAxQg47S8f7D/Zjj9Gi8lRRBe6rTLrlIeqe76sMfupsKuwe8FarLuSiltIemHzcDLVXHwjwTQ4oWYrIJtbaJcpLNfgwslDEtMzYN1xf8RpdtH4d42yA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 49251986-e1e3-4954-565c-08d9edf2c176 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2022 06:41:53.4980 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR03MB6723 Subject: [FFmpeg-devel] [PATCH 11/17] avcodec/ituh263dec: Make initializing VLCs thread-safe 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: K3QUnX2f/x67 This automatically makes the FLV, H.263, H.263+, Intel H.263, MPEG-4, RealVideo 1.0 and RealVideo 2.0 decoders init-threadsafe. Signed-off-by: Andreas Rheinhardt --- libavcodec/flvdec.c | 3 ++- libavcodec/h263dec.c | 6 ++++-- libavcodec/intelh263dec.c | 3 ++- libavcodec/ituh263dec.c | 15 ++++++++------- libavcodec/mpeg4videodec.c | 3 ++- libavcodec/rv10.c | 2 ++ 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/libavcodec/flvdec.c b/libavcodec/flvdec.c index 2bd86b5b47..587cbb3ca5 100644 --- a/libavcodec/flvdec.c +++ b/libavcodec/flvdec.c @@ -122,7 +122,8 @@ const AVCodec ff_flv_decoder = { .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | + FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .max_lowres = 3, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 3466027286..27f9c2932c 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -772,7 +772,8 @@ const AVCodec ff_h263_decoder = { AV_CODEC_CAP_TRUNCATED | #endif AV_CODEC_CAP_DELAY, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | + FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .flush = ff_mpeg_flush, .max_lowres = 3, .pix_fmts = ff_h263_hwaccel_pixfmt_list_420, @@ -793,7 +794,8 @@ const AVCodec ff_h263p_decoder = { AV_CODEC_CAP_TRUNCATED | #endif AV_CODEC_CAP_DELAY, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | + FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .flush = ff_mpeg_flush, .max_lowres = 3, .pix_fmts = ff_h263_hwaccel_pixfmt_list_420, diff --git a/libavcodec/intelh263dec.c b/libavcodec/intelh263dec.c index 9dde247298..b0009f00d7 100644 --- a/libavcodec/intelh263dec.c +++ b/libavcodec/intelh263dec.c @@ -138,7 +138,8 @@ const AVCodec ff_h263i_decoder = { .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | + FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE diff --git a/libavcodec/ituh263dec.c b/libavcodec/ituh263dec.c index 445d5f3f36..6fa5249569 100644 --- a/libavcodec/ituh263dec.c +++ b/libavcodec/ituh263dec.c @@ -35,6 +35,7 @@ #include "libavutil/internal.h" #include "libavutil/mathematics.h" #include "libavutil/mem_internal.h" +#include "libavutil/thread.h" #include "avcodec.h" #include "mpegvideo.h" #include "h263.h" @@ -104,12 +105,8 @@ static VLC cbpc_b_vlc; /* init vlcs */ -/* XXX: find a better solution to handle static init */ -av_cold void ff_h263_decode_init_vlc(void) +static av_cold void h263_decode_init_vlc(void) { - static volatile int done = 0; - - if (!done) { INIT_VLC_STATIC(&ff_h263_intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 9, ff_h263_intra_MCBPC_bits, 1, 1, ff_h263_intra_MCBPC_code, 1, 1, 72); @@ -131,8 +128,12 @@ av_cold void ff_h263_decode_init_vlc(void) INIT_VLC_STATIC(&cbpc_b_vlc, CBPC_B_VLC_BITS, 4, &ff_cbpc_b_tab[0][1], 2, 1, &ff_cbpc_b_tab[0][0], 2, 1, 8); - done = 1; - } +} + +av_cold void ff_h263_decode_init_vlc(void) +{ + static AVOnce init_static_once = AV_ONCE_INIT; + ff_thread_once(&init_static_once, h263_decode_init_vlc); } int ff_h263_decode_mba(MpegEncContext *s) diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index 655be5697d..432d3c418c 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -3672,7 +3672,8 @@ const AVCodec ff_mpeg4_decoder = { AV_CODEC_CAP_TRUNCATED | #endif AV_CODEC_CAP_DELAY | AV_CODEC_CAP_FRAME_THREADS, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | + FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | FF_CODEC_CAP_ALLOCATE_PROGRESS, .flush = ff_mpeg_flush, .max_lowres = 3, diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c index 4dfaa3460d..34f9dbf80a 100644 --- a/libavcodec/rv10.c +++ b/libavcodec/rv10.c @@ -690,6 +690,7 @@ const AVCodec ff_rv10_decoder = { .close = rv10_decode_end, .decode = rv10_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .max_lowres = 3, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, @@ -707,6 +708,7 @@ const AVCodec ff_rv20_decoder = { .close = rv10_decode_end, .decode = rv10_decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .flush = ff_mpeg_flush, .max_lowres = 3, .pix_fmts = (const enum AVPixelFormat[]) {