Signed-off-by: Derek Buitenhuis <derek.buitenh...@gmail.com> --- 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, }; -- 1.8.3.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel