[x265] [PATCH] analysis: compute Inter2Nx2N after merge in analysis mode=load if reuse mode chosen is skip

santhoshini at multicorewareinc.com santhoshini at multicorewareinc.com
Mon Jul 4 10:10:50 CEST 2016


# HG changeset patch
# User Santhoshini Sekar<santhoshini at multicorewareinc.com>
# Date 1467619611 -19800
#      Mon Jul 04 13:36:51 2016 +0530
# Node ID 0c4c66ce33abba9d3f224af2bac79b243c426c28
# Parent  836a870ba76b46d4c0078289e320db1371fc3403
analysis: compute Inter2Nx2N after merge in analysis mode=load if reuse mode chosen is skip

diff -r 836a870ba76b -r 0c4c66ce33ab source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp	Fri Jul 01 11:49:57 2016 +0530
+++ b/source/encoder/analysis.cpp	Mon Jul 04 13:36:51 2016 +0530
@@ -1424,6 +1424,13 @@
         md.pred[PRED_2Nx2N].rdCost = 0;
     }
 
+	SplitData splitData[4];
+	splitData[0].initSplitCUData();
+	splitData[1].initSplitCUData();
+	splitData[2].initSplitCUData();
+	splitData[3].initSplitCUData();
+	uint32_t allSplitRefs = splitData[0].splitRefs | splitData[1].splitRefs | splitData[2].splitRefs | splitData[3].splitRefs;
+	uint32_t refMasks[2];
     if (m_param->analysisMode == X265_ANALYSIS_LOAD)
     {
         if (mightNotSplit && depth == m_reuseDepth[cuGeom.absPartIdx])
@@ -1433,23 +1440,20 @@
                 md.pred[PRED_SKIP].cu.initSubCU(parentCTU, cuGeom, qp);
                 md.pred[PRED_MERGE].cu.initSubCU(parentCTU, cuGeom, qp);
                 checkMerge2Nx2N_rd5_6(md.pred[PRED_SKIP], md.pred[PRED_MERGE], cuGeom);
+                skipModes = !!m_param->bEnableEarlySkip && md.bestMode;
+                refMasks[0] = allSplitRefs;
+                md.pred[PRED_2Nx2N].cu.initSubCU(parentCTU, cuGeom, qp);
+                checkInter_rd5_6(md.pred[PRED_2Nx2N], cuGeom, SIZE_2Nx2N, refMasks);
+                checkBestMode(md.pred[PRED_2Nx2N], cuGeom.depth);
 
-                skipRecursion = !!m_param->bEnableRecursionSkip && md.bestMode;
-                skipModes = !!m_param->bEnableEarlySkip && md.bestMode;
+                if (m_param->bEnableRecursionSkip && depth && m_modeDepth[depth - 1].bestMode)
+	                skipRecursion = md.bestMode && !md.bestMode->cu.getQtRootCbf(0);
             }
             if (m_reusePartSize[cuGeom.absPartIdx] == SIZE_2Nx2N)
                 skipRectAmp = true && !!md.bestMode;
         }
     }
 
-    SplitData splitData[4];
-    splitData[0].initSplitCUData();
-    splitData[1].initSplitCUData();
-    splitData[2].initSplitCUData();
-    splitData[3].initSplitCUData();
-
-    uint32_t allSplitRefs = splitData[0].splitRefs | splitData[1].splitRefs | splitData[2].splitRefs | splitData[3].splitRefs;
-    uint32_t refMasks[2];
     /* Step 1. Evaluate Merge/Skip candidates for likely early-outs */
     if (mightNotSplit && !md.bestMode)
     {


More information about the x265-devel mailing list