[x265] [PATCH] Re-evaluate vbv lookahead in the encode that uses
bhavna at multicorewareinc.com
bhavna at multicorewareinc.com
Thu Aug 31 13:01:03 CEST 2017
# HG changeset patch
# User Bhavna Hariharan <bhavna at 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.
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(cuGeom.absPartIdx);
@@ -2367,7 +2363,7 @@
checkDQP(mode, cuGeom);
}
- if (m_param->interRefine < 2 || parentCTU.isIntra(cuGeom.absPartIdx))
+ 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();
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265-clone.patch
Type: text/x-patch
Size: 7049 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20170831/4f63a649/attachment.bin>
More information about the x265-devel
mailing list