[x265] [PATCH] cli: add numPredMode into analysis structure and keep configurable based on param
Steve Borho
steve at borho.org
Tue Nov 11 22:28:09 CET 2014
On 11/11, gopu at multicorewareinc.com wrote:
> # 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);
there is a strict hierarchy, amp is disabled if rect is disabled, so:
numPredMode = 2 /* 2Nx2N + bidir */ + param->bEnableRectInter * 2 + param->bEnableAMP * 4;
BTW: to be safe we should be BOOLIFY'ing all our boolean params like
x264 does, aka #define BOOLIFY(f) f = !!f
> }
> }
>
> @@ -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
> {
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
--
Steve Borho
More information about the x265-devel
mailing list