[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
Mon Aug 4 13:37:35 CEST 2014
# HG changeset patch
# User Aarthi Thirumalai
# Date 1406899062 -19800
# Fri Aug 01 18:47:42 2014 +0530
# Node ID a9d11d4cf6cfbe64afe7308f95598d595ceada8b
# Parent 8edb2a5f3379a065cfe788e798f7eec0cd3ffd49
rc: add slow first pass as a cli. set turbo(faster) first pass as default in 2 pass.
diff -r 8edb2a5f3379 -r a9d11d4cf6cf doc/reST/cli.rst
--- a/doc/reST/cli.rst Mon Aug 04 01:07:48 2014 -0500
+++ b/doc/reST/cli.rst Fri Aug 01 18:47:42 2014 +0530
@@ -826,6 +826,25 @@
**Range of values:** -12 to 12
+.. option:: --pass <integer>
+
+ Enable multipass rate control mode. Input is encoded multiple times,
+ storing the encoded information of each pass in a stats file from which
+ the consecutive pass tunes the qp of each frame to improve the quality
+ of the output.Default 0(disabled)
+
+ 1. First pass, cretes stats file
+ 2. Last pass, does not overwrite stats file
+ 3. Nth pass, overwrites stats file
+
+ **Range of values:** 1 to 3
+
+.. option:: --slow-firstpass, --no-slow-firstpass
+
+ Enable a slow and more detailed first pass encode in Multipass rate control mode.
+ Speed of the first pass encode is slightly lesser and quality midly improved when
+ compared to the default settings in a multipass encode. Default disabled
+
Loop filters
============
diff -r 8edb2a5f3379 -r a9d11d4cf6cf source/CMakeLists.txt
--- a/source/CMakeLists.txt Mon Aug 04 01:07:48 2014 -0500
+++ 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 8edb2a5f3379 -r a9d11d4cf6cf source/common/param.cpp
--- a/source/common/param.cpp Mon Aug 04 01:07:48 2014 -0500
+++ 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,20 @@
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 8edb2a5f3379 -r a9d11d4cf6cf source/common/param.h
--- a/source/common/param.h Mon Aug 04 01:07:48 2014 -0500
+++ 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 8edb2a5f3379 -r a9d11d4cf6cf source/encoder/api.cpp
--- a/source/encoder/api.cpp Mon Aug 04 01:07:48 2014 -0500
+++ b/source/encoder/api.cpp Fri Aug 01 18:47:42 2014 +0530
@@ -55,6 +55,8 @@
Encoder *encoder = new Encoder;
if (encoder)
{
+ if (!param->rc.bEnableSlowFirstPass)
+ x265_param_apply_fastfirstpass(param);
// may change params for auto-detect, etc
encoder->configure(param);
diff -r 8edb2a5f3379 -r a9d11d4cf6cf source/x265.cpp
--- a/source/x265.cpp Mon Aug 04 01:07:48 2014 -0500
+++ b/source/x265.cpp Fri Aug 01 18:47:42 2014 +0530
@@ -198,6 +198,8 @@
{ "nr", required_argument, NULL, 0 },
{ "stats", required_argument, NULL, 0 },
{ "pass", required_argument, NULL, 0 },
+ { "slow-firstpass", no_argument, NULL,0 },
+ { "no-slow-firstpass", no_argument, NULL,0 },
{ 0, 0, 0, 0 }
};
@@ -426,6 +428,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 +722,6 @@
x265_log(NULL, X265_LOG_ERROR, "failed to open bitstream file <%s> for writing\n", bitstreamfn);
return true;
}
-
return false;
}
diff -r 8edb2a5f3379 -r a9d11d4cf6cf source/x265.h
--- a/source/x265.h Mon Aug 04 01:07:48 2014 -0500
+++ 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