On Thu, Aug 31, 2017 at 4:31 PM, <bha...@multicorewareinc.com> wrote:
> # HG changeset patch > # User Bhavna Hariharan <bha...@multicorewareinc.com> > # Date 1503468675 -19800 > # Wed Aug 23 11:41:15 2017 +0530 > # Node ID f5d669bfb2b209f73406cede50878a06eef52fd4 > # Parent fcd9154fa4e28ae9e3c11e16bfae20dbdb89101d > Re-evaluate vbv lookahead in the encode that uses > --analysis-reuse-mode load. > Pushed to default branch. thanks! > > Evaluate inter modes in encode that uses --analysis-reuse-mode load when > intra-in-inter blocks are chosen with --refine-inter 2 in the previous > pass. > > diff -r fcd9154fa4e2 -r f5d669bfb2b2 source/encoder/analysis.cpp > --- a/source/encoder/analysis.cpp Mon Aug 21 11:50:36 2017 +0530 > +++ b/source/encoder/analysis.cpp Wed Aug 23 11:41:15 2017 +0530 > @@ -1150,13 +1150,11 @@ > bool chooseMerge = false; > bool bCtuInfoCheck = false; > int sameContentRef = 0; > - bool checkRefineInter = false; > > if (m_evaluateInter) > { > if (m_param->interRefine == 2) > { > - checkRefineInter = true; > if (parentCTU.m_predMode[cuGeom.absPartIdx] == MODE_SKIP) > skipModes = true; > if (parentCTU.m_partSize[cuGeom.absPartIdx] == SIZE_2Nx2N) > @@ -1279,7 +1277,7 @@ > md.pred[PRED_SKIP].cu.initSubCU(parentCTU, cuGeom, qp); > checkMerge2Nx2N_rd0_4(md.pred[PRED_SKIP], md.pred[PRED_MERGE], > cuGeom); > if (m_param->rdLevel) > - skipModes = (m_param->bEnableEarlySkip || checkRefineInter) > + skipModes = (m_param->bEnableEarlySkip || > m_param->interRefine == 2) > && md.bestMode && md.bestMode->cu.isSkipped(0); > // TODO: sa8d threshold per depth > } > > @@ -1539,7 +1537,7 @@ > } > } > } > - bool bTryIntra = (m_slice->m_sliceType != B_SLICE || > m_param->bIntraInBFrames) && cuGeom.log2CUSize != MAX_LOG2_CU_SIZE && > !((m_param->bCTUInfo & 4) && bCtuInfoCheck) && !checkRefineInter; > + bool bTryIntra = (m_slice->m_sliceType != B_SLICE || > m_param->bIntraInBFrames) && cuGeom.log2CUSize != MAX_LOG2_CU_SIZE && > !((m_param->bCTUInfo & 4) && bCtuInfoCheck); > if (m_param->rdLevel >= 3) > { > /* Calculate RD cost of best inter option */ > @@ -1784,13 +1782,11 @@ > bool skipRectAmp = false; > bool bCtuInfoCheck = false; > int sameContentRef = 0; > - bool checkRefineInter = false; > > if (m_evaluateInter) > { > if (m_param->interRefine == 2) > { > - checkRefineInter = true; > if (parentCTU.m_predMode[cuGeom.absPartIdx] == MODE_SKIP) > skipModes = true; > if (parentCTU.m_partSize[cuGeom.absPartIdx] == SIZE_2Nx2N) > @@ -1919,7 +1915,7 @@ > 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 || checkRefineInter) && > + skipModes = (m_param->bEnableEarlySkip || m_param->interRefine == > 2) && > md.bestMode && !md.bestMode->cu.getQtRootCbf(0); > refMasks[0] = allSplitRefs; > md.pred[PRED_2Nx2N].cu.initSubCU(parentCTU, cuGeom, qp); > @@ -2172,7 +2168,7 @@ > } > } > > - if ((m_slice->m_sliceType != B_SLICE || > m_param->bIntraInBFrames) && (cuGeom.log2CUSize != MAX_LOG2_CU_SIZE) && > !((m_param->bCTUInfo & 4) && bCtuInfoCheck) && !checkRefineInter) > + if ((m_slice->m_sliceType != B_SLICE || > m_param->bIntraInBFrames) && (cuGeom.log2CUSize != MAX_LOG2_CU_SIZE) && > !((m_param->bCTUInfo & 4) && bCtuInfoCheck)) > { > if (!m_param->limitReferences || splitIntra) > { > @@ -2288,7 +2284,7 @@ > md.bestMode = &mode; > mode.cu.initSubCU(parentCTU, cuGeom, qp); > PartSize size = (PartSize)parentCTU.m_partSize > [cuGeom.absPartIdx]; > - if (parentCTU.isIntra(cuGeom.absPartIdx)) > + if (parentCTU.isIntra(cuGeom.absPartIdx) && m_param->interRefine > < 2) > { > bool reuseModes = !((m_param->intraRefine == 3) || > (m_param->intraRefine == 2 && > parentCTU.m_lumaIntraDir[cuGeom.absPartIdx] > DC_IDX)); > @@ -2299,7 +2295,7 @@ > } > checkIntra(mode, cuGeom, size); > } > - else if (m_param->interRefine < 2) > + else if (!parentCTU.isIntra(cuGeom.absPartIdx) && > m_param->interRefine < 2) > { > mode.cu.copyFromPic(parentCTU, cuGeom, m_csp, false); > uint32_t numPU = parentCTU.getNumPartInter(cuGe > om.absPartIdx); > @@ -2367,7 +2363,7 @@ > checkDQP(mode, cuGeom); > } > > - if (m_param->interRefine < 2 || parentCTU.isIntra(cuGeom.absPa > rtIdx)) > + if (m_param->interRefine < 2) > { > if (m_bTryLossless) > tryLossless(cuGeom); > @@ -2379,10 +2375,11 @@ > checkDQPForSplitPred(*md.bestMode, cuGeom); > } > > - if (!parentCTU.isIntra(cuGeom.absPartIdx) && ( > m_param->interRefine > 1 || (m_param->interRefine && > parentCTU.m_predMode[cuGeom.absPartIdx] == MODE_SKIP && > !mode.cu.isSkipped(0)))) > + if (m_param->interRefine > 1 || (m_param->interRefine && > parentCTU.m_predMode[cuGeom.absPartIdx] == MODE_SKIP && > !mode.cu.isSkipped(0))) > { > m_evaluateInter = 1; > m_param->rdLevel > 4 ? compressInterCU_rd5_6(parentCTU, > cuGeom, qp) : compressInterCU_rd0_4(parentCTU, cuGeom, qp); > + m_evaluateInter = 0; > } > } > if (!bDecidedDepth || split) > diff -r fcd9154fa4e2 -r f5d669bfb2b2 source/encoder/slicetype.cpp > --- a/source/encoder/slicetype.cpp Mon Aug 21 11:50:36 2017 +0530 > +++ b/source/encoder/slicetype.cpp Wed Aug 23 11:41:15 2017 +0530 > @@ -1036,6 +1036,18 @@ > (m_param->lookaheadDepth && m_param->rc.vbvBufferSize))) > { > slicetypeAnalyse(frames, false); > + bool bIsVbv = m_param->rc.vbvBufferSize > 0 && > m_param->rc.vbvMaxBitrate > 0; > + if (m_param->analysisReuseMode == X265_ANALYSIS_LOAD && > m_param->scaleFactor && bIsVbv) > + { > + int numFrames; > + for (numFrames = 0; numFrames < maxSearch; numFrames++) > + { > + Lowres *fenc = frames[numFrames + 1]; > + if (!fenc) > + break; > + } > + vbvLookahead(frames, numFrames, true); > + } > } > > int bframes, brefs; > @@ -1219,6 +1231,18 @@ > > frames[j + 1] = NULL; > slicetypeAnalyse(frames, true); > + bool bIsVbv = m_param->rc.vbvBufferSize > 0 && > m_param->rc.vbvMaxBitrate > 0; > + if (m_param->analysisReuseMode == X265_ANALYSIS_LOAD && > m_param->scaleFactor && bIsVbv) > + { > + int numFrames; > + for (numFrames = 0; numFrames < maxSearch; numFrames++) > + { > + Lowres *fenc = frames[numFrames + 1]; > + if (!fenc) > + break; > + } > + vbvLookahead(frames, numFrames, true); > + } > } > m_outputLock.release(); > } > > _______________________________________________ > x265-devel mailing list > x265-devel@videolan.org > https://mailman.videolan.org/listinfo/x265-devel > >
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel