<div dir="ltr">Will update and resend the patch.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 23, 2016 at 10:14 AM, Deepthi Nandakumar <span dir="ltr"><<a href="mailto:deepthi@multicorewareinc.com" target="_blank">deepthi@multicorewareinc.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Documentation, build version updates...</div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">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></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"># HG changeset patch<br>
# User Santhoshini Sekar<<a href="mailto:santhoshini@multicorewareinc.com" target="_blank">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></div></div>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org" target="_blank">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><span class="HOEnZb"><font color="#888888"><br>
</font></span></blockquote></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div data-smartmail="gmail_signature"><div dir="ltr"><div><div>Deepthi Nandakumar<br></div>Engineering Manager, x265<br></div>Multicoreware, Inc<br></div></div>
</font></span></div>
<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>
<br></blockquote></div><br></div>