[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