# HG changeset patch
# User Bhavna Hariharan <[email protected]>
# Date 1527578404 -19800
# Tue May 29 12:50:04 2018 +0530
# Node ID 9db5be89d74cc55cd6aff30c2a576119ca09d8a1
# Parent 9389296cd844bf14850b98ee181772be94d209b9
bug fix: allow split in frame boundary for scaled encodes.
For cases where the entire CTU is not within the frame boundary, the CU must be
allowed to split when the depth from the save encode is not applicable.
diff -r 9389296cd844 -r 9db5be89d74c source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp Mon May 28 14:55:57 2018 +0530
+++ b/source/encoder/analysis.cpp Tue May 29 12:50:04 2018 +0530
@@ -523,14 +523,15 @@
int split = 0;
if (m_param->intraRefine && m_param->intraRefine != 4)
{
- split = m_param->scaleFactor && ((cuGeom.log2CUSize ==
(uint32_t)(g_log2Size[m_param->minCUSize] + 1)) && bDecidedDepth);
+ split = m_param->scaleFactor && bDecidedDepth && (!mightNotSplit ||
+ ((cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param->minCUSize] +
1))));
if (cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param->minCUSize]) &&
!bDecidedDepth)
bAlreadyDecided = false;
}
if (bAlreadyDecided)
{
- if (bDecidedDepth)
+ if (bDecidedDepth && mightNotSplit)
{
Mode& mode = md.pred[0];
md.bestMode = &mode;
@@ -2420,10 +2421,11 @@
m_refineLevel = m_param->interRefine;
else
m_refineLevel = m_frame->m_classifyFrame ? 1 : 3;
- int split = (m_param->scaleFactor && m_refineLevel && cuGeom.log2CUSize ==
(uint32_t)(g_log2Size[m_param->minCUSize] + 1) && bDecidedDepth);
+ int split = (m_param->scaleFactor && bDecidedDepth && (!mightNotSplit ||
+ (m_refineLevel && cuGeom.log2CUSize ==
(uint32_t)(g_log2Size[m_param->minCUSize] + 1))));
td.split = split;
- if (bDecidedDepth)
+ if (bDecidedDepth && mightNotSplit)
{
setLambdaFromQP(parentCTU, qp, lqp);
# HG changeset patch
# User Bhavna Hariharan <[email protected]>
# Date 1527578404 -19800
# Tue May 29 12:50:04 2018 +0530
# Node ID 9db5be89d74cc55cd6aff30c2a576119ca09d8a1
# Parent 9389296cd844bf14850b98ee181772be94d209b9
bug fix: allow split in frame boundary for scaled encodes.
For cases where the entire CTU is not within the frame boundary, the CU must be
allowed to split when the depth from the save encode is not applicable.
diff -r 9389296cd844 -r 9db5be89d74c source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp Mon May 28 14:55:57 2018 +0530
+++ b/source/encoder/analysis.cpp Tue May 29 12:50:04 2018 +0530
@@ -523,14 +523,15 @@
int split = 0;
if (m_param->intraRefine && m_param->intraRefine != 4)
{
- split = m_param->scaleFactor && ((cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param->minCUSize] + 1)) && bDecidedDepth);
+ split = m_param->scaleFactor && bDecidedDepth && (!mightNotSplit ||
+ ((cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param->minCUSize] + 1))));
if (cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param->minCUSize]) && !bDecidedDepth)
bAlreadyDecided = false;
}
if (bAlreadyDecided)
{
- if (bDecidedDepth)
+ if (bDecidedDepth && mightNotSplit)
{
Mode& mode = md.pred[0];
md.bestMode = &mode;
@@ -2420,10 +2421,11 @@
m_refineLevel = m_param->interRefine;
else
m_refineLevel = m_frame->m_classifyFrame ? 1 : 3;
- int split = (m_param->scaleFactor && m_refineLevel && cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param->minCUSize] + 1) && bDecidedDepth);
+ int split = (m_param->scaleFactor && bDecidedDepth && (!mightNotSplit ||
+ (m_refineLevel && cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param->minCUSize] + 1))));
td.split = split;
- if (bDecidedDepth)
+ if (bDecidedDepth && mightNotSplit)
{
setLambdaFromQP(parentCTU, qp, lqp);
_______________________________________________
x265-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/x265-devel