diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 4f24f729ac..b139a8a9ea 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -777,6 +777,10 @@ typedef struct RcOverride{ * Codec supports changed parameters at any point. */ #define CODEC_CAP_PARAM_CHANGE 0x4000 +/** + * Codec supports avctx->thread_count == 0 (auto). + */ +#define CODEC_CAP_AUTO_THREADS 0x8000 //The following defines may change, don't expect compatibility if you use them. #define MB_TYPE_INTRA4x4 0x0001 diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index c52580860b..9b347951fd 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -592,7 +592,7 @@ AVCodec ff_libx264_encoder = { .init = X264_init, .encode = X264_frame, .close = X264_close, - .capabilities = CODEC_CAP_DELAY, + .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS, .long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"), .priv_class = &class, .defaults = x264_defaults, diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c index 400abf4f6c..54a0eb3ab7 100644 --- a/libavcodec/pthread.c +++ b/libavcodec/pthread.c @@ -982,6 +982,9 @@ static void validate_thread_parameters(AVCodecContext *avctx) } else if (avctx->codec->capabilities & CODEC_CAP_SLICE_THREADS && avctx->thread_type & FF_THREAD_SLICE) { avctx->active_thread_type = FF_THREAD_SLICE; + } else if (!(avctx->codec->capabilities & CODEC_CAP_AUTO_THREADS)) { + avctx->thread_count = 1; + avctx->active_thread_type = 0; } } diff --git a/libavcodec/version.h b/libavcodec/version.h index e6226cb224..1317ef0ddc 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -22,7 +22,7 @@ #define LIBAVCODEC_VERSION_MAJOR 53 #define LIBAVCODEC_VERSION_MINOR 32 -#define LIBAVCODEC_VERSION_MICRO 1 +#define LIBAVCODEC_VERSION_MICRO 2 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \