From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id DA633433A5 for ; Sat, 9 Jul 2022 23:10:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6DBCB68B8A2; Sun, 10 Jul 2022 02:10:39 +0300 (EEST) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-oln040092072056.outbound.protection.outlook.com [40.92.72.56]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1E31568B840 for ; Sun, 10 Jul 2022 02:10:32 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GJVcrWje6IfCf5BF4lGNdVZXm9VUqT9ZDK62x0FQyrMgeNNpaOMPspgj/5h/xLR0LdAAps2ZEvVDp0AT5gVgEunev+oUt79VSB4PYWJ3Ne1QeHjzf2Xfp3ket/gG7lcXxi9+GnKe2hM+vVt3CeN+7+ORThrCYKr/dg6fJdNxMFLaCKI8mjz1vWOPyMwbOUCJPhmDbkEn29w/GAtQnsoPXc89hnFHfzYpWof0vReAke8Pzqtnmzjtx7ce4IO4IGBMXanbrHQmC0SZ/7n3qBSyEu8g85aLUv6TufAAfRDdupk7wbuidXKm4HU1yhNuDXyXYQUsBSG6jJ5C5lPBMYKWCQ== 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=yXACoMAd6iYPVQLo+ZpBYmCF5OT3l66lWCw2eakuCfQ=; b=EQowtOcvaHqa2lwgBskl08qULcLn3YLoD+/q07jKJNDsDVzeyKkK+s6J7HlGJUCXhZgR82gTjEGmi9W8fkeLPT3GMEOwoSz18nn+tvZkn4sswaWJOY1itLXfwGWVzIC1GsVwDUUNsBBchwo1GDFXKUGGPmDpGFgSy6DSjb6Y5o9k+WMmtDFVMpKP3CuVT8JR+TYXJxDZ2bK8cLoft4d3Tw1tbWghAWSeDq18yLI6WxfNytN/Uu71HmFmU7DTGapXJfe79ZQPVPzzE4db485mRqDkQIO8QTqUR0L/34CWfAeixaZ9DFz53FCJloaCxAV9U7QjR3bkXj+ELeSic0+2zQ== 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=yXACoMAd6iYPVQLo+ZpBYmCF5OT3l66lWCw2eakuCfQ=; b=cVyhSwVp+8Vz3UIqOY61mXyH0ThmHePJLe3RvNZ9V8cRIG+PeGZtV+7C29uk4zlu6oJGDsPrlu3Tio26fqIqt/d6KatoiDvsdQ3OU4Pf0maL3rioCAb+aUQHnw+hj58kNrbMA57cGgkIeuZKtECMv+Vq9nL67/oMzvRRhyzmB6uOUGTNsxLjVUC2PDvaZ6pCyVd6+prEoPw76k5sZunt3S4fHBsUGyBsyBse6XkMJEv7Rr8ZwODK4Uox/Ujwaurw71gWT+VmFQL73Mp7PrvJ29eh6cUNy+tMkjCj1obymiFKzxmYOKdyTN5TwKLY243gM8FyBGgN5ifEzEyYYVXWEQ== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DBBPR01MB7753.eurprd01.prod.exchangelabs.com (2603:10a6:10:1e5::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.15; Sat, 9 Jul 2022 23:10:29 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46%11]) with mapi id 15.20.5417.025; Sat, 9 Jul 2022 23:10:29 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 10 Jul 2022 01:10:20 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [USPKnV2NGGsrg1n1Vo9C4imD/xzfiPB5] X-ClientProxiedBy: FR0P281CA0130.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:97::17) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220709231021.2338914-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c46b33b5-470a-4786-0dd6-08da62003745 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEsvoOnQns0vxmpFm8LQGDyUgewAvKByExtjVuy3ezrcQwd69HTH4TiSsdR5UYXRWeO6taRUJHdAjbhQ6CzOLNNnXjVXS6Jh8lWDIsutHxrUno8kCJy8y4SPi9Fbg4l+EWa8DOHHTI/pmXKp4tRB/Cxx8pLPHRW2YX+fmIdtZJKBSI26ELaC/A17NulhtxBoQ/0/6Wfhs+47tKeVxbgaWwi8GDoLIzsw5ALRIzNs+V9a6SWekRRoXksN2nwkevxKo5Mar6cjzBrXrBhRXdzCRopyI/Fa5ePuluQYieNhRmMI5ngnhuCCKRrbbUpGxR33g+XaPA1OmvhqonhQ57J4zjFNnVMQaQx3L0YJl291EnsPGRmHN0SBdVdUbH0tf2qld5qFIBhDzheqUXPOOvQRbzpIgonR4eyzKKr9C809hoLBCPvXauKsG7tXkoUAMVrX7D41Qt3xmscFckGFRmdV/pG9KaBb8H/dd3Uuvhp7xAJOkIXwa61wQmcifgHyIqqGRARJE8JL21lNbJisiJxGnEDlRkdY7DTAd9hMit+BHvteWFT3Yogo+qLr7WZvhKuntd4LVlFrEN2q8vyqpAKMCX+3Nb0EkXTzh/CY5B1EB0xHpWlx02aNqeH32bRG2zlAx1nMh+7fmPYfUqodrSrZVtYLhMsbTuUJiqUjx8Nwdopg0RA3JL4p0vhOrWCdbUd9C8joDtDhP8ydmRQ2/83Z1kUSVnjFvPp0NB0wrayYKwyzH1HeofTxkXrm3rnt634xGj2YoHjSAEXWywNjkc+kuCbB X-MS-TrafficTypeDiagnostic: DBBPR01MB7753:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eyqHKhUIh5GeaGbmrToCiUpC+UUtEKWFWsjp2QdCnHkIRsk6OSYJmezdXwn2xH+jvWIabqmbIY/95HZpWNn24NLPtLkadlyl5DoJL02ldOyFfKUeMy23NoWTip1b8yeOf8tFM8RvxhEtBA4tJtWeNUqFUxEUZdtNoldcGux5Q5NYiZDPSRHF6bC55kOW1ITe2lfZWzl7HyShIAlSXLbukblZWQB9SX9CYxqh4vtOG0OW4pUh0PZDmLEo6Y8oM5DyCl2BwYYyA/SFS0DbuMuiWndPuFGk3saKAXbRPaDVki8cGowB4kEbeErgdq2JJa3wevDKaQpdjgUVWOR2JxHbmIlvG2oHbGyfCSvbWretR/CY7C4RWhrTRH4NBZQBBPRA1Aee+tzMJnYyzrc+prjnio8biOKQgSjLe9puTB8bYbHdETM7hzUMnExbOJXDoHErudQE7Y4+RiXTdNZmtEX65Q7Lzc/VykT5LSFDV8xf1o0xXrba2iFjVss3Qwp6gCgqo6pCIFIWRmSKTuq6BbtLDfl+gjuow+lpl6ri+Vpj9lv9GtImUnlmCcs6zA+xnrpjAm4DqCxFyscpMGS4Okpjk5VXipYEK69GHpguOWxJEcC+l6wRvlBZlt1G6r4Qb936LbcKb/10p9fVHgl0ycybWH69PvwagWh8hIAjfytMBLyaCGr24btA6b7kYG4stR/9nx5h4vT3ODdogYTtO3Q0tQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?elbhVABjIbs4Dav+g4cR5dNAt+UZVHQ/2OSF7wqXWLBqLeat1r163LwMuoYw?= =?us-ascii?Q?TXTnYc8pKCEpivNxn/jwX13RaREmn7a0LarGy9nddUyG/51nJawlNrCY3N53?= =?us-ascii?Q?MpcCN/+v0Nf3i5AUQKQSjDrWygsqU01CH0fVMoH7KmQCVAt/NBlffjaOYcwZ?= =?us-ascii?Q?EQ3vTaR65ImESjqXs6sPc7GBhKRfWLN2uhgGTOqDFuwaXwYbkueF3lLCv2Cc?= =?us-ascii?Q?yfRIRw7en/DAHPZnS5wBJobkYcBWqylwu/Ko5B6Sc80iAW7rxmxds4YP2kvh?= =?us-ascii?Q?RwtismrvEW79Ij3TX8QijiZIWvVwDa5gFuCwriJJVKWNTXCpqQQNS3Cz273G?= =?us-ascii?Q?1DX2UY3xe0/eOc2vvM3VxY7Cb1J1EXSN42Jl1yymxd5083+Tk689LLEEBjQ9?= =?us-ascii?Q?7JEKvx7MMFcgGGZGoVkuylm7jMEy2km4rt1IQ9KaSRo5nAIZG/ZkWzST3hQi?= =?us-ascii?Q?+Y7+M+s9agXa8kHmfMInkGTdwUtBMBqYCCQddzd7oERgHwsoxn0uPLDy/eO6?= =?us-ascii?Q?jKozId2o6Cu105k7Q/BNfZkU945TAY0M0w8ivpXLyCRqJe8WTUFXju7f5lfp?= =?us-ascii?Q?OSiCkfwdfgs8Y5swLzOlMI7quvANPaMt/h79FXZGHcxAH95GT+06dkTiOxBy?= =?us-ascii?Q?qAZPq5PqHZabJyXbL8s5dt7gasMLDfvzmI0mVKkgW81OF+HU4mgOkrX+1bVj?= =?us-ascii?Q?gSbAiXCmVe/BsK869U8bNYnR0+qr51dKV2ojsIcO0pdSZusdkPS2LSJ54xFt?= =?us-ascii?Q?uUaUHwakzAuZvKVAnAu/7TbX7HnYv8DWqSYt8zefOYYe6Tj6irepv9H7ItAR?= =?us-ascii?Q?y5i+PcBmYitIUTeXyJY4JsJwmEDBDBqFkZ5TinHOnfMT7d4H3EnRMoy0hMOj?= =?us-ascii?Q?AN1wliOSQmSPFHhKVEAvxsIJVE2Zci/jZTYpu3kDGT4P3EfW0lO/PDwMp7zg?= =?us-ascii?Q?uCu5V4oDGLYIB/sh8j9+KStVjygwszFaUMThJEEnM011KBG/GEgmPV6quUp+?= =?us-ascii?Q?1RRtcEBxUlINnDJZNi424K6hOVwmNmM95s2I/VdKdHz67ojmkmkrbvLXxwBc?= =?us-ascii?Q?irlZzoO4Hy+x7bKuU/Y71B6i3e51qVRwnpS7VxX0PGsDhqLF2U93mbao3jDG?= =?us-ascii?Q?s5mV5+z7fzAi3SRQlarLQo9mahqILURf5MH7rOB1Utp4f/HLInAH6lQHewNV?= =?us-ascii?Q?zFM3tcYx33fBv0ra+Bm2mt2Pwkylz2UPup86kvipsI1jc8gdeAyPl5vxZPqM?= =?us-ascii?Q?tErZcd3wXL6nEw5Meh0Y9hZ8HB4A8r5dlEe+SzEwHScz+S39OLKGHlO7CCUb?= =?us-ascii?Q?P7I=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c46b33b5-470a-4786-0dd6-08da62003745 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2022 23:10:29.8140 (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: DBBPR01MB7753 Subject: [FFmpeg-devel] [PATCH 2/3] avcodec: Add FF_CODEC_CAP_NOT_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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is in preparation of switching the default init-thread-safety to a codec being init-thread-safe. Signed-off-by: Andreas Rheinhardt --- libavcodec/amfenc_h264.c | 3 ++- libavcodec/amfenc_hevc.c | 3 ++- libavcodec/codec_internal.h | 7 +++++++ libavcodec/crystalhd.c | 3 ++- libavcodec/cuviddec.c | 3 ++- libavcodec/libaomdec.c | 3 ++- libavcodec/libaomenc.c | 3 ++- libavcodec/libaribb24.c | 1 + libavcodec/libcelt_dec.c | 1 + libavcodec/libcodec2.c | 2 ++ libavcodec/libdavs2.c | 3 ++- libavcodec/libfdk-aacenc.c | 1 + libavcodec/libgsmdec.c | 2 ++ libavcodec/libgsmenc.c | 2 ++ libavcodec/libilbc.c | 2 ++ libavcodec/libjxldec.c | 3 ++- libavcodec/libjxlenc.c | 3 ++- libavcodec/libmp3lame.c | 1 + libavcodec/libopencore-amr.c | 3 +++ libavcodec/libopenjpegdec.c | 1 + libavcodec/libopenjpegenc.c | 1 + libavcodec/libopusdec.c | 3 ++- libavcodec/libopusenc.c | 1 + libavcodec/librav1e.c | 3 ++- libavcodec/libshine.c | 1 + libavcodec/libspeexdec.c | 1 + libavcodec/libspeexenc.c | 1 + libavcodec/libsvtav1.c | 3 ++- libavcodec/libtheoraenc.c | 1 + libavcodec/libtwolame.c | 1 + libavcodec/libuavs3d.c | 3 ++- libavcodec/libvo-amrwbenc.c | 1 + libavcodec/libvorbisdec.c | 1 + libavcodec/libvorbisenc.c | 1 + libavcodec/libvpxdec.c | 6 ++++-- libavcodec/libvpxenc.c | 6 ++++-- libavcodec/libwebpenc.c | 1 + libavcodec/libwebpenc_animencoder.c | 1 + libavcodec/libx264.c | 7 ++++++- libavcodec/libx265.c | 3 ++- libavcodec/libxavs.c | 3 ++- libavcodec/libxavs2.c | 3 ++- libavcodec/libzvbi-teletextdec.c | 1 + libavcodec/mediacodecdec.c | 3 ++- libavcodec/mmaldec.c | 3 ++- libavcodec/nvenc_h264.c | 3 ++- libavcodec/nvenc_hevc.c | 3 ++- libavcodec/qsvdec.c | 1 + libavcodec/qsvenc_h264.c | 3 ++- libavcodec/qsvenc_hevc.c | 3 ++- libavcodec/qsvenc_jpeg.c | 1 + libavcodec/qsvenc_mpeg2.c | 3 ++- libavcodec/qsvenc_vp9.c | 3 ++- libavcodec/rkmppdec.c | 1 + libavcodec/v4l2_m2m_dec.c | 3 ++- libavcodec/v4l2_m2m_enc.c | 3 ++- libavcodec/vaapi_encode_h264.c | 3 ++- libavcodec/vaapi_encode_h265.c | 3 ++- libavcodec/vaapi_encode_mjpeg.c | 3 ++- libavcodec/vaapi_encode_mpeg2.c | 3 ++- libavcodec/vaapi_encode_vp8.c | 3 ++- libavcodec/vaapi_encode_vp9.c | 3 ++- 62 files changed, 117 insertions(+), 37 deletions(-) diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index efb04589f6..eba8c23cdd 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -391,7 +391,8 @@ const FFCodec ff_h264_amf_encoder = { .defaults = defaults, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_amf_pix_fmts, .p.wrapper_name = "amf", .hw_configs = ff_amfenc_hw_configs, diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index 8ab9330730..5aaaa83e39 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -323,7 +323,8 @@ const FFCodec ff_hevc_amf_encoder = { .defaults = defaults, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_amf_pix_fmts, .p.wrapper_name = "amf", .hw_configs = ff_amfenc_hw_configs, diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h index 5df286ce52..a90c19d61a 100644 --- a/libavcodec/codec_internal.h +++ b/libavcodec/codec_internal.h @@ -29,6 +29,13 @@ * allowing to call the init function without locking any global mutexes. */ #define FF_CODEC_CAP_INIT_THREADSAFE (1 << 0) +/** + * The codec is not known to be init-threadsafe (i.e. it might be unsafe + * to initialize this codec and another codec concurrently, typically because + * the codec calls external APIs that are not known to be thread-safe). + * Therefore calling the codec's init function needs to be guarded with a lock. + */ +#define FF_CODEC_CAP_NOT_INIT_THREADSAFE (1 << 9) /** * The codec allows calling the close function for deallocation even if * the init function returned a failure. Without this capability flag, a diff --git a/libavcodec/crystalhd.c b/libavcodec/crystalhd.c index cf74f22e7d..555b1d2b6b 100644 --- a/libavcodec/crystalhd.c +++ b/libavcodec/crystalhd.c @@ -787,7 +787,8 @@ static int crystalhd_receive_frame(AVCodecContext *avctx, AVFrame *frame) .flush = flush, \ .bsfs = bsf_name, \ .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, \ - .caps_internal = FF_CODEC_CAP_SETS_FRAME_PROPS, \ + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \ + FF_CODEC_CAP_SETS_FRAME_PROPS, \ .p.pix_fmts = (const enum AVPixelFormat[]){AV_PIX_FMT_YUYV422, AV_PIX_FMT_NONE}, \ .p.wrapper_name = "crystalhd", \ }; diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index b544b3361d..7dbd4c9ec1 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -1129,7 +1129,8 @@ static const AVCodecHWConfigInternal *const cuvid_hw_configs[] = { .flush = cuvid_flush, \ .bsfs = bsf_name, \ .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, \ - .caps_internal = FF_CODEC_CAP_SETS_FRAME_PROPS, \ + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \ + FF_CODEC_CAP_SETS_FRAME_PROPS, \ .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_CUDA, \ AV_PIX_FMT_NV12, \ AV_PIX_FMT_P010, \ diff --git a/libavcodec/libaomdec.c b/libavcodec/libaomdec.c index 52a8bf19e2..3243610304 100644 --- a/libavcodec/libaomdec.c +++ b/libavcodec/libaomdec.c @@ -258,7 +258,8 @@ const FFCodec ff_libaom_av1_decoder = { .close = aom_free, FF_CODEC_DECODE_CB(aom_decode), .p.capabilities = AV_CODEC_CAP_OTHER_THREADS | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .p.profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles), .p.wrapper_name = "libaom", }; diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c index 6b7e426bfd..b792226744 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -1442,7 +1442,8 @@ FFCodec ff_libaom_av1_encoder = { .init = av1_init, FF_CODEC_ENCODE_CB(aom_encode), .close = aom_free, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .defaults = defaults, .init_static_data = av1_init_static, }; diff --git a/libavcodec/libaribb24.c b/libavcodec/libaribb24.c index 9658e1d5ac..e89e49a771 100644 --- a/libavcodec/libaribb24.c +++ b/libavcodec/libaribb24.c @@ -388,6 +388,7 @@ const FFCodec ff_libaribb24_decoder = { .p.id = AV_CODEC_ID_ARIB_CAPTION, .p.priv_class = &aribb24_class, .p.wrapper_name = "libaribb24", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(Libaribb24Context), .init = libaribb24_init, .close = libaribb24_close, diff --git a/libavcodec/libcelt_dec.c b/libavcodec/libcelt_dec.c index d659d80ed2..a9c9962b71 100644 --- a/libavcodec/libcelt_dec.c +++ b/libavcodec/libcelt_dec.c @@ -134,6 +134,7 @@ const FFCodec ff_libcelt_decoder = { .p.id = AV_CODEC_ID_CELT, .p.capabilities = AV_CODEC_CAP_DR1, .p.wrapper_name = "libcelt", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(struct libcelt_context), .init = libcelt_dec_init, .close = libcelt_dec_close, diff --git a/libavcodec/libcodec2.c b/libavcodec/libcodec2.c index abb1130e80..0f2e671ab1 100644 --- a/libavcodec/libcodec2.c +++ b/libavcodec/libcodec2.c @@ -185,6 +185,7 @@ const FFCodec ff_libcodec2_decoder = { .p.supported_samplerates = (const int[]){ 8000, 0 }, .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .p.ch_layouts = (const AVChannelLayout[]) { AV_CHANNEL_LAYOUT_MONO, { 0 } }, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibCodec2Context), .init = libcodec2_init_decoder, .close = libcodec2_close, @@ -204,6 +205,7 @@ const FFCodec ff_libcodec2_encoder = { .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .p.ch_layouts = (const AVChannelLayout[]) { AV_CHANNEL_LAYOUT_MONO, { 0 } }, .p.priv_class = &libcodec2_enc_class, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibCodec2Context), .init = libcodec2_init_encoder, .close = libcodec2_close, diff --git a/libavcodec/libdavs2.c b/libavcodec/libdavs2.c index 918e48502c..ce4c6a34f0 100644 --- a/libavcodec/libdavs2.c +++ b/libavcodec/libdavs2.c @@ -232,7 +232,8 @@ const FFCodec ff_libdavs2_decoder = { FF_CODEC_DECODE_CB(davs2_decode_frame), .flush = davs2_flush, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.wrapper_name = "libdavs2", diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c index a5697bde51..2ffbc180ba 100644 --- a/libavcodec/libfdk-aacenc.c +++ b/libavcodec/libfdk-aacenc.c @@ -480,6 +480,7 @@ const FFCodec ff_libfdk_aac_encoder = { .p.long_name = NULL_IF_CONFIG_SMALL("Fraunhofer FDK AAC"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_AAC, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(AACContext), .init = aac_encode_init, FF_CODEC_ENCODE_CB(aac_encode_frame), diff --git a/libavcodec/libgsmdec.c b/libavcodec/libgsmdec.c index 9c2304f7a2..6e37122261 100644 --- a/libavcodec/libgsmdec.c +++ b/libavcodec/libgsmdec.c @@ -132,6 +132,7 @@ const FFCodec ff_libgsm_decoder = { .p.id = AV_CODEC_ID_GSM, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF, .p.wrapper_name = "libgsm", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibGSMDecodeContext), .init = libgsm_decode_init, .close = libgsm_decode_close, @@ -147,6 +148,7 @@ const FFCodec ff_libgsm_ms_decoder = { .p.id = AV_CODEC_ID_GSM_MS, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF, .p.wrapper_name = "libgsm", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibGSMDecodeContext), .init = libgsm_decode_init, .close = libgsm_decode_close, diff --git a/libavcodec/libgsmenc.c b/libavcodec/libgsmenc.c index a45b77be95..f83389dd60 100644 --- a/libavcodec/libgsmenc.c +++ b/libavcodec/libgsmenc.c @@ -134,6 +134,7 @@ const FFCodec ff_libgsm_encoder = { .p.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .p.wrapper_name = "libgsm", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, }; #endif #if CONFIG_LIBGSM_MS_ENCODER @@ -154,5 +155,6 @@ const FFCodec ff_libgsm_ms_encoder = { .p.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .p.wrapper_name = "libgsm", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, }; #endif diff --git a/libavcodec/libilbc.c b/libavcodec/libilbc.c index a7b1eaf28c..0b6b1fbb24 100644 --- a/libavcodec/libilbc.c +++ b/libavcodec/libilbc.c @@ -122,6 +122,7 @@ const FFCodec ff_libilbc_decoder = { .p.long_name = NULL_IF_CONFIG_SMALL("iLBC (Internet Low Bitrate Codec)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_ILBC, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(ILBCDecContext), .init = ilbc_decode_init, FF_CODEC_DECODE_CB(ilbc_decode_frame), @@ -204,6 +205,7 @@ const FFCodec ff_libilbc_encoder = { .p.long_name = NULL_IF_CONFIG_SMALL("iLBC (Internet Low Bitrate Codec)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_ILBC, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(ILBCEncContext), .init = ilbc_encode_init, FF_CODEC_ENCODE_CB(ilbc_encode_frame), diff --git a/libavcodec/libjxldec.c b/libavcodec/libjxldec.c index 829478bbde..b9322b082a 100644 --- a/libavcodec/libjxldec.c +++ b/libavcodec/libjxldec.c @@ -455,6 +455,7 @@ const FFCodec ff_libjxl_decoder = { FF_CODEC_DECODE_CB(libjxl_decode_frame), .close = libjxl_decode_close, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_OTHER_THREADS, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "libjxl", }; diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c index 6a948cc3ae..1119188adf 100644 --- a/libavcodec/libjxlenc.c +++ b/libavcodec/libjxlenc.c @@ -463,7 +463,8 @@ const FFCodec ff_libjxl_encoder = { FF_CODEC_ENCODE_CB(libjxl_encode_frame), .close = libjxl_encode_close, .p.capabilities = AV_CODEC_CAP_OTHER_THREADS, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_RGB24, AV_PIX_FMT_RGBA, AV_PIX_FMT_RGB48, AV_PIX_FMT_RGBA64, diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c index 02a256c766..2cd51692a2 100644 --- a/libavcodec/libmp3lame.c +++ b/libavcodec/libmp3lame.c @@ -335,6 +335,7 @@ const FFCodec ff_libmp3lame_encoder = { .p.id = AV_CODEC_ID_MP3, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SMALL_LAST_FRAME, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LAMEContext), .init = mp3lame_encode_init, FF_CODEC_ENCODE_CB(mp3lame_encode_frame), diff --git a/libavcodec/libopencore-amr.c b/libavcodec/libopencore-amr.c index 539f0ded3c..014dd53fa5 100644 --- a/libavcodec/libopencore-amr.c +++ b/libavcodec/libopencore-amr.c @@ -138,6 +138,7 @@ const FFCodec ff_libopencore_amrnb_decoder = { .p.long_name = NULL_IF_CONFIG_SMALL("OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_AMR_NB, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(AMRContext), .init = amr_nb_decode_init, .close = amr_nb_decode_close, @@ -293,6 +294,7 @@ const FFCodec ff_libopencore_amrnb_encoder = { .p.long_name = NULL_IF_CONFIG_SMALL("OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_AMR_NB, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(AMRContext), .init = amr_nb_encode_init, FF_CODEC_ENCODE_CB(amr_nb_encode_frame), @@ -379,6 +381,7 @@ const FFCodec ff_libopencore_amrwb_decoder = { .p.id = AV_CODEC_ID_AMR_WB, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF, .p.wrapper_name = "libopencore_amrwb", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(AMRWBContext), .init = amr_wb_decode_init, .close = amr_wb_decode_close, diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c index 58ac6c413a..fa420f145b 100644 --- a/libavcodec/libopenjpegdec.c +++ b/libavcodec/libopenjpegdec.c @@ -509,6 +509,7 @@ const FFCodec ff_libopenjpeg_decoder = { .p.max_lowres = 31, .p.priv_class = &openjpeg_class, .p.wrapper_name = "libopenjpeg", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibOpenJPEGContext), .init = libopenjpeg_decode_init, FF_CODEC_DECODE_CB(libopenjpeg_decode_frame), diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c index 06338e882c..750fce3d8d 100644 --- a/libavcodec/libopenjpegenc.c +++ b/libavcodec/libopenjpegenc.c @@ -759,6 +759,7 @@ const FFCodec ff_libopenjpeg_encoder = { .p.long_name = NULL_IF_CONFIG_SMALL("OpenJPEG JPEG 2000"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_JPEG2000, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibOpenJPEGContext), .init = libopenjpeg_encode_init, FF_CODEC_ENCODE_CB(libopenjpeg_encode_frame), diff --git a/libavcodec/libopusdec.c b/libavcodec/libopusdec.c index 316ab0f2a7..7b7d9c8a84 100644 --- a/libavcodec/libopusdec.c +++ b/libavcodec/libopusdec.c @@ -241,7 +241,8 @@ const FFCodec ff_libopus_decoder = { FF_CODEC_DECODE_CB(libopus_decode), .flush = libopus_flush, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, diff --git a/libavcodec/libopusenc.c b/libavcodec/libopusenc.c index c884075ffe..48dd32fc38 100644 --- a/libavcodec/libopusenc.c +++ b/libavcodec/libopusenc.c @@ -588,6 +588,7 @@ const FFCodec ff_libopus_encoder = { .p.long_name = NULL_IF_CONFIG_SMALL("libopus Opus"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_OPUS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibopusEncContext), .init = libopus_encode_init, FF_CODEC_ENCODE_CB(libopus_encode), diff --git a/libavcodec/librav1e.c b/libavcodec/librav1e.c index 9d811ba81c..67b301b802 100644 --- a/libavcodec/librav1e.c +++ b/libavcodec/librav1e.c @@ -628,6 +628,7 @@ const FFCodec ff_librav1e_encoder = { .p.pix_fmts = librav1e_pix_fmts, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS, .p.wrapper_name = "librav1e", }; diff --git a/libavcodec/libshine.c b/libavcodec/libshine.c index 9bc545689a..123b1a0847 100644 --- a/libavcodec/libshine.c +++ b/libavcodec/libshine.c @@ -137,6 +137,7 @@ const FFCodec ff_libshine_encoder = { .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_MP3, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(SHINEContext), .init = libshine_encode_init, FF_CODEC_ENCODE_CB(libshine_encode_frame), diff --git a/libavcodec/libspeexdec.c b/libavcodec/libspeexdec.c index 8c9e05e51d..daa6dec64a 100644 --- a/libavcodec/libspeexdec.c +++ b/libavcodec/libspeexdec.c @@ -197,6 +197,7 @@ const FFCodec ff_libspeex_decoder = { .p.id = AV_CODEC_ID_SPEEX, .p.capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF, .p.wrapper_name = "libspeex", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibSpeexContext), .init = libspeex_decode_init, .close = libspeex_decode_close, diff --git a/libavcodec/libspeexenc.c b/libavcodec/libspeexenc.c index ec4b3c6a8f..9eab8f8af0 100644 --- a/libavcodec/libspeexenc.c +++ b/libavcodec/libspeexenc.c @@ -353,6 +353,7 @@ const FFCodec ff_libspeex_encoder = { .p.long_name = NULL_IF_CONFIG_SMALL("libspeex Speex"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_SPEEX, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibSpeexEncContext), .init = encode_init, FF_CODEC_ENCODE_CB(encode_frame), diff --git a/libavcodec/libsvtav1.c b/libavcodec/libsvtav1.c index d9ebb6aa56..234c24ca7a 100644 --- a/libavcodec/libsvtav1.c +++ b/libavcodec/libsvtav1.c @@ -666,7 +666,8 @@ const FFCodec ff_libsvtav1_encoder = { FF_CODEC_RECEIVE_PACKET_CB(eb_receive_packet), .close = eb_enc_close, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_NONE }, diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c index 162d170b0f..22835553d6 100644 --- a/libavcodec/libtheoraenc.c +++ b/libavcodec/libtheoraenc.c @@ -374,6 +374,7 @@ const FFCodec ff_libtheora_encoder = { .p.id = AV_CODEC_ID_THEORA, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY /* for statsfile summary */, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(TheoraContext), .init = encode_init, .close = encode_close, diff --git a/libavcodec/libtwolame.c b/libavcodec/libtwolame.c index 1e53cf2257..98df38d013 100644 --- a/libavcodec/libtwolame.c +++ b/libavcodec/libtwolame.c @@ -214,6 +214,7 @@ const FFCodec ff_libtwolame_encoder = { .p.long_name = NULL_IF_CONFIG_SMALL("libtwolame MP2 (MPEG audio layer 2)"), .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_MP2, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(TWOLAMEContext), .init = twolame_encode_init, FF_CODEC_ENCODE_CB(twolame_encode_frame), diff --git a/libavcodec/libuavs3d.c b/libavcodec/libuavs3d.c index 7c6c3f0440..5ccd9893a5 100644 --- a/libavcodec/libuavs3d.c +++ b/libavcodec/libuavs3d.c @@ -256,7 +256,8 @@ const FFCodec ff_libuavs3d_decoder = { .close = libuavs3d_end, FF_CODEC_DECODE_CB(libuavs3d_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .flush = libuavs3d_flush, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P10LE, diff --git a/libavcodec/libvo-amrwbenc.c b/libavcodec/libvo-amrwbenc.c index 12ef6d7fe6..e58c980b5c 100644 --- a/libavcodec/libvo-amrwbenc.c +++ b/libavcodec/libvo-amrwbenc.c @@ -148,6 +148,7 @@ const FFCodec ff_libvo_amrwbenc_encoder = { .p.id = AV_CODEC_ID_AMR_WB, .p.priv_class = &amrwb_class, .p.wrapper_name = "libvo_amrwbenc", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(AMRWBContext), .init = amr_wb_encode_init, FF_CODEC_ENCODE_CB(amr_wb_encode_frame), diff --git a/libavcodec/libvorbisdec.c b/libavcodec/libvorbisdec.c index 81c4ac1c02..38a8314760 100644 --- a/libavcodec/libvorbisdec.c +++ b/libavcodec/libvorbisdec.c @@ -216,6 +216,7 @@ const FFCodec ff_libvorbis_decoder = { .p.type = AVMEDIA_TYPE_AUDIO, .p.id = AV_CODEC_ID_VORBIS, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_CHANNEL_CONF, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(OggVorbisDecContext), .init = oggvorbis_decode_init, FF_CODEC_DECODE_CB(oggvorbis_decode_frame), diff --git a/libavcodec/libvorbisenc.c b/libavcodec/libvorbisenc.c index 9460d3267c..3353776083 100644 --- a/libavcodec/libvorbisenc.c +++ b/libavcodec/libvorbisenc.c @@ -382,6 +382,7 @@ const FFCodec ff_libvorbis_encoder = { .p.id = AV_CODEC_ID_VORBIS, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SMALL_LAST_FRAME, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibvorbisEncContext), .init = libvorbis_encode_init, FF_CODEC_ENCODE_CB(libvorbis_encode_frame), diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c index 0b279e7eda..c5b95332d3 100644 --- a/libavcodec/libvpxdec.c +++ b/libavcodec/libvpxdec.c @@ -366,7 +366,8 @@ const FFCodec ff_libvpx_vp8_decoder = { .init = vp8_init, .close = vpx_free, FF_CODEC_DECODE_CB(vpx_decode), - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, }; #endif /* CONFIG_LIBVPX_VP8_DECODER */ @@ -389,7 +390,8 @@ FFCodec ff_libvpx_vp9_decoder = { .init = vp9_init, .close = vpx_free, FF_CODEC_DECODE_CB(vpx_decode), - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .init_static_data = ff_vp9_init_static, }; #endif /* CONFIG_LIBVPX_VP9_DECODER */ diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 187a9e9a36..5b7c7735a1 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -1951,7 +1951,8 @@ const FFCodec ff_libvpx_vp8_encoder = { .init = vp8_init, FF_CODEC_ENCODE_CB(vpx_encode), .close = vpx_free, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_NONE }, .p.priv_class = &class_vp8, .defaults = defaults, @@ -1986,7 +1987,8 @@ FFCodec ff_libvpx_vp9_encoder = { .init = vp9_init, FF_CODEC_ENCODE_CB(vpx_encode), .close = vpx_free, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .defaults = defaults, .init_static_data = ff_vp9_init_static, }; diff --git a/libavcodec/libwebpenc.c b/libavcodec/libwebpenc.c index c5dc1b160a..be7bfa3963 100644 --- a/libavcodec/libwebpenc.c +++ b/libavcodec/libwebpenc.c @@ -96,6 +96,7 @@ const FFCodec ff_libwebp_encoder = { .p.pix_fmts = ff_libwebpenc_pix_fmts, .p.priv_class = &ff_libwebpenc_class, .p.wrapper_name = "libwebp", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibWebPContext), .defaults = ff_libwebp_defaults, .init = libwebp_encode_init, diff --git a/libavcodec/libwebpenc_animencoder.c b/libavcodec/libwebpenc_animencoder.c index 765fcf70d2..43116c63c0 100644 --- a/libavcodec/libwebpenc_animencoder.c +++ b/libavcodec/libwebpenc_animencoder.c @@ -138,6 +138,7 @@ const FFCodec ff_libwebp_anim_encoder = { .p.pix_fmts = ff_libwebpenc_pix_fmts, .p.priv_class = &ff_libwebpenc_class, .p.wrapper_name = "libwebp", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(LibWebPAnimContext), .defaults = ff_libwebp_defaults, .init = libwebp_anim_encode_init, diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 98ec030865..17fd7ae3e1 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -1239,6 +1239,8 @@ FFCodec ff_libx264_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS #if X264_BUILD >= 158 | FF_CODEC_CAP_INIT_THREADSAFE +#else + | FF_CODEC_CAP_NOT_INIT_THREADSAFE #endif , }; @@ -1271,6 +1273,8 @@ const FFCodec ff_libx264rgb_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS #if X264_BUILD >= 158 | FF_CODEC_CAP_INIT_THREADSAFE +#else + | FF_CODEC_CAP_NOT_INIT_THREADSAFE #endif , }; @@ -1300,6 +1304,7 @@ const FFCodec ff_libx262_encoder = { FF_CODEC_ENCODE_CB(X264_frame), .close = X264_close, .defaults = x264_defaults, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS, }; #endif diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index f68ecb3092..6d2590dd7f 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -757,5 +757,6 @@ FFCodec ff_libx265_encoder = { .close = libx265_encode_close, .priv_data_size = sizeof(libx265Context), .defaults = x265_defaults, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, }; diff --git a/libavcodec/libxavs.c b/libavcodec/libxavs.c index a3efbcb4a1..2c7577535f 100644 --- a/libavcodec/libxavs.c +++ b/libavcodec/libxavs.c @@ -432,7 +432,8 @@ const FFCodec ff_libxavs_encoder = { .init = XAVS_init, FF_CODEC_ENCODE_CB(XAVS_frame), .close = XAVS_close, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.priv_class = &xavs_class, .defaults = xavs_defaults, diff --git a/libavcodec/libxavs2.c b/libavcodec/libxavs2.c index bf34b7acbb..d4a1bf5bfc 100644 --- a/libavcodec/libxavs2.c +++ b/libavcodec/libxavs2.c @@ -297,7 +297,8 @@ const FFCodec ff_libxavs2_encoder = { .init = xavs2_init, FF_CODEC_ENCODE_CB(xavs2_encode_frame), .close = xavs2_close, - .caps_internal = FF_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_AUTO_THREADS, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.priv_class = &libxavs2, diff --git a/libavcodec/libzvbi-teletextdec.c b/libavcodec/libzvbi-teletextdec.c index 514e76f1b6..c88ede05b5 100644 --- a/libavcodec/libzvbi-teletextdec.c +++ b/libavcodec/libzvbi-teletextdec.c @@ -819,6 +819,7 @@ const FFCodec ff_libzvbi_teletext_decoder = { .p.capabilities = AV_CODEC_CAP_DELAY, .p.priv_class = &teletext_class, .p.wrapper_name = "libzvbi", + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, .priv_data_size = sizeof(TeletextContext), .init = teletext_init_decoder, .close = teletext_close_decoder, diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index 6b4c39b4e0..0bf2a0595d 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -544,7 +544,8 @@ const FFCodec ff_ ## short_name ## _mediacodec_decoder = { .flush = mediacodec_decode_flush, \ .close = mediacodec_decode_close, \ .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, \ - .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, \ + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \ + FF_CODEC_CAP_SETS_PKT_DTS, \ .bsfs = bsf, \ .hw_configs = mediacodec_hw_configs, \ .p.wrapper_name = "mediacodec", \ diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c index 7fd24ad3b7..c9b7b16b69 100644 --- a/libavcodec/mmaldec.c +++ b/libavcodec/mmaldec.c @@ -841,7 +841,8 @@ static const AVClass ffmmal_dec_class = { .flush = ffmmal_flush, \ .p.priv_class = &ffmmal_dec_class, \ .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, \ - .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, \ + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \ + FF_CODEC_CAP_SETS_PKT_DTS, \ .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_MMAL, \ AV_PIX_FMT_YUV420P, \ AV_PIX_FMT_NONE}, \ diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index 1860c60a29..7fa6c23190 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -233,7 +233,8 @@ const FFCodec ff_h264_nvenc_encoder = { .defaults = defaults, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_nvenc_pix_fmts, .p.wrapper_name = "nvenc", .hw_configs = ff_nvenc_hw_configs, diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 2c64cce598..290bb1eb77 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -215,7 +215,8 @@ const FFCodec ff_hevc_nvenc_encoder = { .p.pix_fmts = ff_nvenc_pix_fmts, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "nvenc", .hw_configs = ff_nvenc_hw_configs, }; diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 5fc5bed4c8..d8283b9207 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -1025,6 +1025,7 @@ const FFCodec ff_##x##_qsv_decoder = { \ AV_PIX_FMT_NONE }, \ .hw_configs = qsv_hw_configs, \ .p.wrapper_name = "qsv", \ + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, \ }; \ #define DEFINE_QSV_DECODER(x, X, bsf_name) DEFINE_QSV_DECODER_WITH_OPTION(x, X, bsf_name, options) diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c index 87b09360cb..7756dc1789 100644 --- a/libavcodec/qsvenc_h264.c +++ b/libavcodec/qsvenc_h264.c @@ -200,7 +200,8 @@ const FFCodec ff_h264_qsv_encoder = { AV_PIX_FMT_NONE }, .p.priv_class = &class, .defaults = qsv_enc_defaults, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "qsv", .hw_configs = ff_qsv_enc_hw_configs, }; diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index f6027f600b..b09640365c 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -315,7 +315,8 @@ const FFCodec ff_hevc_qsv_encoder = { AV_PIX_FMT_NONE }, .p.priv_class = &class, .defaults = qsv_enc_defaults, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "qsv", .hw_configs = ff_qsv_enc_hw_configs, }; diff --git a/libavcodec/qsvenc_jpeg.c b/libavcodec/qsvenc_jpeg.c index 825eb8dc06..c5b6a406a5 100644 --- a/libavcodec/qsvenc_jpeg.c +++ b/libavcodec/qsvenc_jpeg.c @@ -96,4 +96,5 @@ const FFCodec ff_mjpeg_qsv_encoder = { .defaults = qsv_enc_defaults, .p.wrapper_name = "qsv", .hw_configs = ff_qsv_enc_hw_configs, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, }; diff --git a/libavcodec/qsvenc_mpeg2.c b/libavcodec/qsvenc_mpeg2.c index 5cb12a2582..7340ece9a9 100644 --- a/libavcodec/qsvenc_mpeg2.c +++ b/libavcodec/qsvenc_mpeg2.c @@ -108,7 +108,8 @@ const FFCodec ff_mpeg2_qsv_encoder = { AV_PIX_FMT_NONE }, .p.priv_class = &class, .defaults = qsv_enc_defaults, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "qsv", .hw_configs = ff_qsv_enc_hw_configs, }; diff --git a/libavcodec/qsvenc_vp9.c b/libavcodec/qsvenc_vp9.c index 4b2a6ce77f..3662df1823 100644 --- a/libavcodec/qsvenc_vp9.c +++ b/libavcodec/qsvenc_vp9.c @@ -118,7 +118,8 @@ const FFCodec ff_vp9_qsv_encoder = { AV_PIX_FMT_NONE }, .p.priv_class = &class, .defaults = qsv_enc_defaults, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "qsv", .hw_configs = ff_qsv_enc_hw_configs, }; diff --git a/libavcodec/rkmppdec.c b/libavcodec/rkmppdec.c index d4f09f456d..77d09739a5 100644 --- a/libavcodec/rkmppdec.c +++ b/libavcodec/rkmppdec.c @@ -578,6 +578,7 @@ static const AVCodecHWConfigInternal *const rkmpp_hw_configs[] = { .hw_configs = rkmpp_hw_configs, \ .bsfs = BSFS, \ .p.wrapper_name = "rkmpp", \ + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, \ }; RKMPP_DEC(h264, AV_CODEC_ID_H264, "h264_mp4toannexb") diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c index 8a51dec3fa..81729e256c 100644 --- a/libavcodec/v4l2_m2m_dec.c +++ b/libavcodec/v4l2_m2m_dec.c @@ -252,7 +252,8 @@ static const AVOption options[] = { .close = v4l2_decode_close, \ .bsfs = bsf_name, \ .p.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, \ - .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS | FF_CODEC_CAP_INIT_CLEANUP, \ + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \ + FF_CODEC_CAP_SETS_PKT_DTS | FF_CODEC_CAP_INIT_CLEANUP, \ .p.wrapper_name = "v4l2m2m", \ } diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c index 20f81df750..03425673ea 100644 --- a/libavcodec/v4l2_m2m_enc.c +++ b/libavcodec/v4l2_m2m_enc.c @@ -433,7 +433,8 @@ static const FFCodecDefault v4l2_m2m_defaults[] = { .close = v4l2_encode_close, \ .defaults = v4l2_m2m_defaults, \ .p.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY, \ - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, \ + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \ + FF_CODEC_CAP_INIT_CLEANUP, \ .p.wrapper_name = "v4l2m2m", \ } diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 7a6b54ab6f..f1f6694f3b 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -1337,7 +1337,8 @@ const FFCodec ff_h264_vaapi_encoder = { .p.priv_class = &vaapi_encode_h264_class, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_h264_defaults, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c index 456307d570..d5375add22 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -1456,7 +1456,8 @@ const FFCodec ff_hevc_vaapi_encoder = { .p.priv_class = &vaapi_encode_h265_class, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_h265_defaults, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, diff --git a/libavcodec/vaapi_encode_mjpeg.c b/libavcodec/vaapi_encode_mjpeg.c index 92960145ac..cf1497a440 100644 --- a/libavcodec/vaapi_encode_mjpeg.c +++ b/libavcodec/vaapi_encode_mjpeg.c @@ -575,7 +575,8 @@ const FFCodec ff_mjpeg_vaapi_encoder = { .close = &vaapi_encode_mjpeg_close, .p.priv_class = &vaapi_encode_mjpeg_class, .p.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_mjpeg_defaults, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, diff --git a/libavcodec/vaapi_encode_mpeg2.c b/libavcodec/vaapi_encode_mpeg2.c index 01d1b24908..f592043f37 100644 --- a/libavcodec/vaapi_encode_mpeg2.c +++ b/libavcodec/vaapi_encode_mpeg2.c @@ -699,7 +699,8 @@ const FFCodec ff_mpeg2_vaapi_encoder = { .p.priv_class = &vaapi_encode_mpeg2_class, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_mpeg2_defaults, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, diff --git a/libavcodec/vaapi_encode_vp8.c b/libavcodec/vaapi_encode_vp8.c index e1d7379501..1cb2446c88 100644 --- a/libavcodec/vaapi_encode_vp8.c +++ b/libavcodec/vaapi_encode_vp8.c @@ -254,7 +254,8 @@ const FFCodec ff_vp8_vaapi_encoder = { .p.priv_class = &vaapi_encode_vp8_class, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_vp8_defaults, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, diff --git a/libavcodec/vaapi_encode_vp9.c b/libavcodec/vaapi_encode_vp9.c index 52373543d3..892ad770c6 100644 --- a/libavcodec/vaapi_encode_vp9.c +++ b/libavcodec/vaapi_encode_vp9.c @@ -307,7 +307,8 @@ const FFCodec ff_vp9_vaapi_encoder = { .p.priv_class = &vaapi_encode_vp9_class, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | + FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_vp9_defaults, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".