[FFmpeg-cvslog] In libx264 wrapper, detect default settings and use medium profile to avoid failure.

Baptiste Coudurier git at videolan.org
Thu Apr 21 18:02:48 CEST 2011


ffmpeg | branch: master | Baptiste Coudurier <baptiste.coudurier at gmail.com> | Thu Apr 21 09:01:31 2011 -0700| [20a160484f33e0d6b40ce905a89c5c6e8282704b] | committer: Baptiste Coudurier

In libx264 wrapper, detect default settings and use medium profile to avoid failure.

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

 libavcodec/libx264.c |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
index bd85e06..c1e60e6 100644
--- a/libavcodec/libx264.c
+++ b/libavcodec/libx264.c
@@ -165,6 +165,31 @@ static av_cold int X264_close(AVCodecContext *avctx)
     return 0;
 }
 
+/**
+ * Detect default settings and use default profile to avoid libx264 failure.
+ */
+static void check_default_settings(AVCodecContext *avctx)
+{
+    X264Context *x4 = avctx->priv_data;
+
+    int score = 0;
+    score += x4->params.analyse.i_me_range == 0;
+    score += x4->params.rc.i_qp_step == 3;
+    score += x4->params.i_keyint_max == 12;
+    score += x4->params.rc.i_qp_min == 2;
+    score += x4->params.rc.i_qp_max == 31;
+    score += x4->params.rc.f_qcompress == 0.5;
+    score += fabs(x4->params.rc.f_ip_factor - 1.25) < 0.01;
+    score += fabs(x4->params.rc.f_pb_factor - 1.25) < 0.01;
+    score += x4->params.analyse.inter == 0 && x4->params.analyse.i_subpel_refine == 8;
+    if (score >= 5) {
+        av_log(avctx, AV_LOG_ERROR, "Default settings detected, using medium profile\n");
+        x4->preset = "medium";
+        if (avctx->bit_rate == 200*100)
+            avctx->crf = 23;
+    }
+}
+
 #define OPT_STR(opt, param)                                             \
     do {                                                                \
         if (param && x264_param_parse(&x4->params, opt, param) < 0) {   \
@@ -274,6 +299,9 @@ static av_cold int X264_init(AVCodecContext *avctx)
     x4->params.rc.f_pb_factor             = avctx->b_quant_factor;
     x4->params.analyse.i_chroma_qp_offset = avctx->chromaoffset;
 
+    if (!x4->preset)
+        check_default_settings(avctx);
+
     if (x4->preset || x4->tune) {
         if (x264_param_default_preset(&x4->params, x4->preset, x4->tune) < 0)
             return -1;



More information about the ffmpeg-cvslog mailing list