[FFmpeg-devel] [PATCH 2/3] avcodec: Add FF_CODEC_CAP_NOT_INIT_THREADSAFE
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Sun Jul 10 02:10:20 EEST 2022
This is in preparation of switching the default init-thread-safety
to a codec being init-thread-safe.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
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
More information about the ffmpeg-devel
mailing list