<div dir="ltr">Documentation, build version updates...</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 23, 2016 at 10:03 AM, <span dir="ltr"><<a href="mailto:santhoshini@multicorewareinc.com" target="_blank">santhoshini@multicorewareinc.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Santhoshini Sekar<<a href="mailto:santhoshini@multicorewareinc.com">santhoshini@multicorewareinc.com</a>><br>
# Date 1466656132 -19800<br>
# Thu Jun 23 09:58:52 2016 +0530<br>
# Node ID 20e1abc4b08ca2d2da24c340728e3db96d2806f8<br>
# Parent 626fcbac7ffba723dabd3a9f0507c4c80f3e7bc9<br>
introduce multi-level recursion skip<br>
<br>
diff -r 626fcbac7ffb -r 20e1abc4b08c source/common/param.cpp<br>
--- a/source/common/param.cpp Thu Jun 16 12:57:38 2016 +0530<br>
+++ b/source/common/param.cpp Thu Jun 23 09:58:52 2016 +0530<br>
@@ -164,7 +164,7 @@<br>
param->bEnableWeightedPred = 1;<br>
param->bEnableWeightedBiPred = 0;<br>
param->bEnableEarlySkip = 0;<br>
- param->bEnableRecursionSkip = 1;<br>
+ param->bEnableRecursionSkip = 2;<br>
param->bEnableAMP = 0;<br>
param->bEnableRectInter = 0;<br>
param->rdLevel = 3;<br>
@@ -368,6 +368,7 @@<br>
param->maxNumMergeCand = 3;<br>
param->searchMethod = X265_STAR_SEARCH;<br>
param->maxNumReferences = 4;<br>
+ param->bEnableRecursionSkip = 1;<br>
param->limitReferences = 2;<br>
param->limitModes = 1;<br>
param->bIntraInBFrames = 1;<br>
@@ -389,7 +390,7 @@<br>
param->maxNumMergeCand = 4;<br>
param->searchMethod = X265_STAR_SEARCH;<br>
param->maxNumReferences = 5;<br>
- param->bEnableRecursionSkip = 0;<br>
+ param->bEnableRecursionSkip = 1;<br>
param->limitReferences = 1;<br>
param->limitModes = 1;<br>
param->bIntraInBFrames = 1;<br>
@@ -412,7 +413,7 @@<br>
param->maxNumMergeCand = 5;<br>
param->searchMethod = X265_STAR_SEARCH;<br>
param->bEnableTransformSkip = 1;<br>
- param->bEnableRecursionSkip = 0;<br>
+ param->bEnableRecursionSkip = 1;<br>
param->maxNumReferences = 5;<br>
param->limitReferences = 0;<br>
param->bIntraInBFrames = 1;<br>
@@ -620,7 +621,7 @@<br>
OPT("max-merge") p->maxNumMergeCand = (uint32_t)atoi(value);<br>
OPT("temporal-mvp") p->bEnableTemporalMvp = atobool(value);<br>
OPT("early-skip") p->bEnableEarlySkip = atobool(value);<br>
- OPT("recursion-skip") p->bEnableRecursionSkip = atobool(value);<br>
+ OPT("rskip") p->bEnableRecursionSkip = atoi(value);<br>
OPT("rdpenalty") p->rdPenalty = atoi(value);<br>
OPT("tskip") p->bEnableTransformSkip = atobool(value);<br>
OPT("no-tskip-fast") p->bEnableTSkipFast = atobool(value);<br>
@@ -1109,6 +1110,8 @@<br>
"RD Level is out of range");<br>
CHECK(param->rdoqLevel < 0 || param->rdoqLevel > 2,<br>
"RDOQ Level is out of range");<br>
+ CHECK(param->bEnableRecursionSkip < 0 || param->bEnableRecursionSkip > 2,<br>
+ "rskip is out of range");<br>
CHECK(param->bframes && param->bframes >= param->lookaheadDepth && !param->rc.bStatRead,<br>
"Lookahead depth must be greater than the max consecutive bframe count");<br>
CHECK(param->bframes < 0,<br>
@@ -1351,7 +1354,7 @@<br>
TOOLVAL(param->psyRdoq, "psy-rdoq=%.2lf");<br>
TOOLOPT(param->bEnableRdRefine, "rd-refine");<br>
TOOLOPT(param->bEnableEarlySkip, "early-skip");<br>
- TOOLOPT(param->bEnableRecursionSkip, "recursion-skip");<br>
+ TOOLVAL(param->bEnableRecursionSkip, "rskip=%d");<br>
TOOLVAL(param->noiseReductionIntra, "nr-intra=%d");<br>
TOOLVAL(param->noiseReductionInter, "nr-inter=%d");<br>
TOOLOPT(param->bEnableTSkipFast, "tskip-fast");<br>
@@ -1410,7 +1413,7 @@<br>
s += sprintf(s, " max-merge=%d", p->maxNumMergeCand);<br>
BOOL(p->bEnableTemporalMvp, "temporal-mvp");<br>
BOOL(p->bEnableEarlySkip, "early-skip");<br>
- BOOL(p->bEnableRecursionSkip, "recursion-skip");<br>
+ s += sprintf(s, "rskip=%d", p->bEnableRecursionSkip);<br>
s += sprintf(s, " rdpenalty=%d", p->rdPenalty);<br>
BOOL(p->bEnableTransformSkip, "tskip");<br>
BOOL(p->bEnableTSkipFast, "tskip-fast");<br>
diff -r 626fcbac7ffb -r 20e1abc4b08c source/encoder/analysis.cpp<br>
--- a/source/encoder/analysis.cpp Thu Jun 16 12:57:38 2016 +0530<br>
+++ b/source/encoder/analysis.cpp Thu Jun 23 09:58:52 2016 +0530<br>
@@ -949,7 +949,7 @@<br>
skipRecursion = md.bestMode->cu.isSkipped(0);<br>
if (mightSplit && depth >= minDepth && !skipRecursion)<br>
{<br>
- if (depth)<br>
+ if (depth && m_param->bEnableRecursionSkip == 2)<br>
skipRecursion = recursionDepthCheck(parentCTU, cuGeom, *md.bestMode);<br>
if (m_bHD && !skipRecursion && m_param->rdLevel == 2 && md.fencYuv.m_size != MAX_CU_SIZE)<br>
skipRecursion = complexityCheckCU(*md.bestMode);<br>
@@ -1448,14 +1448,22 @@<br>
splitData[2].initSplitCUData();<br>
splitData[3].initSplitCUData();<br>
<br>
+ uint32_t allSplitRefs = splitData[0].splitRefs | splitData[1].splitRefs | splitData[2].splitRefs | splitData[3].splitRefs;<br>
+ uint32_t refMasks[2];<br>
/* Step 1. Evaluate Merge/Skip candidates for likely early-outs */<br>
if (mightNotSplit && !md.bestMode)<br>
{<br>
md.pred[PRED_SKIP].cu.initSubCU(parentCTU, cuGeom, qp);<br>
md.pred[PRED_MERGE].cu.initSubCU(parentCTU, cuGeom, qp);<br>
checkMerge2Nx2N_rd5_6(md.pred[PRED_SKIP], md.pred[PRED_MERGE], cuGeom);<br>
- skipRecursion = m_param->bEnableRecursionSkip && md.bestMode && !md.bestMode->cu.getQtRootCbf(0);<br>
skipModes = m_param->bEnableEarlySkip && md.bestMode && !md.bestMode->cu.getQtRootCbf(0);<br>
+ refMasks[0] = allSplitRefs;<br>
+ md.pred[PRED_2Nx2N].cu.initSubCU(parentCTU, cuGeom, qp);<br>
+ checkInter_rd5_6(md.pred[PRED_2Nx2N], cuGeom, SIZE_2Nx2N, refMasks);<br>
+ checkBestMode(md.pred[PRED_2Nx2N], cuGeom.depth);<br>
+<br>
+ if (m_param->bEnableRecursionSkip == 1 && depth && m_modeDepth[depth - 1].bestMode)<br>
+ skipRecursion = md.bestMode && !md.bestMode->cu.getQtRootCbf(0);<br>
}<br>
<br>
// estimate split cost<br>
@@ -1511,7 +1519,7 @@<br>
/* Split CUs<br>
* 0 1<br>
* 2 3 */<br>
- uint32_t allSplitRefs = splitData[0].splitRefs | splitData[1].splitRefs | splitData[2].splitRefs | splitData[3].splitRefs;<br>
+ allSplitRefs = splitData[0].splitRefs | splitData[1].splitRefs | splitData[2].splitRefs | splitData[3].splitRefs;<br>
/* Step 3. Evaluate ME (2Nx2N, rect, amp) and intra modes at current depth */<br>
if (mightNotSplit)<br>
{<br>
@@ -1522,9 +1530,6 @@<br>
{<br>
uint32_t refMasks[2];<br>
refMasks[0] = allSplitRefs;<br>
- md.pred[PRED_2Nx2N].cu.initSubCU(parentCTU, cuGeom, qp);<br>
- checkInter_rd5_6(md.pred[PRED_2Nx2N], cuGeom, SIZE_2Nx2N, refMasks);<br>
- checkBestMode(md.pred[PRED_2Nx2N], cuGeom.depth);<br>
<br>
if (m_param->limitReferences & X265_REF_LIMIT_CU)<br>
{<br>
diff -r 626fcbac7ffb -r 20e1abc4b08c source/encoder/encoder.cpp<br>
--- a/source/encoder/encoder.cpp Thu Jun 16 12:57:38 2016 +0530<br>
+++ b/source/encoder/encoder.cpp Thu Jun 23 09:58:52 2016 +0530<br>
@@ -2288,7 +2288,7 @@<br>
TOOLCMP(oldParam->maxNumReferences, newParam->maxNumReferences, "ref=%d to %d\n");<br>
TOOLCMP(oldParam->bEnableFastIntra, newParam->bEnableFastIntra, "fast-intra=%d to %d\n");<br>
TOOLCMP(oldParam->bEnableEarlySkip, newParam->bEnableEarlySkip, "early-skip=%d to %d\n");<br>
- TOOLCMP(oldParam->bEnableRecursionSkip, newParam->bEnableRecursionSkip, "recursion-skip=%d to %d\n");<br>
+ TOOLCMP(oldParam->bEnableRecursionSkip, newParam->bEnableRecursionSkip, "rskip=%d to %d\n");<br>
TOOLCMP(oldParam->searchMethod, newParam->searchMethod, "me=%d to %d\n");<br>
TOOLCMP(oldParam->searchRange, newParam->searchRange, "merange=%d to %d\n");<br>
TOOLCMP(oldParam->subpelRefine, newParam->subpelRefine, "subme= %d to %d\n");<br>
diff -r 626fcbac7ffb -r 20e1abc4b08c source/x265cli.h<br>
--- a/source/x265cli.h Thu Jun 16 12:57:38 2016 +0530<br>
+++ b/source/x265cli.h Thu Jun 23 09:58:52 2016 +0530<br>
@@ -97,8 +97,7 @@<br>
{ "amp", no_argument, NULL, 0 },<br>
{ "no-early-skip", no_argument, NULL, 0 },<br>
{ "early-skip", no_argument, NULL, 0 },<br>
- { "no-recursion-skip", no_argument, NULL, 0 },<br>
- { "recursion-skip", no_argument, NULL, 0 },<br>
+ { "rskip", required_argument, NULL, 0 },<br>
{ "no-fast-cbf", no_argument, NULL, 0 },<br>
{ "fast-cbf", no_argument, NULL, 0 },<br>
{ "no-tskip", no_argument, NULL, 0 },<br>
@@ -314,7 +313,9 @@<br>
H0(" --[no-]psy-rdoq <0..50.0> Strength of psycho-visual optimization in RDO quantization, 0 to disable. Default %.1f\n", param->psyRdoq);<br>
H0(" --[no-]rd-refine Enable QP based RD refinement for rd levels 5 and 6. Default %s\n", OPT(param->bEnableRdRefine));<br>
H0(" --[no-]early-skip Enable early SKIP detection. Default %s\n", OPT(param->bEnableEarlySkip));<br>
- H0(" --[no-]recursion-skip Enable early exit from recursion. Default %s\n", OPT(param->bEnableRecursionSkip));<br>
+ H0(" --rskip <0..2> 0 - no early exit from recursion,");<br>
+ H0(" 1 - Enable early exit from recursion in rd 5,6,");<br>
+ H0(" 2 - Enable early exit from recursion in rd 0-4. Default %s\n", OPT(param->bEnableRecursionSkip));<br>
H1(" --[no-]tskip-fast Enable fast intra transform skipping. Default %s\n", OPT(param->bEnableTSkipFast));<br>
H1(" --nr-intra <integer> An integer value in range of 0 to 2000, which denotes strength of noise reduction in intra CUs. Default 0\n");<br>
H1(" --nr-inter <integer> An integer value in range of 0 to 2000, which denotes strength of noise reduction in inter CUs. Default 0\n");<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div>Deepthi Nandakumar<br></div>Engineering Manager, x265<br></div>Multicoreware, Inc<br></div></div>
</div>