[x265] [PATCH] analysis-mode: force recursion when checkMerge does not return bestMode

kavitha at multicorewareinc.com kavitha at multicorewareinc.com
Tue Jun 14 13:57:58 CEST 2016


# HG changeset patch
# User Kavitha Sampath <kavitha at multicorewareinc.com>
# Date 1465899492 -19800
#      Tue Jun 14 15:48:12 2016 +0530
# Node ID a79d371b849d8ce2e045da4a5c9bd5a684b06e8f
# Parent  106a5a7dc4b337121c11484bc3bc4900b8a0d9a4
analysis-mode: force recursion when checkMerge does not return bestMode

diff -r 106a5a7dc4b3 -r a79d371b849d source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp	Thu Jun 09 13:34:55 2016 -0500
+++ b/source/encoder/analysis.cpp	Tue Jun 14 15:48:12 2016 +0530
@@ -915,7 +915,7 @@
                 md.pred[PRED_SKIP].cu.initSubCU(parentCTU, cuGeom, qp);
                 checkMerge2Nx2N_rd0_4(md.pred[PRED_SKIP], md.pred[PRED_MERGE], cuGeom);
 
-                skipRecursion = !!m_param->bEnableRecursionSkip;
+                skipRecursion = !!m_param->bEnableRecursionSkip && md.bestMode;
                 if (m_param->rdLevel)
                     skipModes = m_param->bEnableEarlySkip && md.bestMode;
             }
@@ -931,7 +931,7 @@
     }
 
     /* Step 1. Evaluate Merge/Skip candidates for likely early-outs, if skip mode was not set above */
-    if (mightNotSplit && depth >= minDepth && !skipRecursion) /* TODO: Re-evaluate if analysis load/save still works */
+    if (mightNotSplit && depth >= minDepth && !md.bestMode) /* TODO: Re-evaluate if analysis load/save still works */
     {
         /* Compute Merge Cost */
         md.pred[PRED_MERGE].cu.initSubCU(parentCTU, cuGeom, qp);
@@ -1426,8 +1426,8 @@
                 md.pred[PRED_MERGE].cu.initSubCU(parentCTU, cuGeom, qp);
                 checkMerge2Nx2N_rd5_6(md.pred[PRED_SKIP], md.pred[PRED_MERGE], cuGeom);
 
-                skipRecursion = !!m_param->bEnableRecursionSkip;
-                skipModes = !!m_param->bEnableEarlySkip;
+                skipRecursion = !!m_param->bEnableRecursionSkip && md.bestMode;
+                skipModes = !!m_param->bEnableEarlySkip && md.bestMode;
             }
             if (m_reusePartSize[cuGeom.absPartIdx] == SIZE_2Nx2N)
                 skipRectAmp = true && !!md.bestMode;
@@ -1441,7 +1441,7 @@
     splitData[3].initSplitCUData();
 
     /* Step 1. Evaluate Merge/Skip candidates for likely early-outs */
-    if (mightNotSplit && !skipRecursion)
+    if (mightNotSplit && !md.bestMode)
     {
         md.pred[PRED_SKIP].cu.initSubCU(parentCTU, cuGeom, qp);
         md.pred[PRED_MERGE].cu.initSubCU(parentCTU, cuGeom, qp);


More information about the x265-devel mailing list