From patchwork Tue Feb 7 16:36:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 2443 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp2347242vsb; Tue, 7 Feb 2017 08:42:46 -0800 (PST) X-Received: by 10.223.135.146 with SMTP id b18mr14666614wrb.189.1486485766048; Tue, 07 Feb 2017 08:42:46 -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 r72si5681313wrb.121.2017.02.07.08.42.43; Tue, 07 Feb 2017 08:42:46 -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=@gmail.com; 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=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5C2BD6899D3; Tue, 7 Feb 2017 18:42:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C3BE368995F for ; Tue, 7 Feb 2017 18:42:31 +0200 (EET) Received: by mail-wm0-f47.google.com with SMTP id 196so44217527wmm.1 for ; Tue, 07 Feb 2017 08:42:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=Z/UDiRYeYzIjLhWlZzyvtCKBHnhrbX8Fufnw+dDC4+k=; b=L5BFRulM1SyS88k47EXm5VIgs4hve3PuGYEUx6swJZXh/hBrEWkd16EMN4EleV+lEa W+ORB3pOsXS9tko1b94wo7FnKISYpOHZG2CtGjcG3e0BWYIr4X24sB+QqnRPGU74td8+ kKl2jypgTI/k2FDktmh2GvkxM+gXjJgD38Tio2DsSwCJYfDOcYRrkDozQFImBYWHsbU4 hvhHO9/tPYoShTPvIBgOD2otuMjyVSo0Ol7vAJoSqMRjxwEjFmux6rdYO1Ul5aImmLvP phdDzq8ZROZsy9wrx9ubkyxpRP9+jnzgH6UsMIT0a9sCRLl+I1ydvj/MnHCr4tXTkOYc Esgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=Z/UDiRYeYzIjLhWlZzyvtCKBHnhrbX8Fufnw+dDC4+k=; b=a8IRkGqvgAqHsZeWOxa5wXmpHc315Ntn4+EEbNURHAYtEQjov4jfDEgWmiEjevNBqV B9zfenR82c2At5bE0XUAncU9VXZNLJdtsuOhKHyWnmeuxioUrgmqBYTynoEXyrVdyEvE QYpHgVXdPfD9tC4PoNXalbpiQCf9eUS8Kv3UzEQeDHUZrCCg0UbjRj4Zi7qzLCPcYvHy u6fPMoou9KIre4uYSmxC12Wq6utXwSccDw7VuhXrLwGUIbS1lezQMFp23Vnb7KstQJfv 0EngNZVCD4R89c/VGMQQH0iNK4ZIDWRX1LEfuuApcxaZ/ZvgsT4VKc5+wZXwwu+UZwDy f0jg== X-Gm-Message-State: AMke39mqc1LnMtpAMrnFCUgDxTGUbFJW1BKZUrAZoDy4Aag3oeo7JEi9ZIv/K24IYs5BAA== X-Received: by 10.28.180.132 with SMTP id d126mr14270447wmf.123.1486485424956; Tue, 07 Feb 2017 08:37:04 -0800 (PST) Received: from vimeo-vm.localdomain ([82.129.103.206]) by smtp.googlemail.com with ESMTPSA id c133sm19569307wmd.13.2017.02.07.08.37.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Feb 2017 08:37:04 -0800 (PST) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Tue, 7 Feb 2017 16:36:38 +0000 Message-Id: <1486485398-16613-1-git-send-email-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 1.8.3.1 Subject: [FFmpeg-devel] [PATCH] avcodec: Mark some codecs with threadsafe init as such 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Derek Buitenhuis --- I wrote this in Nov 2015, and it has resided on my GitHub fork in a branch since then, since I never ot around to finishing it. I noticed a spike in interest in the 'feature', so I rebase and am forwarding this, in case it is of interest. During the triage I noted the following codecs need to be properly fixed: * cavs * asv * bink * ... more ... CC me in any reply you feel needs my direct response. --- libavcodec/aasc.c | 1 + libavcodec/aic.c | 1 + libavcodec/anm.c | 1 + libavcodec/ansi.c | 1 + libavcodec/aura.c | 1 + libavcodec/avrndec.c | 1 + libavcodec/avs.c | 1 + libavcodec/avuidec.c | 1 + libavcodec/bethsoftvideo.c | 1 + libavcodec/bfi.c | 1 + libavcodec/bmvvideo.c | 1 + libavcodec/c93.c | 1 + libavcodec/cllc.c | 1 + libavcodec/cyuv.c | 2 ++ libavcodec/fraps.c | 1 + libavcodec/lcldec.c | 2 ++ libavcodec/pngdec.c | 3 ++- libavcodec/r210dec.c | 3 +++ libavcodec/utvideodec.c | 1 + libavcodec/v408dec.c | 2 ++ libavcodec/vble.c | 1 + libavcodec/zerocodec.c | 1 + 22 files changed, 28 insertions(+), 1 deletion(-) diff --git a/libavcodec/aasc.c b/libavcodec/aasc.c index fd63aba..58cc3c8 100644 --- a/libavcodec/aasc.c +++ b/libavcodec/aasc.c @@ -159,4 +159,5 @@ AVCodec ff_aasc_decoder = { .close = aasc_decode_end, .decode = aasc_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/aic.c b/libavcodec/aic.c index ff8e392..4faa574 100644 --- a/libavcodec/aic.c +++ b/libavcodec/aic.c @@ -492,4 +492,5 @@ AVCodec ff_aic_decoder = { .decode = aic_decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, .init_thread_copy = ONLY_IF_THREADS_ENABLED(aic_decode_init), + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/anm.c b/libavcodec/anm.c index 29d59fb..7268418 100644 --- a/libavcodec/anm.c +++ b/libavcodec/anm.c @@ -199,4 +199,5 @@ AVCodec ff_anm_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/ansi.c b/libavcodec/ansi.c index 19c88d8..3c82dcd 100644 --- a/libavcodec/ansi.c +++ b/libavcodec/ansi.c @@ -482,4 +482,5 @@ AVCodec ff_ansi_decoder = { .close = decode_close, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/aura.c b/libavcodec/aura.c index 5f84d95..5ef9316 100644 --- a/libavcodec/aura.c +++ b/libavcodec/aura.c @@ -105,4 +105,5 @@ AVCodec ff_aura2_decoder = { .init = aura_decode_init, .decode = aura_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/avrndec.c b/libavcodec/avrndec.c index cdec99c..c37f996 100644 --- a/libavcodec/avrndec.c +++ b/libavcodec/avrndec.c @@ -170,4 +170,5 @@ AVCodec ff_avrn_decoder = { .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, .max_lowres = 3, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/avs.c b/libavcodec/avs.c index 345d628..66724d4 100644 --- a/libavcodec/avs.c +++ b/libavcodec/avs.c @@ -186,4 +186,5 @@ AVCodec ff_avs_decoder = { .decode = avs_decode_frame, .close = avs_decode_end, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/avuidec.c b/libavcodec/avuidec.c index 5117844..4cf620d 100644 --- a/libavcodec/avuidec.c +++ b/libavcodec/avuidec.c @@ -127,4 +127,5 @@ AVCodec ff_avui_decoder = { .init = avui_decode_init, .decode = avui_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/bethsoftvideo.c b/libavcodec/bethsoftvideo.c index 97b745d..274516b 100644 --- a/libavcodec/bethsoftvideo.c +++ b/libavcodec/bethsoftvideo.c @@ -163,4 +163,5 @@ AVCodec ff_bethsoftvid_decoder = { .close = bethsoftvid_decode_end, .decode = bethsoftvid_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/bfi.c b/libavcodec/bfi.c index 6727629..233a1d2 100644 --- a/libavcodec/bfi.c +++ b/libavcodec/bfi.c @@ -185,4 +185,5 @@ AVCodec ff_bfi_decoder = { .close = bfi_decode_close, .decode = bfi_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/bmvvideo.c b/libavcodec/bmvvideo.c index 97f850d..dbbc100 100644 --- a/libavcodec/bmvvideo.c +++ b/libavcodec/bmvvideo.c @@ -295,4 +295,5 @@ AVCodec ff_bmv_video_decoder = { .init = decode_init, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/c93.c b/libavcodec/c93.c index fd026ac..b708659 100644 --- a/libavcodec/c93.c +++ b/libavcodec/c93.c @@ -269,4 +269,5 @@ AVCodec ff_c93_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c index 1c6902a..80b0498 100644 --- a/libavcodec/cllc.c +++ b/libavcodec/cllc.c @@ -496,4 +496,5 @@ AVCodec ff_cllc_decoder = { .decode = cllc_decode_frame, .close = cllc_decode_close, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/cyuv.c b/libavcodec/cyuv.c index 8e6749b..f2b0a7c 100644 --- a/libavcodec/cyuv.c +++ b/libavcodec/cyuv.c @@ -185,6 +185,7 @@ AVCodec ff_aura_decoder = { .init = cyuv_decode_init, .decode = cyuv_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif @@ -198,5 +199,6 @@ AVCodec ff_cyuv_decoder = { .init = cyuv_decode_init, .decode = cyuv_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c index 5ca6aff..ed8cb18 100644 --- a/libavcodec/fraps.c +++ b/libavcodec/fraps.c @@ -350,4 +350,5 @@ AVCodec ff_fraps_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/lcldec.c b/libavcodec/lcldec.c index b1335e1..f5040c6 100644 --- a/libavcodec/lcldec.c +++ b/libavcodec/lcldec.c @@ -642,6 +642,7 @@ AVCodec ff_mszh_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif @@ -656,5 +657,6 @@ AVCodec ff_zlib_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index e87c2aa..601b8db 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -1525,6 +1525,7 @@ AVCodec ff_apng_decoder = { .init_thread_copy = ONLY_IF_THREADS_ENABLED(png_dec_init), .update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context), .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS /*| AV_CODEC_CAP_DRAW_HORIZ_BAND*/, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif @@ -1541,6 +1542,6 @@ AVCodec ff_png_decoder = { .init_thread_copy = ONLY_IF_THREADS_ENABLED(png_dec_init), .update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context), .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS /*| AV_CODEC_CAP_DRAW_HORIZ_BAND*/, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, + .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | FF_CODEC_CAP_INIT_THREADSAFE, }; #endif diff --git a/libavcodec/r210dec.c b/libavcodec/r210dec.c index 9c868cd..dbc94c7 100644 --- a/libavcodec/r210dec.c +++ b/libavcodec/r210dec.c @@ -104,6 +104,7 @@ AVCodec ff_r210_decoder = { .init = decode_init, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif #if CONFIG_R10K_DECODER @@ -115,6 +116,7 @@ AVCodec ff_r10k_decoder = { .init = decode_init, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif #if CONFIG_AVRP_DECODER @@ -126,5 +128,6 @@ AVCodec ff_avrp_decoder = { .init = decode_init, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c index 38de2c8..d6f4dd0 100644 --- a/libavcodec/utvideodec.c +++ b/libavcodec/utvideodec.c @@ -941,4 +941,5 @@ AVCodec ff_utvideo_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/v408dec.c b/libavcodec/v408dec.c index acff95d..196c575 100644 --- a/libavcodec/v408dec.c +++ b/libavcodec/v408dec.c @@ -88,6 +88,7 @@ AVCodec ff_ayuv_decoder = { .init = v408_decode_init, .decode = v408_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif #if CONFIG_V408_DECODER @@ -99,5 +100,6 @@ AVCodec ff_v408_decoder = { .init = v408_decode_init, .decode = v408_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; #endif diff --git a/libavcodec/vble.c b/libavcodec/vble.c index 4a07ab3..c25ee98 100644 --- a/libavcodec/vble.c +++ b/libavcodec/vble.c @@ -215,4 +215,5 @@ AVCodec ff_vble_decoder = { .decode = vble_decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, .init_thread_copy = ONLY_IF_THREADS_ENABLED(vble_decode_init), + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; diff --git a/libavcodec/zerocodec.c b/libavcodec/zerocodec.c index 55a9a91..e67eee4 100644 --- a/libavcodec/zerocodec.c +++ b/libavcodec/zerocodec.c @@ -149,4 +149,5 @@ AVCodec ff_zerocodec_decoder = { .decode = zerocodec_decode_frame, .close = zerocodec_decode_close, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, };