[FFmpeg-cvslog] threads: introduce CODEC_CAP_AUTO_THREADS and add it to libx264

Janne Grunau git at videolan.org
Mon Jan 2 03:25:13 CET 2012


ffmpeg | branch: master | Janne Grunau <janne-libav at jannau.net> | Sun Jan  1 14:21:50 2012 +0100| [b4d44a45f9aa43bd2e5bddde33e3b37802607b0a] | committer: Janne Grunau

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.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b4d44a45f9aa43bd2e5bddde33e3b37802607b0a
---

 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 4f24f72..b139a8a 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 c525808..9b34795 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 400abf4..54a0eb3 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 e6226cb..1317ef0 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, \



More information about the ffmpeg-cvslog mailing list