[x265] [PATCH] api: add --allow-non-conformance param, default to False
Steve Borho
steve at borho.org
Sun Apr 5 20:00:41 CEST 2015
# HG changeset patch
# User Steve Borho <steve at borho.org>
# Date 1428256600 18000
# Sun Apr 05 12:56:40 2015 -0500
# Node ID 775436f7364dd763c6fcd35ee2b80a5d0831f666
# Parent ebe5e57c4b45b45338035a1009b64585f21d66d5
api: add --allow-non-conformance param, default to False
The encoder will now abort any encode that would result in a non-conformant
stream, unless --allow-non-conformance is specified
diff -r ebe5e57c4b45 -r 775436f7364d doc/reST/cli.rst
--- a/doc/reST/cli.rst Sat Apr 04 15:11:39 2015 -0500
+++ b/doc/reST/cli.rst Sun Apr 05 12:56:40 2015 -0500
@@ -464,11 +464,22 @@
HEVC specification. If x265 detects that the total reference count
is greater than 8, it will issue a warning that the resulting stream
is non-compliant and it signals the stream as profile NONE and level
- NONE but still allows the encode to continue. Compliant HEVC
+ NONE and will abort the encode unless
+ :option:`--allow-non-conformance` it specified. Compliant HEVC
decoders may refuse to decode such streams.
Default 3
+.. option:: --allow-non-conformance, --no-allow-non-conformance
+
+ Allow libx265 to generate a bitstream with profile and level NONE.
+ By default it will abort any encode which does not meet strict level
+ compliance. The two most likely causes for non-conformance are
+ :option:`--ctu` being too small, :option:`--ref` being too high,
+ or the bitrate or resolution being out of specification.
+
+ Default: disabled
+
.. note::
:option:`--profile`, :option:`--level-idc`, and
:option:`--high-tier` are only intended for use when you are
@@ -476,7 +487,7 @@
limitations and must constrain the bitstream within those limits.
Specifying a profile or level may lower the encode quality
parameters to meet those requirements but it will never raise
- them.
+ them. It may enable VBV constraints on a CRF encode.
Mode decision / Analysis
========================
diff -r ebe5e57c4b45 -r 775436f7364d source/CMakeLists.txt
--- a/source/CMakeLists.txt Sat Apr 04 15:11:39 2015 -0500
+++ b/source/CMakeLists.txt Sun Apr 05 12:56:40 2015 -0500
@@ -30,7 +30,7 @@
mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)
# X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 52)
+set(X265_BUILD 53)
configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
"${PROJECT_BINARY_DIR}/x265.def")
configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff -r ebe5e57c4b45 -r 775436f7364d source/common/param.cpp
--- a/source/common/param.cpp Sat Apr 04 15:11:39 2015 -0500
+++ b/source/common/param.cpp Sun Apr 05 12:56:40 2015 -0500
@@ -565,6 +565,7 @@
p->levelIdc = atoi(value);
}
OPT("high-tier") p->bHighTier = atobool(value);
+ OPT("allow-non-conformance") p->bAllowNonConformance = atobool(value);
OPT2("log-level", "log")
{
p->logLevel = atoi(value);
diff -r ebe5e57c4b45 -r 775436f7364d source/encoder/api.cpp
--- a/source/encoder/api.cpp Sat Apr 04 15:11:39 2015 -0500
+++ b/source/encoder/api.cpp Sun Apr 05 12:56:40 2015 -0500
@@ -72,6 +72,13 @@
// will detect and set profile/tier/level in VPS
determineLevel(*param, encoder->m_vps);
+ if (!param->bAllowNonConformance && encoder->m_vps.ptl.profileIdc == Profile::NONE)
+ {
+ x265_log(param, X265_LOG_INFO, "non-conformant bitstreams not allowed (--allow-non-conformance)\n");
+ delete encoder;
+ return NULL;
+ }
+
encoder->create();
if (encoder->m_aborted)
{
diff -r ebe5e57c4b45 -r 775436f7364d source/x265.h
--- a/source/x265.h Sat Apr 04 15:11:39 2015 -0500
+++ b/source/x265.h Sun Apr 05 12:56:40 2015 -0500
@@ -522,6 +522,10 @@
* performance. Value must be between 1 and 16, default is 3 */
int maxNumReferences;
+ /* Allow libx265 to emit HEVC bitstreams which do not meet strict level
+ * requirements. Defaults to false */
+ int bAllowNonConformance;
+
/*== Bitstream Options ==*/
/* Flag indicating whether VPS, SPS and PPS headers should be output with
diff -r ebe5e57c4b45 -r 775436f7364d source/x265cli.h
--- a/source/x265cli.h Sat Apr 04 15:11:39 2015 -0500
+++ b/source/x265cli.h Sun Apr 05 12:56:40 2015 -0500
@@ -51,6 +51,8 @@
{ "level-idc", required_argument, NULL, 0 },
{ "high-tier", no_argument, NULL, 0 },
{ "no-high-tier", no_argument, NULL, 0 },
+ { "allow-non-conformance",no_argument, NULL, 0 },
+ { "no-allow-non-conformance",no_argument, NULL, 0 },
{ "csv", required_argument, NULL, 0 },
{ "no-cu-stats", no_argument, NULL, 0 },
{ "cu-stats", no_argument, NULL, 0 },
@@ -258,6 +260,7 @@
H0(" --profile <string> Enforce an encode profile: main, main10, mainstillpicture\n");
H0(" --level-idc <integer|float> Force a minimum required decoder level (as '5.0' or '50')\n");
H0(" --[no-]high-tier If a decoder level is specified, this modifier selects High tier of that level\n");
+ H0(" --[no-]allow-non-conformance Allow the encoder to generate profile NONE bitstreams. Default %s\n", OPT(param->bAllowNonConformance));
H0("\nThreading, performance:\n");
H0(" --pools <integer,...> Comma separated thread count per thread pool (pool per NUMA node)\n");
H0(" '-' implies no threads on node, '+' implies one thread per core on node\n");
More information about the x265-devel
mailing list