[x265] [PATCH] Introducing cli/param to signal content light level SEI

aruna at multicorewareinc.com aruna at multicorewareinc.com
Fri May 24 06:40:16 CEST 2019


# HG changeset patch
# User Aruna Matheswaran
# Date 1558620527 -19800
#      Thu May 23 19:38:47 2019 +0530
# Node ID b57fe10e387942335fb88bc49e9d746a5d7503f3
# Parent  220cdb4328a1e2c7419546b50c4d07e652ae1537
Introducing cli/param to signal content light level SEI.

This patch also fixes indentation issues.

diff -r 220cdb4328a1 -r b57fe10e3879 doc/reST/cli.rst
--- a/doc/reST/cli.rst	Thu May 23 11:28:44 2019 +0800
+++ b/doc/reST/cli.rst	Thu May 23 19:38:47 2019 +0530
@@ -2154,6 +2154,12 @@
 	Note that this string value will need to be escaped or quoted to
 	protect against shell expansion on many platforms. No default.
 
+.. option:: --cll, --no-cll
+
+    Emit content light level SEI. Enabled automatically when :option:`--dolby-vision-profile` 8.1
+    is specified. When enabled, signals max-cll and max-fall as 0 if :option:`max-cll` is unspecified.
+    Default enabled.
+
 .. option:: --hdr, --no-hdr
 
 	Force signalling of HDR parameters in SEI packets. Enabled
diff -r 220cdb4328a1 -r b57fe10e3879 source/CMakeLists.txt
--- a/source/CMakeLists.txt	Thu May 23 11:28:44 2019 +0800
+++ b/source/CMakeLists.txt	Thu May 23 19:38:47 2019 +0530
@@ -29,7 +29,7 @@
 option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF)
 mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)
 # X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 175)
+set(X265_BUILD 176)
 configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
                "${PROJECT_BINARY_DIR}/x265.def")
 configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff -r 220cdb4328a1 -r b57fe10e3879 source/common/param.cpp
--- a/source/common/param.cpp	Thu May 23 11:28:44 2019 +0800
+++ b/source/common/param.cpp	Thu May 23 19:38:47 2019 +0530
@@ -332,6 +332,7 @@
     /* SEI messages */
     param->preferredTransferCharacteristics = -1;
     param->pictureStructure = -1;
+    param->bEmitCLL = 1;
 
     /* SVT Hevc Encoder specific params */
     param->bEnableSvtHevc = 0;
@@ -573,10 +574,10 @@
             param->deblockingFilterBetaOffset = 1;
             param->deblockingFilterTCOffset = 1;
         }
-		else if (!strcmp(tune, "vmaf"))  /*Adding vmaf for x265 + SVT-HEVC integration support*/
-		{
-			/*vmaf is under development, currently x265 won't support vmaf*/
-		}
+        else if (!strcmp(tune, "vmaf"))  /*Adding vmaf for x265 + SVT-HEVC integration support*/
+        {
+            /*vmaf is under development, currently x265 won't support vmaf*/
+        }
         else
             return -1;
     }
@@ -1269,6 +1270,7 @@
 #endif
         OPT("fades") p->bEnableFades = atobool(value);
         OPT("field") p->bField = atobool( value );
+        OPT("cll") p->bEmitCLL = atobool(value);
         else
             return X265_PARAM_BAD_NAME;
     }
@@ -2016,7 +2018,8 @@
         p->vui.defDispWinRightOffset, p->vui.defDispWinBottomOffset);
     if (p->masteringDisplayColorVolume)
         s += sprintf(s, " master-display=%s", p->masteringDisplayColorVolume);
-    s += sprintf(s, " max-cll=%hu,%hu", p->maxCLL, p->maxFALL);
+    if (p->bEmitCLL)
+        s += sprintf(s, "cll=%hu,%hu", p->maxCLL, p->maxFALL);
     s += sprintf(s, " min-luma=%hu", p->minLuma);
     s += sprintf(s, " max-luma=%hu", p->maxLuma);
     s += sprintf(s, " log2-max-poc-lsb=%d", p->log2MaxPocLsb);
@@ -2314,6 +2317,7 @@
     else dst->masteringDisplayColorVolume = NULL;
     dst->maxLuma = src->maxLuma;
     dst->minLuma = src->minLuma;
+    dst->bEmitCLL = src->bEmitCLL;
     dst->maxCLL = src->maxCLL;
     dst->maxFALL = src->maxFALL;
     dst->log2MaxPocLsb = src->log2MaxPocLsb;
@@ -2439,7 +2443,7 @@
     svtHevcParam->frameRateNumerator = 0;
     svtHevcParam->frameRateDenominator = 0;
     svtHevcParam->encoderBitDepth = 8;
-	svtHevcParam->encoderColorFormat = EB_YUV420;
+    svtHevcParam->encoderColorFormat = EB_YUV420;
     svtHevcParam->compressedTenBitFormat = 0;
     svtHevcParam->rateControlMode = 0;
     svtHevcParam->sceneChangeDetection = 1;
@@ -2477,11 +2481,11 @@
     svtHevcParam->maxCLL = 0;
     svtHevcParam->maxFALL = 0;
     svtHevcParam->useMasteringDisplayColorVolume = 0;
-	svtHevcParam->useNaluFile = 0;
-	svtHevcParam->whitePointX = 0;
-	svtHevcParam->whitePointY = 0;
-	svtHevcParam->maxDisplayMasteringLuminance = 0;
-	svtHevcParam->minDisplayMasteringLuminance = 0;
+    svtHevcParam->useNaluFile = 0;
+    svtHevcParam->whitePointX = 0;
+    svtHevcParam->whitePointY = 0;
+    svtHevcParam->maxDisplayMasteringLuminance = 0;
+    svtHevcParam->minDisplayMasteringLuminance = 0;
     svtHevcParam->dolbyVisionProfile = 0;
     svtHevcParam->targetSocket = -1;
     svtHevcParam->logicalProcessors = 0;
@@ -2513,7 +2517,7 @@
         else if (!strcmp(tune, "ssim")) svtHevcParam->tune = 1;
         else if (!strcmp(tune, "grain")) svtHevcParam->tune = 0;
         else if (!strcmp(tune, "animation")) svtHevcParam->tune = 0;
-		else if (!strcmp(tune, "vmaf")) svtHevcParam->tune = 2;
+        else if (!strcmp(tune, "vmaf")) svtHevcParam->tune = 2;
         else if (!strcmp(tune, "zero-latency") || !strcmp(tune, "zerolatency")) svtHevcParam->latencyMode = 1;
         else  return -1;
     }
diff -r 220cdb4328a1 -r b57fe10e3879 source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp	Thu May 23 11:28:44 2019 +0800
+++ b/source/encoder/encoder.cpp	Thu May 23 19:38:47 2019 +0530
@@ -444,8 +444,6 @@
 
     m_nalList.m_annexB = !!m_param->bAnnexB;
 
-    m_emitCLLSEI = p->maxCLL || p->maxFALL || (p->dolbyProfile == 81);
-
     if (m_param->naluFile)
     {
         m_naluFile = x265_fopen(m_param->naluFile, "r");
@@ -2462,10 +2460,13 @@
 
     if (m_param->bEmitHDRSEI)
     {
-        SEIContentLightLevel cllsei;
-        cllsei.max_content_light_level = m_param->maxCLL;
-        cllsei.max_pic_average_light_level = m_param->maxFALL;
-        cllsei.writeSEImessages(bs, m_sps, NAL_UNIT_PREFIX_SEI, list, m_param->bSingleSeiNal);
+        if (m_param->bEmitCLL)
+        {
+            SEIContentLightLevel cllsei;
+            cllsei.max_content_light_level = m_param->maxCLL;
+            cllsei.max_pic_average_light_level = m_param->maxFALL;
+            cllsei.writeSEImessages(bs, m_sps, NAL_UNIT_PREFIX_SEI, list, m_param->bSingleSeiNal);
+        }
 
         if (m_param->masteringDisplayColorVolume)
         {
@@ -2711,7 +2712,7 @@
     p->vui.matrixCoeffs = dovi[doviProfile].matrixCoeffs;
 
     if (dovi[doviProfile].doviProfileId == 81)
-        p->bEmitHDRSEI = 1;
+        p->bEmitHDRSEI = p->bEmitCLL = 1;
 
     if (dovi[doviProfile].doviProfileId == 50)
         p->crQpOffset = 3;
diff -r 220cdb4328a1 -r b57fe10e3879 source/encoder/encoder.h
--- a/source/encoder/encoder.h	Thu May 23 11:28:44 2019 +0800
+++ b/source/encoder/encoder.h	Thu May 23 19:38:47 2019 +0530
@@ -203,7 +203,6 @@
     ScalingList        m_scalingList;      // quantization matrix information
     Window             m_conformanceWindow;
 
-    bool               m_emitCLLSEI;
     bool               m_bZeroLatency;     // x265_encoder_encode() returns NALs for the input picture, zero lag
     bool               m_aborted;          // fatal error detected
     bool               m_reconfigure;      // Encoder reconfigure in progress
diff -r 220cdb4328a1 -r b57fe10e3879 source/x265.h
--- a/source/x265.h	Thu May 23 11:28:44 2019 +0800
+++ b/source/x265.h	Thu May 23 19:38:47 2019 +0530
@@ -1780,6 +1780,9 @@
 
     /* Enable field coding */
     int bField;
+
+    /*Emit content light level info SEI*/
+    int         bEmitCLL;
 } x265_param;
 /* x265_param_alloc:
  *  Allocates an x265_param instance. The returned param structure is not
diff -r 220cdb4328a1 -r b57fe10e3879 source/x265cli.h
--- a/source/x265cli.h	Thu May 23 11:28:44 2019 +0800
+++ b/source/x265cli.h	Thu May 23 19:38:47 2019 +0530
@@ -336,6 +336,8 @@
     { "svt-fps-in-vps",  no_argument  , NULL, 0 },
     { "no-svt-fps-in-vps",  no_argument  , NULL, 0 },
 #endif
+    { "cll", no_argument, NULL, 0 },
+    { "no-cll", no_argument, NULL, 0 },
     { 0, 0, 0, 0 },
     { 0, 0, 0, 0 },
     { 0, 0, 0, 0 },
@@ -602,7 +604,8 @@
     H1("   --chromaloc <integer>         Specify chroma sample location (0 to 5). Default of %d\n", param->vui.chromaSampleLocTypeTopField);
     H0("   --master-display <string>     SMPTE ST 2086 master display color volume info SEI (HDR)\n");
     H0("                                    format: G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min)\n");
-    H0("   --max-cll <string>            Emit content light level info SEI as \"cll,fall\" (HDR)\n");
+    H0("   --max-cll <string>            Specify content light level info SEI as \"cll,fall\" (HDR).\n");
+    H0("   --[no-]cll                    Emit content light level info SEI. Default %s\n", OPT(param->bEmitCLL));
     H0("   --[no-]hdr                    Control dumping of HDR SEI packet. If max-cll or master-display has non-zero values, this is enabled. Default %s\n", OPT(param->bEmitHDRSEI));
     H0("   --[no-]hdr-opt                Add luma and chroma offsets for HDR/WCG content. Default %s\n", OPT(param->bHDROpt));
     H0("   --min-luma <integer>          Minimum luma plane value of input source picture\n");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265_clone.patch
Type: text/x-patch
Size: 9168 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20190524/49593af5/attachment.bin>


More information about the x265-devel mailing list