# HG changeset patch
# User Mahesh Pittala <[email protected]>
# Date 1461582611 -19800
# Mon Apr 25 16:40:11 2016 +0530
# Node ID dfc3c2fefc9a0124ecd01967269e06c7abf4d4e5
# Parent 02d79be487d7f825c961d15535a8681a201da3b1
level & tiers: fix
1) uhd-bd: lower bitrate to level-5.1 high tier as per uhd-bd spec if user
specifies
higher bitrate than level-5.1 high tier
2) if no tier specifed by user then set to main and set bitrate accordingly
3) enable warnings for levels and tiers when encoder changes
4) when sourceHeight is 1080, it is padded by some value to become multiple of
the
minimum CU size(for ex- 1088) so just moved down those calculations after
uhd-bd.
diff -r 02d79be487d7 -r dfc3c2fefc9a source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp Sun Apr 17 21:07:28 2016 +0000
+++ b/source/encoder/encoder.cpp Mon Apr 25 16:40:11 2016 +0530
@@ -1850,16 +1850,6 @@
m_conformanceWindow.rightOffset = padsize;
}
- /* set pad size if height is not multiple of the minimum CU size */
- if (p->sourceHeight & (p->minCUSize - 1))
- {
- uint32_t rem = p->sourceHeight & (p->minCUSize - 1);
- uint32_t padsize = p->minCUSize - rem;
- p->sourceHeight += padsize;
-
- m_conformanceWindow.bEnabled = true;
- m_conformanceWindow.bottomOffset = padsize;
- }
if (p->bDistributeModeAnalysis && p->analysisMode)
{
p->analysisMode = X265_ANALYSIS_OFF;
@@ -1890,10 +1880,17 @@
if (p->uhdBluray)
{
+ int disableUhdBd = 0;
p->bEnableAccessUnitDelimiters = 1;
p->vui.aspectRatioIdc = 1;
p->bEmitHRDSEI = 1;
- int disableUhdBd = 0;
+
+ if (p->levelIdc < 51 || p->levelIdc > 51) x265_log(p,
X265_LOG_WARNING, "uhd-bd: level set to 5.1\n");
+ if (!p->bHighTier)
+ {
+ x265_log(p, X265_LOG_WARNING, "uhd-bd: enabling high tier\n");
+ p->bHighTier = 1;
+ }
if (!p->bRepeatHeaders)
{
x265_log(p, X265_LOG_WARNING, "uhd-bd: Turning on
repeat-headers\n");
@@ -1970,7 +1967,16 @@
x265_log(p, X265_LOG_ERROR, "uhd-bd: Disabled\n");
}
}
+ /* set pad size if height is not multiple of the minimum CU size */
+ if (p->sourceHeight & (p->minCUSize - 1))
+ {
+ uint32_t rem = p->sourceHeight & (p->minCUSize - 1);
+ uint32_t padsize = p->minCUSize - rem;
+ p->sourceHeight += padsize;
+ m_conformanceWindow.bEnabled = true;
+ m_conformanceWindow.bottomOffset = padsize;
+ }
if (p->bLogCuStats)
x265_log(p, X265_LOG_WARNING, "--cu-stats option is now deprecated\n");
diff -r 02d79be487d7 -r dfc3c2fefc9a source/encoder/level.cpp
--- a/source/encoder/level.cpp Sun Apr 17 21:07:28 2016 +0000
+++ b/source/encoder/level.cpp Mon Apr 25 16:40:11 2016 +0530
@@ -209,7 +209,7 @@
else
vps.ptl.tierFlag = Level::MAIN;
#undef CHECK_RANGE
- if (param.uhdBluray || param.bHighTier)
+ if (param.bHighTier)
vps.ptl.tierFlag = Level::HIGH;
vps.ptl.levelIdc = levels[i].levelEnum;
vps.ptl.minCrForLevel = levels[i].minCompressionRatio;
@@ -293,13 +293,16 @@
vps.maxDecPicBuffering = X265_MIN(MAX_NUM_REF, X265_MAX(vps.numReorderPics
+ 2, (uint32_t)param.maxNumReferences) + 1);
/* no level specified by user, just auto-detect from the configuration */
- if (param.levelIdc <= 0)
+ if ((!param.uhdBluray) && param.levelIdc <= 0)
+ {
+ x265_log(¶m, X265_LOG_INFO, "level is auto-detected from the
configuration\n");
return true;
+ }
uint32_t level = 0;
- while (levels[level].levelIdc != param.levelIdc && level + 1 <
sizeof(levels) / sizeof(levels[0]))
+ while (levels[level].levelIdc != (param.uhdBluray ? 51 : param.levelIdc)
&& level + 1 < sizeof(levels) / sizeof(levels[0]))
level++;
- if (levels[level].levelIdc != param.levelIdc)
+ if (levels[level].levelIdc != (param.uhdBluray ? 51 : param.levelIdc))
{
x265_log(¶m, X265_LOG_ERROR, "specified level %d does not
exist\n", param.levelIdc);
return false;
@@ -332,7 +335,6 @@
x265_log(¶m, X265_LOG_ERROR, "frame rate is out of range for
specified level\n");
return false;
}
-
if ((uint32_t)param.rc.vbvMaxBitrate > (highTier ? l.maxBitrateHigh :
l.maxBitrateMain))
{
param.rc.vbvMaxBitrate = highTier ? l.maxBitrateHigh :
l.maxBitrateMain;
@@ -349,8 +351,8 @@
case X265_RC_ABR:
if ((uint32_t)param.rc.bitrate > (highTier ? l.maxBitrateHigh :
l.maxBitrateMain))
{
- param.rc.bitrate = l.maxBitrateHigh;
- x265_log(¶m, X265_LOG_WARNING, "lowering target bitrate to
High tier limit of %dKbps\n", param.rc.bitrate);
+ param.rc.bitrate = highTier ? l.maxBitrateHigh : l.maxBitrateMain;
+ x265_log(¶m, X265_LOG_WARNING, "lowering target bitrate to %s
tier limit of %dKbps\n", (highTier ? "high" : "main"), param.rc.bitrate);
}
break;
_______________________________________________
x265-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/x265-devel