[x265] [PATCH 2 of 2] Reuse CU depth for B frame and allow I, P frame to follow x265 depth decision
Kalyan Goswami
kalyan at multicorewareinc.com
Fri Dec 28 10:52:51 CET 2018
Pushed in the default branch
Thanks,
Kalyan Goswami, PhD
Video Architect @ MulticoreWare
http: <http://www.multicorewareinc.com/>//www.multicorewareinc.com
<http://www.multicorewareinc.com/>
+91 9884989331
On Fri, Dec 28, 2018 at 2:47 PM <jayashri at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Jayashri Murugan
> # Date 1537464480 25200
> # Thu Sep 20 10:28:00 2018 -0700
> # Node ID d571bdb0b0ae9894dce12d9d0fc3ea4d639a01a2
> # Parent 23a8a7456916d98040b56a09a93ce3b1149613d9
> Reuse CU depth for B frame and allow I, P frame to follow x265 depth
> decision
>
> diff -r 23a8a7456916 -r d571bdb0b0ae source/common/param.cpp
> --- a/source/common/param.cpp Wed Sep 19 14:30:48 2018 -0700
> +++ b/source/common/param.cpp Thu Sep 20 10:28:00 2018 -0700
> @@ -1157,6 +1157,10 @@
> {
> p->bAnalysisType = AVC_INFO;
> }
> + else if (strcmp(strdup(value), "hevc") == 0)
> + {
> + p->bAnalysisType = HEVC_INFO;
> + }
> else if (strcmp(strdup(value), "off") == 0)
> {
> p->bAnalysisType = NO_INFO;
> @@ -1714,7 +1718,11 @@
> TOOLVAL(param->lookaheadThreads, "lthreads=%d")
> TOOLVAL(param->bCTUInfo, "ctu-info=%d");
> if (param->bAnalysisType == AVC_INFO)
> + {
> TOOLOPT(param->bAnalysisType, "refine-analysis-type=avc");
> + }
> + else if (param->bAnalysisType == HEVC_INFO)
> + TOOLOPT(param->bAnalysisType, "refine-analysis-type=hevc");
> TOOLOPT(param->bDynamicRefine, "dynamic-refine");
> if (param->maxSlices > 1)
> TOOLVAL(param->maxSlices, "slices=%d");
> diff -r 23a8a7456916 -r d571bdb0b0ae source/encoder/analysis.cpp
> --- a/source/encoder/analysis.cpp Wed Sep 19 14:30:48 2018 -0700
> +++ b/source/encoder/analysis.cpp Thu Sep 20 10:28:00 2018 -0700
> @@ -275,7 +275,8 @@
> /* generate residual for entire CTU at once and copy to
> reconPic */
> encodeResidue(ctu, cuGeom);
> }
> - else if ((m_param->analysisLoad && m_param->analysisReuseLevel ==
> 10) || ((m_param->bAnalysisType == AVC_INFO) && m_param->analysisReuseLevel
> >= 7 && ctu.m_numPartitions <= 16))
> + else if ((m_param->analysisLoad && m_param->analysisReuseLevel ==
> 10 && (!(m_param->bAnalysisType == HEVC_INFO) || m_slice->m_sliceType !=
> P_SLICE)) ||
> + ((m_param->bAnalysisType == AVC_INFO) &&
> m_param->analysisReuseLevel >= 7 && ctu.m_numPartitions <= 16))
> {
> x265_analysis_inter_data* interDataCTU =
> m_frame->m_analysisData.interData;
> int posCTU = ctu.m_cuAddr * numPartition;
> @@ -516,7 +517,7 @@
> bool mightSplit = !(cuGeom.flags & CUGeom::LEAF);
> bool mightNotSplit = !(cuGeom.flags & CUGeom::SPLIT_MANDATORY);
>
> - bool bAlreadyDecided = m_param->intraRefine != 4 &&
> parentCTU.m_lumaIntraDir[cuGeom.absPartIdx] != (uint8_t)ALL_IDX;
> + bool bAlreadyDecided = m_param->intraRefine != 4 &&
> parentCTU.m_lumaIntraDir[cuGeom.absPartIdx] != (uint8_t)ALL_IDX &&
> !(m_param->bAnalysisType == HEVC_INFO);
> bool bDecidedDepth = m_param->intraRefine != 4 &&
> parentCTU.m_cuDepth[cuGeom.absPartIdx] == depth;
> int split = 0;
> if (m_param->intraRefine && m_param->intraRefine != 4)
> @@ -2423,7 +2424,7 @@
> (m_refineLevel && cuGeom.log2CUSize ==
> (uint32_t)(g_log2Size[m_param->minCUSize] + 1))));
> td.split = split;
>
> - if (bDecidedDepth && mightNotSplit)
> + if ((bDecidedDepth && mightNotSplit) || (m_param->bAnalysisType ==
> HEVC_INFO && parentCTU.m_cuDepth[cuGeom.absPartIdx] == 4))
> {
> setLambdaFromQP(parentCTU, qp, lqp);
>
> @@ -2562,7 +2563,10 @@
>
> if (m_refineLevel > 1 || (m_refineLevel &&
> parentCTU.m_predMode[cuGeom.absPartIdx] == MODE_SKIP &&
> !mode.cu.isSkipped(0)))
> {
> - m_evaluateInter = 1;
> + if (parentCTU.m_cuDepth[cuGeom.absPartIdx] < 4 &&
> mightNotSplit)
> + m_evaluateInter = 1;
> + else
> + bDecidedDepth = true;
> m_param->rdLevel > 4 ? compressInterCU_rd5_6(parentCTU,
> cuGeom, qp) : compressInterCU_rd0_4(parentCTU, cuGeom, qp);
> m_evaluateInter = 0;
> }
> diff -r 23a8a7456916 -r d571bdb0b0ae source/encoder/api.cpp
> --- a/source/encoder/api.cpp Wed Sep 19 14:30:48 2018 -0700
> +++ b/source/encoder/api.cpp Thu Sep 20 10:28:00 2018 -0700
> @@ -463,20 +463,20 @@
> //Allocate memory for intraData pointer
> CHECKED_MALLOC_ZERO(intraData, x265_analysis_intra_data, 1);
> CHECKED_MALLOC(intraData->depth, uint8_t, analysis->numPartitions *
> analysis->numCUsInFrame);
> - CHECKED_MALLOC(intraData->modes, uint8_t, analysis->numPartitions *
> analysis->numCUsInFrame);
> - CHECKED_MALLOC(intraData->partSizes, char, analysis->numPartitions *
> analysis->numCUsInFrame);
> - CHECKED_MALLOC(intraData->chromaModes, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(intraData->modes, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(intraData->partSizes, char,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(intraData->chromaModes, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> if (param->rc.cuTree)
> - CHECKED_MALLOC(intraData->cuQPOff, int8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(intraData->cuQPOff, int8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> analysis->intraData = intraData;
>
> //Allocate memory for interData pointer based on ReuseLevels
> CHECKED_MALLOC_ZERO(interData, x265_analysis_inter_data, 1);
> CHECKED_MALLOC(interData->depth, uint8_t, analysis->numPartitions *
> analysis->numCUsInFrame);
> - CHECKED_MALLOC(interData->modes, uint8_t, analysis->numPartitions *
> analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(interData->modes, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
>
> if (param->rc.cuTree)
> - CHECKED_MALLOC(interData->cuQPOff, int8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(interData->cuQPOff, int8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> CHECKED_MALLOC_ZERO(interData->mvpIdx[0], uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> CHECKED_MALLOC_ZERO(interData->mvpIdx[1], uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> CHECKED_MALLOC_ZERO(interData->mv[0], x265_analysis_MV,
> analysis->numPartitions * analysis->numCUsInFrame);
> @@ -484,16 +484,16 @@
>
> if (param->analysisReuseLevel > 4)
> {
> - CHECKED_MALLOC(interData->partSize, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(interData->partSize, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> CHECKED_MALLOC_ZERO(interData->mergeFlag, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> }
> if (param->analysisReuseLevel >= 7)
> {
> - CHECKED_MALLOC(interData->interDir, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> - CHECKED_MALLOC(interData->sadCost, int64_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(interData->interDir, uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(interData->sadCost, int64_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> for (int dir = 0; dir < numDir; dir++)
> {
> - CHECKED_MALLOC(interData->refIdx[dir], int8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> + CHECKED_MALLOC_ZERO(interData->refIdx[dir], int8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> CHECKED_MALLOC_ZERO(analysis->modeFlag[dir], uint8_t,
> analysis->numPartitions * analysis->numCUsInFrame);
> }
> }
> diff -r 23a8a7456916 -r d571bdb0b0ae source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Wed Sep 19 14:30:48 2018 -0700
> +++ b/source/encoder/encoder.cpp Thu Sep 20 10:28:00 2018 -0700
> @@ -1145,7 +1145,7 @@
> {
> /* reads analysis data for the frame and allocates memory
> based on slicetype */
> static int paramBytes = 0;
> - if (!inFrame->m_poc)
> + if (!inFrame->m_poc && m_param->bAnalysisType != HEVC_INFO)
> {
> x265_analysis_data analysisData = pic_in->analysisData;
> paramBytes = validateAnalysisData(&analysisData, 0);
> @@ -2885,7 +2885,7 @@
> p->rc.rfConstantMin = 0;
> }
>
> - if ((p->analysisLoad || p->analysisSave) && p->rc.cuTree &&
> p->analysisReuseLevel < 10)
> + if (!(p->bAnalysisType == HEVC_INFO) && (p->analysisLoad ||
> p->analysisSave) && p->rc.cuTree && p->analysisReuseLevel < 10)
> {
> x265_log(p, X265_LOG_WARNING, "cu-tree works only with analysis
> reuse level 10, Disabling cu-tree\n");
> p->rc.cuTree = 0;
> @@ -2954,7 +2954,7 @@
> p->interRefine = 1;
> }
>
> - if (p->limitTU && (p->interRefine || p->bDynamicRefine))
> + if (!(p->bAnalysisType == HEVC_INFO) && p->limitTU && (p->interRefine
> || p->bDynamicRefine))
> {
> x265_log(p, X265_LOG_WARNING, "Inter refinement does not support
> limitTU. Disabling limitTU.\n");
> p->limitTU = 0;
> @@ -3465,6 +3465,8 @@
> }
> if (analysis->sliceType == X265_TYPE_IDR || analysis->sliceType ==
> X265_TYPE_I)
> {
> + if (m_param->bAnalysisType == HEVC_INFO)
> + return;
> if (m_param->analysisReuseLevel < 2)
> return;
>
> @@ -3542,98 +3544,107 @@
> bIntraInInter = (analysis->sliceType == X265_TYPE_P ||
> m_param->bIntraInBFrames);
> if (bIntraInInter) numBuf++;
> }
> -
> - tempBuf = X265_MALLOC(uint8_t, depthBytes * numBuf);
> - depthBuf = tempBuf;
> - modeBuf = tempBuf + depthBytes;
> - if (m_param->rc.cuTree)
> - cuQPBuf = X265_MALLOC(int8_t, depthBytes);
> -
> - X265_FREAD(depthBuf, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->depth);
> - X265_FREAD(modeBuf, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->modes);
> - if (m_param->rc.cuTree) { X265_FREAD(cuQPBuf, sizeof(int8_t),
> depthBytes, m_analysisFileIn, interPic->cuQPOff); }
> -
> - if (m_param->analysisReuseLevel > 4)
> + if (m_param->bAnalysisType == HEVC_INFO)
> + {
> + depthBytes = analysis->numCUsInFrame *
> analysis->numPartitions;
> + memcpy(((x265_analysis_inter_data
> *)analysis->interData)->depth, interPic->depth, depthBytes);
> + }
> + else
> {
> - partSize = modeBuf + depthBytes;
> - mergeFlag = partSize + depthBytes;
> - X265_FREAD(partSize, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->partSize);
> - X265_FREAD(mergeFlag, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->mergeFlag);
> -
> - if (m_param->analysisReuseLevel == 10)
> + tempBuf = X265_MALLOC(uint8_t, depthBytes * numBuf);
> + depthBuf = tempBuf;
> + modeBuf = tempBuf + depthBytes;
> + if (m_param->rc.cuTree)
> + cuQPBuf = X265_MALLOC(int8_t, depthBytes);
> +
> + X265_FREAD(depthBuf, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->depth);
> + X265_FREAD(modeBuf, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->modes);
> + if (m_param->rc.cuTree) { X265_FREAD(cuQPBuf, sizeof(int8_t),
> depthBytes, m_analysisFileIn, interPic->cuQPOff); }
> +
> + if (m_param->analysisReuseLevel > 4)
> {
> - interDir = mergeFlag + depthBytes;
> - X265_FREAD(interDir, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->interDir);
> - if (bIntraInInter)
> + partSize = modeBuf + depthBytes;
> + mergeFlag = partSize + depthBytes;
> + X265_FREAD(partSize, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->partSize);
> + X265_FREAD(mergeFlag, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->mergeFlag);
> +
> + if (m_param->analysisReuseLevel == 10)
> {
> - chromaDir = interDir + depthBytes;
> - X265_FREAD(chromaDir, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, intraPic->chromaModes);
> - }
> - for (uint32_t i = 0; i < numDir; i++)
> - {
> - mvpIdx[i] = X265_MALLOC(uint8_t, depthBytes);
> - refIdx[i] = X265_MALLOC(int8_t, depthBytes);
> - mv[i] = X265_MALLOC(MV, depthBytes);
> - X265_FREAD(mvpIdx[i], sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->mvpIdx[i]);
> - X265_FREAD(refIdx[i], sizeof(int8_t), depthBytes,
> m_analysisFileIn, interPic->refIdx[i]);
> - X265_FREAD(mv[i], sizeof(MV), depthBytes,
> m_analysisFileIn, interPic->mv[i]);
> + interDir = mergeFlag + depthBytes;
> + X265_FREAD(interDir, sizeof(uint8_t), depthBytes,
> m_analysisFileIn, interPic->interDir);
> + if (bIntraInInter)
> + {
> + chromaDir = interDir + depthBytes;
> + X265_FREAD(chromaDir, sizeof(uint8_t),
> depthBytes, m_analysisFileIn, intraPic->chromaModes);
> + }
> + for (uint32_t i = 0; i < numDir; i++)
> + {
> + mvpIdx[i] = X265_MALLOC(uint8_t, depthBytes);
> + refIdx[i] = X265_MALLOC(int8_t, depthBytes);
> + mv[i] = X265_MALLOC(MV, depthBytes);
> + X265_FREAD(mvpIdx[i], sizeof(uint8_t),
> depthBytes, m_analysisFileIn, interPic->mvpIdx[i]);
> + X265_FREAD(refIdx[i], sizeof(int8_t), depthBytes,
> m_analysisFileIn, interPic->refIdx[i]);
> + X265_FREAD(mv[i], sizeof(MV), depthBytes,
> m_analysisFileIn, interPic->mv[i]);
> + }
> }
> }
> - }
> -
> - size_t count = 0;
> - for (uint32_t d = 0; d < depthBytes; d++)
> - {
> - int bytes = analysis->numPartitions >> (depthBuf[d] * 2);
> - if (m_param->scaleFactor && modeBuf[d] == MODE_INTRA &&
> depthBuf[d] == 0)
> - depthBuf[d] = 1;
> - memset(&(analysis->interData)->depth[count], depthBuf[d],
> bytes);
> - memset(&(analysis->interData)->modes[count], modeBuf[d],
> bytes);
> - if (m_param->rc.cuTree)
> - memset(&(analysis->interData)->cuQPOff[count],
> cuQPBuf[d], bytes);
> - if (m_param->analysisReuseLevel > 4)
> +
> + size_t count = 0;
> + for (uint32_t d = 0; d < depthBytes; d++)
> {
> - if (m_param->scaleFactor && modeBuf[d] == MODE_INTRA &&
> partSize[d] == SIZE_NxN)
> - partSize[d] = SIZE_2Nx2N;
> - memset(&(analysis->interData)->partSize[count],
> partSize[d], bytes);
> - int numPU = (modeBuf[d] == MODE_INTRA) ? 1 :
> nbPartsTable[(int)partSize[d]];
> - for (int pu = 0; pu < numPU; pu++)
> + int bytes = analysis->numPartitions >> (depthBuf[d] * 2);
> + if (m_param->scaleFactor && modeBuf[d] == MODE_INTRA &&
> depthBuf[d] == 0)
> + depthBuf[d] = 1;
> + memset(&(analysis->interData)->depth[count], depthBuf[d],
> bytes);
> + memset(&(analysis->interData)->modes[count], modeBuf[d],
> bytes);
> + if (m_param->rc.cuTree)
> + memset(&(analysis->interData)->cuQPOff[count],
> cuQPBuf[d], bytes);
> + if (m_param->analysisReuseLevel > 4)
> {
> - if (pu) d++;
> - (analysis->interData)->mergeFlag[count + pu] =
> mergeFlag[d];
> - if (m_param->analysisReuseLevel == 10)
> + if (m_param->scaleFactor && modeBuf[d] == MODE_INTRA
> && partSize[d] == SIZE_NxN)
> + partSize[d] = SIZE_2Nx2N;
> + memset(&(analysis->interData)->partSize[count],
> partSize[d], bytes);
> + int numPU = (modeBuf[d] == MODE_INTRA) ? 1 :
> nbPartsTable[(int)partSize[d]];
> + for (int pu = 0; pu < numPU; pu++)
> {
> - (analysis->interData)->interDir[count + pu] =
> interDir[d];
> - for (uint32_t i = 0; i < numDir; i++)
> + if (pu) d++;
> + (analysis->interData)->mergeFlag[count + pu] =
> mergeFlag[d];
> + if (m_param->analysisReuseLevel == 10)
> {
> - (analysis->interData)->mvpIdx[i][count + pu]
> = mvpIdx[i][d];
> - (analysis->interData)->refIdx[i][count + pu]
> = refIdx[i][d];
> - if (m_param->scaleFactor)
> + (analysis->interData)->interDir[count + pu] =
> interDir[d];
> + for (uint32_t i = 0; i < numDir; i++)
> {
> - mv[i][d].x *=
> (int16_t)m_param->scaleFactor;
> - mv[i][d].y *=
> (int16_t)m_param->scaleFactor;
> + (analysis->interData)->mvpIdx[i][count +
> pu] = mvpIdx[i][d];
> + (analysis->interData)->refIdx[i][count +
> pu] = refIdx[i][d];
> + if (m_param->scaleFactor)
> + {
> + mv[i][d].x *=
> (int16_t)m_param->scaleFactor;
> + mv[i][d].y *=
> (int16_t)m_param->scaleFactor;
> + }
> +
> memcpy(&(analysis->interData)->mv[i][count + pu], &mv[i][d], sizeof(MV));
> }
> - memcpy(&(analysis->interData)->mv[i][count +
> pu], &mv[i][d], sizeof(MV));
> }
> }
> + if (m_param->analysisReuseLevel == 10 &&
> bIntraInInter)
> +
> memset(&(analysis->intraData)->chromaModes[count], chromaDir[d], bytes);
> }
> - if (m_param->analysisReuseLevel == 10 && bIntraInInter)
> - memset(&(analysis->intraData)->chromaModes[count],
> chromaDir[d], bytes);
> + count += bytes;
> }
> - count += bytes;
> +
> + if (m_param->rc.cuTree)
> + X265_FREE(cuQPBuf);
> + X265_FREE(tempBuf);
> }
> -
> - if (m_param->rc.cuTree)
> - X265_FREE(cuQPBuf);
> - X265_FREE(tempBuf);
> -
> if (m_param->analysisReuseLevel == 10)
> {
> - for (uint32_t i = 0; i < numDir; i++)
> + if (m_param->bAnalysisType != HEVC_INFO)
> {
> - X265_FREE(mvpIdx[i]);
> - X265_FREE(refIdx[i]);
> - X265_FREE(mv[i]);
> + for (uint32_t i = 0; i < numDir; i++)
> + {
> + X265_FREE(mvpIdx[i]);
> + X265_FREE(refIdx[i]);
> + X265_FREE(mv[i]);
> + }
> }
> if (bIntraInInter)
> {
> diff -r 23a8a7456916 -r d571bdb0b0ae source/encoder/slicetype.cpp
> --- a/source/encoder/slicetype.cpp Wed Sep 19 14:30:48 2018 -0700
> +++ b/source/encoder/slicetype.cpp Thu Sep 20 10:28:00 2018 -0700
> @@ -1090,7 +1090,7 @@
> if (m_param->rc.cuTree && !m_param->rc.bStatRead)
> /* update row satds based on cutree offsets */
> curFrame->m_lowres.satdCost = frameCostRecalculate(frames,
> p0, p1, b);
> - else if (!m_param->analysisLoad || m_param->scaleFactor)
> + else if (!m_param->analysisLoad || m_param->scaleFactor ||
> m_param->bAnalysisType == HEVC_INFO)
> {
> if (m_param->rc.aqMode)
> curFrame->m_lowres.satdCost =
> curFrame->m_lowres.costEstAq[b - p0][p1 - b];
> @@ -1245,7 +1245,7 @@
> }
>
> int bframes, brefs;
> - if (!m_param->analysisLoad)
> + if (!m_param->analysisLoad || m_param->bAnalysisType == HEVC_INFO)
> {
> for (bframes = 0, brefs = 0;; bframes++)
> {
> diff -r 23a8a7456916 -r d571bdb0b0ae source/x265.h
> --- a/source/x265.h Wed Sep 19 14:30:48 2018 -0700
> +++ b/source/x265.h Thu Sep 20 10:28:00 2018 -0700
> @@ -317,6 +317,7 @@
> {
> NO_INFO = 0,
> AVC_INFO = 1,
> + HEVC_INFO = 2,
> }AnalysisRefineType;
>
> /* Arbitrary User SEI
> diff -r 23a8a7456916 -r d571bdb0b0ae source/x265cli.h
> --- a/source/x265cli.h Wed Sep 19 14:30:48 2018 -0700
> +++ b/source/x265cli.h Thu Sep 20 10:28:00 2018 -0700
> @@ -501,7 +501,7 @@
> H0(" --analysis-load <filename> Load analysis buffers from the
> file specified. Default Disabled\n");
> H0(" --analysis-reuse-file <filename> Specify file name used for
> either dumping or reading analysis data. Deault x265_analysis.dat\n");
> H0(" --analysis-reuse-level <1..10> Level of analysis reuse
> indicates amount of info stored/reused in save/load mode, 1:least..10:most.
> Default %d\n", param->analysisReuseLevel);
> - H0(" --refine-analysis-type <string> Reuse anlaysis information
> received through API call. Supported options are avc. Default disabled -
> %d\n", param->bAnalysisType);
> + H0(" --refine-analysis-type <string> Reuse anlaysis information
> received through API call. Supported options are avc and hevc. Default
> disabled - %d\n", param->bAnalysisType);
> H0(" --scale-factor <int> Specify factor by which input
> video is scaled down for analysis save mode. Default %d\n",
> param->scaleFactor);
> H0(" --refine-intra <0..4> Enable intra refinement for
> encode that uses analysis-load.\n"
> " - 0 : Forces both mode and
> depth from the save encode.\n"
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20181228/e186189b/attachment-0001.html>
More information about the x265-devel
mailing list