[x265] [PATCH] rc: add slow first pass as a cli. set turbo(faster) first pass as default in 2 pass

aarthi at multicorewareinc.com aarthi at multicorewareinc.com
Fri Aug 1 15:25:25 CEST 2014


# HG changeset patch
# User Aarthi Thirumalai
# Date 1406899062 -19800
#      Fri Aug 01 18:47:42 2014 +0530
# Node ID fc35093c609f35efab5f62cad43e5567a6127735
# Parent  1e6f57c1d2fae37f1bbb813c0a01091195117e98
rc: add slow first pass as a cli. set turbo(faster) first pass as default in 2 pass.

diff -r 1e6f57c1d2fa -r fc35093c609f source/CMakeLists.txt
--- a/source/CMakeLists.txt	Fri Aug 01 18:45:57 2014 +0530
+++ b/source/CMakeLists.txt	Fri Aug 01 18:47:42 2014 +0530
@@ -19,7 +19,7 @@
 include(CheckCXXCompilerFlag)
 
 # X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 29)
+set(X265_BUILD 30)
 configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
                "${PROJECT_BINARY_DIR}/x265.def")
 configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff -r 1e6f57c1d2fa -r fc35093c609f source/common/param.cpp
--- a/source/common/param.cpp	Fri Aug 01 18:45:57 2014 +0530
+++ b/source/common/param.cpp	Fri Aug 01 18:47:42 2014 +0530
@@ -191,6 +191,7 @@
     param->rc.statFileName = NULL;
     param->rc.complexityBlur = 20;
     param->rc.qblur = 0.5;
+    param->rc.bEnableSlowFirstPass = 0;
 
     /* Quality Measurement Metrics */
     param->bEnablePsnr = 0;
@@ -351,6 +352,7 @@
             param->searchMethod = X265_STAR_SEARCH;
             param->bEnableTransformSkip = 1;
             param->maxNumReferences = 5;
+            param->rc.bEnableSlowFirstPass = 1;
             // TODO: optimized esa
         }
         else
@@ -640,6 +642,7 @@
     OPT("input-csp") p->internalCsp = parseName(value, x265_source_csp_names, bError);
     OPT("me")        p->searchMethod = parseName(value, x265_motion_est_names, bError);
     OPT("cutree")    p->rc.cuTree = atobool(value);
+    OPT("slow-firstpass") p->rc.bEnableSlowFirstPass = atobool(value);
     OPT("sar")
     {
         p->vui.aspectRatioIdc = parseName(value, x265_sar_names, bError);
@@ -1020,6 +1023,21 @@
     return check_failed;
 }
 
+void x265_param_apply_fastfirstpass(x265_param* param)
+{
+    /* Set faster options in case of turbo firstpass. */
+    if (param->rc.bStatWrite && !param->rc.bStatRead)
+    {
+        param->maxNumReferences = 1;
+        param-> bEnableRectInter = 0;
+        param->bEnableAMP = 0;
+        param->searchMethod = X265_DIA_SEARCH;
+        param->subpelRefine = X265_MIN(2, param->subpelRefine);
+        param->bEnableEarlySkip = 1;
+    }
+
+}
+
 int x265_set_globals(x265_param *param)
 {
     uint32_t maxCUDepth = (uint32_t)g_convertToBit[param->maxCUSize];
diff -r 1e6f57c1d2fa -r fc35093c609f source/common/param.h
--- a/source/common/param.h	Fri Aug 01 18:45:57 2014 +0530
+++ b/source/common/param.h	Fri Aug 01 18:47:42 2014 +0530
@@ -34,6 +34,7 @@
 void  setParamAspectRatio(x265_param *p, int width, int height);
 void  getParamAspectRatio(x265_param *p, int& width, int& height);
 bool  parseLambdaFile(x265_param *param);
+void x265_param_apply_fastfirstpass(x265_param *p);
 
 /* this table is kept internal to avoid confusion, since log level indices start at -1 */
 static const char * const logLevelNames[] = { "none", "error", "warning", "info", "debug", "full", 0 };
diff -r 1e6f57c1d2fa -r fc35093c609f source/x265.cpp
--- a/source/x265.cpp	Fri Aug 01 18:45:57 2014 +0530
+++ b/source/x265.cpp	Fri Aug 01 18:47:42 2014 +0530
@@ -198,6 +198,7 @@
     { "nr",             required_argument, NULL, 0 },
     { "stats",          required_argument, NULL, 0 },
     { "pass",           required_argument, NULL, 0 },
+    { "slow-firstpass", no_argument, NULL,0 },
     { 0, 0, 0, 0 }
 };
 
@@ -426,6 +427,7 @@
        "                                   - 1 : First pass, cretes stats file\n"
        "                                   - 2 : Last pass, does not overwrite stats file\n"
        "                                   - 3 : Nth pass, overwrites stats file\n");
+    H0("   --[no-]slow-firstpass         Enable a slow first pass in a multipass rate control mode. Default %s\n", OPT(param->rc.bEnableSlowFirstPass));
     H0("   --scaling-list <string>       Specify a file containing HM style quant scaling lists or 'default' or 'off'. Default: off\n");
     H0("   --lambda-file <string>        Specify a file containing replacement values for the lambda tables\n");
     H0("                                 MAX_MAX_QP+1 floats for lambda table, then again for lambda2 table\n");
@@ -719,7 +721,8 @@
         x265_log(NULL, X265_LOG_ERROR, "failed to open bitstream file <%s> for writing\n", bitstreamfn);
         return true;
     }
-
+    if (!param->rc.bEnableSlowFirstPass)
+        x265_param_apply_fastfirstpass(param);
     return false;
 }
 
diff -r 1e6f57c1d2fa -r fc35093c609f source/x265.h
--- a/source/x265.h	Fri Aug 01 18:45:57 2014 +0530
+++ b/source/x265.h	Fri Aug 01 18:47:42 2014 +0530
@@ -798,6 +798,9 @@
         /* temporally blur complexity */
         double    complexityBlur;
 
+        /* Enable slow and a more detailed first pass encode in  multi pass rate control */
+        int       bEnableSlowFirstPass;
+
         /* specify a text file which contains MAX_MAX_QP + 1 floating point
          * values to be copied into x265_lambda_tab and a second set of
          * MAX_MAX_QP + 1 floating point values for x265_lambda2_tab. All values


More information about the x265-devel mailing list