[x265] [PATCH] cli: add numPredMode into analysis structure and keep configurable based on param

gopu at multicorewareinc.com gopu at multicorewareinc.com
Tue Nov 11 08:08:13 CET 2014


# HG changeset patch
# User Gopu Govindaswamy <gopu at multicorewareinc.com>
# Date 1415689681 -19800
#      Tue Nov 11 12:38:01 2014 +0530
# Node ID d98278d6bef3c35af876e6713e526ddace141e2f
# Parent  64b80aa95091ddcc95df1790dc72a4786d68e125
cli: add numPredMode into analysis structure and keep configurable based on param

diff -r 64b80aa95091 -r d98278d6bef3 source/CMakeLists.txt
--- a/source/CMakeLists.txt	Tue Nov 11 11:51:24 2014 +0530
+++ b/source/CMakeLists.txt	Tue Nov 11 12:38:01 2014 +0530
@@ -21,7 +21,7 @@
 include(CheckCXXCompilerFlag)
 
 # X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 36)
+set(X265_BUILD 37)
 configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
                "${PROJECT_BINARY_DIR}/x265.def")
 configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff -r 64b80aa95091 -r d98278d6bef3 source/common/cudata.h
--- a/source/common/cudata.h	Tue Nov 11 11:51:24 2014 +0530
+++ b/source/common/cudata.h	Tue Nov 11 12:38:01 2014 +0530
@@ -79,6 +79,7 @@
     
     // (1 + 4 + 16 + 64) = 85.
     enum { MAX_GEOMS = 85 };
+    enum { MAX_NUMPART_PER_PRED_UNIT = 2 };
 
     uint32_t log2CUSize;    // Log of the CU size.
     uint32_t childOffset;   // offset of the first child CU from current CU
diff -r 64b80aa95091 -r d98278d6bef3 source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp	Tue Nov 11 11:51:24 2014 +0530
+++ b/source/encoder/analysis.cpp	Tue Nov 11 12:38:01 2014 +0530
@@ -148,7 +148,10 @@
     else
     {
         if (m_param->analysisMode)
-            m_interAnalysisData = m_frame->m_interData + (ctu.m_cuAddr * (CUGeom::MAX_GEOMS * NUM_SIZES));
+        {
+            uint32_t PredMode = (m_param->bEnableAMP && m_param->bEnableRectInter) ? 8 : (m_param->bEnableAMP || m_param->bEnableRectInter ? 4 : 2);
+            m_interAnalysisData = m_frame->m_interData + (ctu.m_cuAddr * (CUGeom::MAX_GEOMS * PredMode * CUGeom::MAX_NUMPART_PER_PRED_UNIT));
+        }
 
         if (!m_param->rdLevel)
         {
diff -r 64b80aa95091 -r d98278d6bef3 source/encoder/api.cpp
--- a/source/encoder/api.cpp	Tue Nov 11 11:51:24 2014 +0530
+++ b/source/encoder/api.cpp	Tue Nov 11 12:38:01 2014 +0530
@@ -205,6 +205,7 @@
         uint32_t numCUsInFrame   = widthInCU * heightInCU;
         pic->analysisData.numCUsInFrame = numCUsInFrame;
         pic->analysisData.numPartitions = numPartitions;
+        pic->analysisData.numPredMode = (param->bEnableAMP && param->bEnableRectInter) ? 8 : (param->bEnableAMP || param->bEnableRectInter ? 4 : 2);
     }
 }
 
@@ -216,7 +217,7 @@
 
 int x265_alloc_analysis_data(x265_picture* pic)
 {
-    CHECKED_MALLOC(pic->analysisData.interData, x265_inter_data, pic->analysisData.numCUsInFrame * X265_MAX_PRED_MODE_PER_CU);
+    CHECKED_MALLOC(pic->analysisData.interData, x265_inter_data, pic->analysisData.numCUsInFrame * (X265_MAX_PRED_MODE_PER_CU * pic->analysisData.numPredMode));
     CHECKED_MALLOC(pic->analysisData.intraData, x265_intra_data, 1);
     pic->analysisData.intraData->depth      = NULL;
     pic->analysisData.intraData->modes      = NULL;
diff -r 64b80aa95091 -r d98278d6bef3 source/x265.cpp
--- a/source/x265.cpp	Tue Nov 11 11:51:24 2014 +0530
+++ b/source/x265.cpp	Tue Nov 11 12:38:01 2014 +0530
@@ -891,7 +891,7 @@
         sizeof(uint8_t), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
     fread(pic->analysisData.intraData->partSizes,
         sizeof(char), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
-    fread(pic->analysisData.interData, sizeof(x265_inter_data), pic->analysisData.numCUsInFrame * (X265_MAX_PRED_MODE_PER_CU), this->analysisFile);
+    fread(pic->analysisData.interData, sizeof(x265_inter_data), pic->analysisData.numCUsInFrame * (X265_MAX_PRED_MODE_PER_CU * pic->analysisData.numPredMode), this->analysisFile);
 }
 
 void CLIOptions::writeAnalysisFile(x265_picture* pic, x265_param *p)
@@ -911,7 +911,7 @@
         sizeof(uint8_t), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
     fwrite(pic->analysisData.intraData->partSizes,
         sizeof(char), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
-    fwrite(pic->analysisData.interData, sizeof(x265_inter_data), pic->analysisData.numCUsInFrame * X265_MAX_PRED_MODE_PER_CU, this->analysisFile);
+    fwrite(pic->analysisData.interData, sizeof(x265_inter_data), pic->analysisData.numCUsInFrame * (X265_MAX_PRED_MODE_PER_CU * pic->analysisData.numPredMode), this->analysisFile);
 }
 
 bool CLIOptions::parseQPFile(x265_picture &pic_org)
@@ -1013,6 +1013,7 @@
     }
     if (param->analysisMode)
     {
+        pic_recon->analysisData.numPredMode = pic_in->analysisData.numPredMode;
         if (param->analysisMode == X265_ANALYSIS_SAVE)
         {
             char *p = x265_param2string(param);
@@ -1024,7 +1025,7 @@
             uint32_t numCU = pic_in->analysisData.numCUsInFrame;
             uint32_t numPart = pic_in->analysisData.numPartitions;
 
-            cliopt.analysisRecordSize = ((sizeof(int) * 4 + sizeof(uint32_t) * 2) + sizeof(x265_inter_data) * numCU * X265_MAX_PRED_MODE_PER_CU +
+            cliopt.analysisRecordSize = ((sizeof(int) * 4 + sizeof(uint32_t) * 2) + sizeof(x265_inter_data) * numCU * (X265_MAX_PRED_MODE_PER_CU * pic_in->analysisData.numPredMode) +
                     sizeof(uint8_t) * 2 * numPart * numCU + sizeof(char) * numPart * numCU);
 
             fprintf(cliopt.analysisFile, "#options: %s\n", p);
diff -r 64b80aa95091 -r d98278d6bef3 source/x265.h
--- a/source/x265.h	Tue Nov 11 11:51:24 2014 +0530
+++ b/source/x265.h	Tue Nov 11 12:38:01 2014 +0530
@@ -114,6 +114,7 @@
     x265_intra_data* intraData;
     uint32_t         numCUsInFrame;
     uint32_t         numPartitions;
+    uint32_t         numPredMode;
 } x265_analysis_data;
 
 /* Used to pass pictures into the encoder, and to get picture data back out of
@@ -286,7 +287,7 @@
 #define X265_ANALYSIS_OFF  0
 #define X265_ANALYSIS_SAVE 1
 #define X265_ANALYSIS_LOAD 2
-#define X265_MAX_PRED_MODE_PER_CU (85 * 8 * 2) /* max-recursive-percu * max-predmode * numberofpart */
+#define X265_MAX_PRED_MODE_PER_CU (85 * 2) /* max-recursive-percu * numberofpart */
 
 typedef struct
 {


More information about the x265-devel mailing list