From b4d44a45f9aa43bd2e5bddde33e3b37802607b0a Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Sun, 1 Jan 2012 14:21:50 +0100 Subject: [PATCH] threads: introduce CODEC_CAP_AUTO_THREADS and add it to libx264 Some external codecs have their own code to determine the best number of threads. This number is not necessary the number of cpu cores. Thread_count will be only 0 if the codec has CODEC_CAP_AUTO_THREADS. --- libavcodec/avcodec.h | 4 ++++ libavcodec/libx264.c | 2 +- libavcodec/pthread.c | 3 +++ libavcodec/version.h | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) 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, \