[x265] [PATCH 1 of 3] cli: add options to support complex-analysis
Pradeep Ramachandran
pradeep at multicorewareinc.com
Fri Jan 27 04:37:53 CET 2017
On Wed, Jan 25, 2017 at 6:55 PM, <bhavna at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Bhavna Hariharan <bhavna at multicorewareinc.com>
> # Date 1485245762 -19800
> # Tue Jan 24 13:46:02 2017 +0530
> # Node ID bdf2856cc3a1eafb9092bc52a2c2323b4fe92a95
> # Parent 3737c70c3308c980259d60410c4231c74e892d23
> cli: add options to support complex-analysis
>
> diff -r 3737c70c3308 -r bdf2856cc3a1 doc/reST/cli.rst
> --- a/doc/reST/cli.rst Fri Jan 20 16:44:03 2017 +0530
> +++ b/doc/reST/cli.rst Tue Jan 24 13:46:02 2017 +0530
> @@ -872,6 +872,7 @@
> .. option:: --limit-tu <0..4>
>
> Enables early exit from TU depth recursion, for inter coded blocks.
> +
> Level 1 - decides to recurse to next higher depth based on cost
> comparison of full size TU and split TU.
>
> @@ -943,6 +944,15 @@
> quad-tree begins at the same depth of the coded tree unit, but if
> the
> maximum TU size is smaller than the CU size then transform QT
> begins
> at the depth of the max-tu-size. Default: 32.
> +
> +.. option:: --complex-analysis <0..4>
> +
> + Increases the RD-level at points where the bitrate drops due to
> vbv.
> + The number of CUs for which the RD is reconfigured is determined
> based
> + on the strength. Strength 1 gives the best FPS, strength 4 gives
> the
> + best SSIM. Strength 0 switches this feature off. Default: 0.
> +
> + Effective for RD levels 4 and below.
>
> .. option:: --ssim-rd, --no-ssim-rd
>
> diff -r 3737c70c3308 -r bdf2856cc3a1 source/CMakeLists.txt
> --- a/source/CMakeLists.txt Fri Jan 20 16:44:03 2017 +0530
> +++ b/source/CMakeLists.txt Tue Jan 24 13:46:02 2017 +0530
> @@ -29,7 +29,7 @@
> option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF)
> mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)
> # X265_BUILD must be incremented each time the public API is changed
> -set(X265_BUILD 107)
> +set(X265_BUILD 108)
> configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
> "${PROJECT_BINARY_DIR}/x265.def")
> configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
> diff -r 3737c70c3308 -r bdf2856cc3a1 source/common/param.cpp
> --- a/source/common/param.cpp Fri Jan 20 16:44:03 2017 +0530
> +++ b/source/common/param.cpp Tue Jan 24 13:46:02 2017 +0530
> @@ -178,6 +178,7 @@
> param->bEnableTemporalMvp = 1;
> param->bSourceReferenceEstimation = 0;
> param->limitTU = 0;
> + param->complexAnalysis = 0;
>
> /* Loop Filter */
> param->bEnableLoopFilter = 1;
> @@ -929,6 +930,7 @@
> OPT("multi-pass-opt-analysis") p->analysisMultiPassRefine =
> atobool(value);
> OPT("multi-pass-opt-distortion") p->analysisMultiPassDistortion
> = atobool(value);
> OPT("aq-motion") p->bAQMotion = atobool(value);
> + OPT("complex-analysis") p->complexAnalysis = atof(value);
> OPT("ssim-rd")
> {
> int bval = atobool(value);
> @@ -1167,6 +1169,8 @@
> "RD Level is out of range");
> CHECK(param->rdoqLevel < 0 || param->rdoqLevel > 2,
> "RDOQ Level is out of range");
> + CHECK(param->complexAnalysis < 0 || param->complexAnalysis > 4,
> + "Complex analysis strength must be between 0 and 4");
> CHECK(param->bframes && param->bframes >= param->lookaheadDepth &&
> !param->rc.bStatRead,
> "Lookahead depth must be greater than the max consecutive
> bframe count");
> CHECK(param->bframes < 0,
> @@ -1412,6 +1416,7 @@
> TOOLOPT(param->bEnableAMP, "amp");
> TOOLOPT(param->limitModes, "limit-modes");
> TOOLVAL(param->rdLevel, "rd=%d");
> + TOOLVAL(param->complexAnalysis, "complex-analysis=%.2f");
> TOOLVAL(param->psyRd, "psy-rd=%.2lf");
> TOOLVAL(param->rdoqLevel, "rdoq=%d");
> TOOLVAL(param->psyRdoq, "psy-rdoq=%.2lf");
> @@ -1511,6 +1516,7 @@
> s += sprintf(s, " tu-intra-depth=%d", p->tuQTMaxIntraDepth);
> s += sprintf(s, " limit-tu=%d", p->limitTU);
> s += sprintf(s, " rdoq-level=%d", p->rdoqLevel);
> + s += sprintf(s, " complex-analysis=%.2f", p->complexAnalysis);
> BOOL(p->bEnableSignHiding, "signhide");
> BOOL(p->bEnableTransformSkip, "tskip");
> s += sprintf(s, " nr-intra=%d", p->noiseReductionIntra);
> diff -r 3737c70c3308 -r bdf2856cc3a1 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Fri Jan 20 16:44:03 2017 +0530
> +++ b/source/encoder/encoder.cpp Tue Jan 24 13:46:02 2017 +0530
> @@ -2157,6 +2157,12 @@
> else
> m_param->rc.qgSize = p->maxCUSize;
>
> + if (m_param->complexAnalysis && (!bIsVbv || !p->rc.aqMode ||
> p->rdLevel > 4))
> + {
> + p->complexAnalysis = 0;
> + x265_log(p, X265_LOG_WARNING, "Complex-analysis disabled,
> requires RD > 4, VBV and aq-mode enabled\n");
>
Doesn't complex-analysis require rd level <=4 to work? Your message seems
incorrect.
> + }
> +
> if (p->uhdBluray)
> {
> p->bEnableAccessUnitDelimiters = 1;
> diff -r 3737c70c3308 -r bdf2856cc3a1 source/encoder/ratecontrol.cpp
> --- a/source/encoder/ratecontrol.cpp Fri Jan 20 16:44:03 2017 +0530
> +++ b/source/encoder/ratecontrol.cpp Tue Jan 24 13:46:02 2017 +0530
> @@ -228,6 +228,11 @@
> x265_log(m_param, X265_LOG_WARNING, "VBV is incompatible with
> constant QP, ignored.\n");
> m_param->rc.vbvBufferSize = 0;
> m_param->rc.vbvMaxBitrate = 0;
> + if (m_param->complexAnalysis)
> + {
> + x265_log(m_param, X265_LOG_WARNING, "Complex analysis
> requires VBV, complex analysis disabled.\n");
> + m_param->complexAnalysis = 0;
> + }
> }
> else if (m_param->rc.vbvMaxBitrate == 0)
> {
> diff -r 3737c70c3308 -r bdf2856cc3a1 source/x265.h
> --- a/source/x265.h Fri Jan 20 16:44:03 2017 +0530
> +++ b/source/x265.h Tue Jan 24 13:46:02 2017 +0530
> @@ -856,6 +856,9 @@
> * RDOQ is at level 2. Default: 0 */
> int rdoqLevel;
>
> + /* Increase RD at points where bitrate drops due to vbv. Default 0 */
> + double complexAnalysis;
> +
>
Always add new parameters to the end of x265_param_t to ensure backwards
compatibility with existing API.
> /* Enable the implicit signaling of the sign bit of the last
> coefficient of
> * each transform unit. This saves one bit per TU at the expense of
> figuring
> * out which coefficient can be toggled with the least distortion.
> diff -r 3737c70c3308 -r bdf2856cc3a1 source/x265cli.h
> --- a/source/x265cli.h Fri Jan 20 16:44:03 2017 +0530
> +++ b/source/x265cli.h Tue Jan 24 13:46:02 2017 +0530
> @@ -166,6 +166,7 @@
> { "rd", required_argument, NULL, 0 },
> { "rdoq-level", required_argument, NULL, 0 },
> { "no-rdoq-level", no_argument, NULL, 0 },
> + { "complex-analysis", required_argument, NULL, 0 },
> { "psy-rd", required_argument, NULL, 0 },
> { "psy-rdoq", required_argument, NULL, 0 },
> { "no-psy-rd", no_argument, NULL, 0 },
> @@ -344,6 +345,7 @@
> H0(" --[no-]psy-rd <0..5.0> Strength of psycho-visual rate
> distortion optimization, 0 to disable. Default %.1f\n", param->psyRd);
> H0(" --[no-]rdoq-level <0|1|2> Level of RDO in quantization
> 0:none, 1:levels, 2:levels & coding groups. Default %d\n",
> param->rdoqLevel);
> H0(" --[no-]psy-rdoq <0..50.0> Strength of psycho-visual
> optimization in RDO quantization, 0 to disable. Default %.1f\n",
> param->psyRdoq);
> + H0(" --complex-analysis <0..4.0> Strength of complex analysis, 0
> to disable. Default %.1f\n", param->complexAnalysis);
> H0(" --[no-]ssim-rd Enable ssim rate distortion
> optimization, 0 to disable. Default %s\n", OPT(param->bSsimRd));
> H0(" --[no-]rd-refine Enable QP based RD refinement
> for rd levels 5 and 6. Default %s\n", OPT(param->bEnableRdRefine));
> H0(" --[no-]early-skip Enable early SKIP detection.
> Default %s\n", OPT(param->bEnableEarlySkip));
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20170127/988f8385/attachment.html>
More information about the x265-devel
mailing list