[x265] [PATCH] Added command line options to generate a VUI and add it to the coded bitstream

dtyx265 at gmail.com dtyx265 at gmail.com
Wed Feb 19 19:01:04 CET 2014


# HG changeset patch
# User David T Yuen <dtyx265 at gmail.com>
# Date 1392832822 28800
# Node ID 8ef0c14054879a7a0ba7720ecb3a640e6b3767d1
# Parent  1c78bd13a14f3d5227c4b961664af97f86a8810d
Added command line options to generate a VUI and add it to the coded bitstream

diff -r 1c78bd13a14f -r 8ef0c1405487 source/Lib/TLibCommon/TComSlice.h
--- a/source/Lib/TLibCommon/TComSlice.h	Wed Feb 19 09:46:46 2014 -0800
+++ b/source/Lib/TLibCommon/TComSlice.h	Wed Feb 19 10:00:22 2014 -0800
@@ -604,6 +604,7 @@
     bool m_frameFieldInfoPresentFlag;
     bool m_hrdParametersPresentFlag;
     bool m_bitstreamRestrictionFlag;
+    bool m_tilesFixedStructureFlag;
     bool m_motionVectorsOverPicBoundariesFlag;
     bool m_restrictedRefPicListsFlag;
     int  m_minSpatialSegmentationIdc;
@@ -638,6 +639,7 @@
         , m_frameFieldInfoPresentFlag(false)
         , m_hrdParametersPresentFlag(false)
         , m_bitstreamRestrictionFlag(false)
+        , m_tilesFixedStructureFlag(false)
         , m_motionVectorsOverPicBoundariesFlag(true)
         , m_restrictedRefPicListsFlag(1)
         , m_minSpatialSegmentationIdc(0)
@@ -737,6 +739,10 @@
 
     void setBitstreamRestrictionFlag(bool i) { m_bitstreamRestrictionFlag = i; }
 
+    bool getTilesFixedStructureFlag() { return m_tilesFixedStructureFlag; }
+
+    void setTilesFixedStructureFlag(bool i) { m_tilesFixedStructureFlag = i; }
+
     bool getMotionVectorsOverPicBoundariesFlag() { return m_motionVectorsOverPicBoundariesFlag; }
 
     void setMotionVectorsOverPicBoundariesFlag(bool i) { m_motionVectorsOverPicBoundariesFlag = i; }
diff -r 1c78bd13a14f -r 8ef0c1405487 source/Lib/TLibEncoder/TEncCfg.h
--- a/source/Lib/TLibEncoder/TEncCfg.h	Wed Feb 19 09:46:46 2014 -0800
+++ b/source/Lib/TLibEncoder/TEncCfg.h	Wed Feb 19 10:00:22 2014 -0800
@@ -151,6 +151,14 @@
     int       m_maxBitsPerMinCuDenom;                         ///< Indicates an upper bound for the number of bits of coding_unit() data
     int       m_log2MaxMvLengthHorizontal;                    ///< Indicate the maximum absolute value of a decoded horizontal MV component in quarter-pel luma units
     int       m_log2MaxMvLengthVertical;                      ///< Indicate the maximum absolute value of a decoded vertical MV component in quarter-pel luma units
+    bool      m_fieldSeqFlag;                                 ///< Indicates that each picture is a field and has its own SEI timing message
+    bool      m_vuiTimingInfoPresentFlag;                     ///< Indicates that timing info is added to the VUI
+    int       m_vuiNumUnitsInTick;                            ///< The number of system ticks in an h265 tick where an h265 tick is in units of system ticks per frame
+    int       m_vuiTimeScale;                                 ///< The number of system ticks per second
+    bool      m_vuiHrdParametersPresentFlag;                  ///< Indicates HRD parameters are to be added to the VUI
+    bool      m_subPicHrdParamsPresentFlag;                   ///< Indicates that sub pic parameters should be added to the HRD
+    bool      m_restrictedRefPicListsFlag;                    ///< Indicates all P and B slices have the same reference pic list 0 and all B slices have the same reference pic list 1
+    bool      m_tilesFixedStructureFlag;                      ///< Indicates each PPS in the CVS have the same tile structure fields
 
 public:
 
@@ -305,6 +313,22 @@
     bool getNonPackedConstraintFlag() const { return m_nonPackedConstraintFlag; }
 
     bool getFrameOnlyConstraintFlag() const { return m_frameOnlyConstraintFlag; }
+
+    bool getFieldSeqFlag() const { return m_fieldSeqFlag; }
+
+    bool getVuiTimingInfoPresentFlag() const { return m_vuiTimingInfoPresentFlag; }
+
+    int getVuiNumUnitsInTick() const { return m_vuiNumUnitsInTick; }
+
+    int getVuiTimeScale() const { return m_vuiTimeScale; }
+
+    bool getVuiHrdParametersPresentFlag() const { return m_vuiHrdParametersPresentFlag; }
+ 
+    bool getSubPicHrdParamsPresentFlag() const { return m_subPicHrdParamsPresentFlag; }
+
+    bool getRestrictedRefPicListsFlag() const { return m_restrictedRefPicListsFlag; }
+
+    bool getTilesFixedStructureFlag() const { return m_tilesFixedStructureFlag; }
 };
 }
 //! \}
diff -r 1c78bd13a14f -r 8ef0c1405487 source/Lib/TLibEncoder/TEncSbac.cpp
--- a/source/Lib/TLibEncoder/TEncSbac.cpp	Wed Feb 19 09:46:46 2014 -0800
+++ b/source/Lib/TLibEncoder/TEncSbac.cpp	Wed Feb 19 10:00:22 2014 -0800
@@ -665,7 +665,7 @@
     WRITE_FLAG(vui->getBitstreamRestrictionFlag(),              "bitstream_restriction_flag");
     if (vui->getBitstreamRestrictionFlag())
     {
-        WRITE_FLAG(0,                                                "tiles_fixed_structure_flag");
+        WRITE_FLAG(vui->getTilesFixedStructureFlag(),             "tiles_fixed_structure_flag");
         WRITE_FLAG(vui->getMotionVectorsOverPicBoundariesFlag(),  "motion_vectors_over_pic_boundaries_flag");
         WRITE_FLAG(vui->getRestrictedRefPicListsFlag(),           "restricted_ref_pic_lists_flag");
         WRITE_UVLC(vui->getMinSpatialSegmentationIdc(),           "min_spatial_segmentation_idc");
diff -r 1c78bd13a14f -r 8ef0c1405487 source/common/common.cpp
--- a/source/common/common.cpp	Wed Feb 19 09:46:46 2014 -0800
+++ b/source/common/common.cpp	Wed Feb 19 10:00:22 2014 -0800
@@ -221,6 +221,35 @@
     /* Quality Measurement Metrics */
     param->bEnablePsnr = 0;
     param->bEnableSsim = 0;
+
+    /* Video Usability Information (VUI) */
+    param->bEnableVuiParametersPresentFlag = 0;
+    param->bEnableAspectRatioIdc = 0;
+    param->aspectRatioIdc = 0;
+    param->sarWidth = 0;
+    param->sarHeight = 0;
+    param->bEnableOverscanAppropriateFlag = 0;
+    param->bEnableVideoSignalTypePresentFlag = 0;
+    param->videoFormat = 5;
+    param->bEnableVideoFullRangeFlag = 0;
+    param->bEnableColorDescriptionPresentFlag = 0;
+    param->colorPrimaries = 2;
+    param->transferCharacteristics = 2;
+    param->matrixCoeffs = 2;
+    param->bEnableChromaLocInfoPresentFlag = 0;
+    param->chromaSampleLocTypeTopField = 0;
+    param->chromaSampleLocTypeBottomField = 0;
+    param->bEnableFieldSeqFlag = 0;
+    param->bEnableFrameFieldInfoPresentFlag = 0;
+    param->bEnableDefaultDisplayWindowFlag = 0;
+    param->defDispWinLeftOffset = 0;
+    param->defDispWinRightOffset = 0;
+    param->defDispWinTopOffset = 0;
+    param->defDispWinBottomOffset = 0;
+    param->bEnableVuiTimingInfoPresentFlag = 0;
+    param->bEnableVuiHrdParametersPresentFlag = 0;
+    param->bEnableBitstreamRestrictionFlag = 0;
+    param->bEnableSubPicHrdParamsPresentFlag = 0;
 }
 
 extern "C"
@@ -764,6 +793,200 @@
     OPT("me")        p->searchMethod = parseName(value, x265_motion_est_names, berror);
     OPT("cutree")    p->rc.cuTree = bvalue;
     OPT("no-cutree") p->rc.cuTree = bvalue;
+    OPT("vui")
+    {
+        p->bEnableVuiParametersPresentFlag = bvalue;
+        p->bEnableAspectRatioIdc = bvalue;
+        p->bEnableOverscanInfoPresentFlag = bvalue;
+        p->bEnableVideoSignalTypePresentFlag = bvalue;
+        p->bEnableColorDescriptionPresentFlag = bvalue;
+        p->bEnableChromaLocInfoPresentFlag = bvalue;
+        p->bEnableFieldSeqFlag = bvalue;
+        p->bEnableFrameFieldInfoPresentFlag = bvalue;
+        p->bEnableDefaultDisplayWindowFlag = bvalue;
+        p->bEnableVuiTimingInfoPresentFlag = bvalue;
+        p->bEnableVuiHrdParametersPresentFlag = bvalue;
+        p->bEnableBitstreamRestrictionFlag = bvalue;
+        p->bEnableSubPicHrdParamsPresentFlag = bvalue;
+    }
+    OPT("sar")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableAspectRatioIdc = bvalue;
+        p->aspectRatioIdc = atoi(value);
+    }
+    OPT("extended-sar")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableAspectRatioIdc = bvalue;
+        p->aspectRatioIdc = 255;
+        sscanf(value, "%dx%d", &p->sarWidth, &p->sarHeight);
+    }
+    OPT("overscan") 
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        if (!strcmp(value, "show"))
+            p->bEnableOverscanInfoPresentFlag = bvalue;
+        else if (!strcmp(value, "crop"))
+        {
+            p->bEnableOverscanInfoPresentFlag = bvalue;
+            p->bEnableOverscanAppropriateFlag = bvalue;
+        }
+    }
+    OPT("videoformat")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableVideoSignalTypePresentFlag = bvalue;
+        if (!strcmp(value, "component"))
+            p->videoFormat = 0;
+        else if (!strcmp(value, "pal"))
+            p->videoFormat = 1;
+        else if (!strcmp(value, "ntsc"))
+            p->videoFormat = 2;
+        else if (!strcmp(value, "secam"))
+            p->videoFormat = 3;
+        else if (!strcmp(value, "mac"))
+            p->videoFormat = 4;
+        else if (!strcmp(value, "undef"))
+            p->videoFormat = 5;
+    }
+    OPT("range")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableVideoSignalTypePresentFlag = bvalue;
+        p->bEnableVideoFullRangeFlag = bvalue;
+    }
+    OPT("colorprim")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableVideoSignalTypePresentFlag = bvalue;
+        p->bEnableColorDescriptionPresentFlag = bvalue;
+        if (!strcmp(value, "bt709"))
+            p->colorPrimaries = 1;
+        else if (!strcmp(value, "undef"))
+            p->colorPrimaries = 2;
+        else if (!strcmp(value, "bt470m"))
+            p->colorPrimaries = 4;
+        else if (!strcmp(value, "bt470bg"))
+            p->colorPrimaries = 5;
+        else if (!strcmp(value, "smpte170m"))
+            p->colorPrimaries = 6;
+        else if (!strcmp(value, "smpte240m"))
+            p->colorPrimaries = 7;
+        else if (!strcmp(value, "film"))
+            p->colorPrimaries = 8;
+        else if (!strcmp(value, "bt2020"))
+            p->colorPrimaries = 9;
+    }
+    OPT("transfer")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableVideoSignalTypePresentFlag = bvalue;
+        p->bEnableColorDescriptionPresentFlag = bvalue;
+        if (!strcmp(value, "bt709"))
+            p->transferCharacteristics = 1;
+        else if (!strcmp(value, "undef"))
+            p->transferCharacteristics = 2;
+        else if (!strcmp(value, "bt470m"))
+            p->transferCharacteristics = 4;
+        else if (!strcmp(value, "bt470bg"))
+            p->transferCharacteristics = 5;
+        else if (!strcmp(value, "smpte170m"))
+            p->transferCharacteristics = 6;
+        else if (!strcmp(value, "smpte240m"))
+            p->transferCharacteristics = 7;
+        else if (!strcmp(value, "linear"))
+            p->transferCharacteristics = 8;
+        else if (!strcmp(value, "log100"))
+            p->transferCharacteristics = 9;
+        else if (!strcmp(value, "log316"))
+            p->transferCharacteristics = 10;
+        else if (!strcmp(value, "iec61966-2-4"))
+            p->transferCharacteristics = 11;
+        else if (!strcmp(value, "bt1361e"))
+            p->transferCharacteristics = 12;
+        else if (!strcmp(value, "iec61966-2-1"))
+            p->transferCharacteristics = 13;
+        else if (!strcmp(value, "bt2020-10"))
+            p->transferCharacteristics = 14;
+        else if (!strcmp(value, "bt2020-12"))
+            p->transferCharacteristics = 15;
+    }
+    OPT("colormatrix")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableVideoSignalTypePresentFlag = bvalue;
+        p->bEnableColorDescriptionPresentFlag = bvalue;
+        if (!strcmp(value, "GBR"))
+            p->matrixCoeffs = 0;
+        else if (!strcmp(value, "bt709"))
+            p->matrixCoeffs = 1;
+        else if (!strcmp(value, "undef"))
+            p->matrixCoeffs = 2;
+        else if (!strcmp(value, "fcc"))
+            p->matrixCoeffs = 4;
+        else if (!strcmp(value, "bt470bg"))
+            p->matrixCoeffs = 5;
+        else if (!strcmp(value, "smpte170m"))
+            p->matrixCoeffs = 6;
+        else if (!strcmp(value, "smpte240m"))
+            p->matrixCoeffs = 7;
+        else if (!strcmp(value, "YCgCo"))
+            p->matrixCoeffs = 8;
+        else if (!strcmp(value, "bt2020nc"))
+            p->matrixCoeffs = 9;
+        else if (!strcmp(value, "bt2020c"))
+            p->matrixCoeffs = 10;
+    }
+    OPT("chromaloc")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableChromaLocInfoPresentFlag = bvalue;
+        p->chromaSampleLocTypeTopField = atoi(value);
+        p->chromaSampleLocTypeBottomField = p->chromaSampleLocTypeTopField;
+    }
+    OPT("fieldseq")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableFieldSeqFlag = bvalue;
+    }
+    OPT("framefieldinfo")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableFrameFieldInfoPresentFlag = bvalue;
+    }
+    OPT("crop-rect")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableDefaultDisplayWindowFlag = bvalue;
+        sscanf(value,"%d,%d,%d,%d",
+            &p->defDispWinLeftOffset,
+            &p->defDispWinTopOffset,
+            &p->defDispWinRightOffset,
+            &p->defDispWinBottomOffset);
+    }
+    OPT("timinginfo")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableVuiTimingInfoPresentFlag = bvalue;
+    }
+    OPT("nal-hrd")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableVuiTimingInfoPresentFlag = bvalue;
+        p->bEnableVuiHrdParametersPresentFlag = bvalue;
+    }
+    OPT("bitstreamrestriction")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableBitstreamRestrictionFlag = bvalue;
+    }
+    OPT("subpichrd")
+    {
+        p->bEnableVuiParametersPresentFlag = 1;
+        p->bEnableVuiHrdParametersPresentFlag = bvalue;
+        p->bEnableSubPicHrdParamsPresentFlag = bvalue;
+    }
 
     else
         return X265_PARAM_BAD_NAME;
diff -r 1c78bd13a14f -r 8ef0c1405487 source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp	Wed Feb 19 09:46:46 2014 -0800
+++ b/source/encoder/encoder.cpp	Wed Feb 19 10:00:22 2014 -0800
@@ -1043,7 +1043,7 @@
     if (sps->getVuiParametersPresentFlag())
     {
         TComVUI* vui = sps->getVuiParameters();
-        vui->setAspectRatioInfoPresentFlag(getAspectRatioIdc() != -1);
+        vui->setAspectRatioInfoPresentFlag(getAspectRatioInfoPresentFlag());
         vui->setAspectRatioIdc(getAspectRatioIdc());
         vui->setSarWidth(getSarWidth());
         vui->setSarHeight(getSarHeight());
@@ -1062,12 +1062,17 @@
         vui->setNeutralChromaIndicationFlag(getNeutralChromaIndicationFlag());
         vui->setDefaultDisplayWindow(getDefaultDisplayWindow());
         vui->setFrameFieldInfoPresentFlag(getFrameFieldInfoPresentFlag());
-        vui->setFieldSeqFlag(false);
-        vui->setHrdParametersPresentFlag(false);
+        vui->setFieldSeqFlag(getFieldSeqFlag());
+        vui->setHrdParametersPresentFlag(getVuiHrdParametersPresentFlag());
+        vui->getTimingInfo()->setTimingInfoPresentFlag(getVuiTimingInfoPresentFlag());
+        vui->getTimingInfo()->setNumUnitsInTick(getVuiNumUnitsInTick());
+        vui->getTimingInfo()->setTimeScale(getVuiTimeScale());
         vui->getTimingInfo()->setPocProportionalToTimingFlag(getPocProportionalToTimingFlag());
         vui->getTimingInfo()->setNumTicksPocDiffOneMinus1(getNumTicksPocDiffOneMinus1());
         vui->setBitstreamRestrictionFlag(getBitstreamRestrictionFlag());
+        vui->setTilesFixedStructureFlag(getTilesFixedStructureFlag());
         vui->setMotionVectorsOverPicBoundariesFlag(getMotionVectorsOverPicBoundariesFlag());
+        vui->setRestrictedRefPicListsFlag(getRestrictedRefPicListsFlag());
         vui->setMinSpatialSegmentationIdc(getMinSpatialSegmentationIdc());
         vui->setMaxBytesPerPicDenom(getMaxBytesPerPicDenom());
         vui->setMaxBitsPerMinCuDenom(getMaxBitsPerMinCuDenom());
@@ -1390,11 +1395,11 @@
     m_quadtreeTULog2MinSize = tuQTMinLog2Size;
 
     //========= set default display window ==================================
-    m_defaultDisplayWindow.m_enabledFlag = true;
-    m_defaultDisplayWindow.m_winRightOffset = 0;
-    m_defaultDisplayWindow.m_winTopOffset = 0;
-    m_defaultDisplayWindow.m_winBottomOffset = 0;
-    m_defaultDisplayWindow.m_winLeftOffset = 0;
+    m_defaultDisplayWindow.m_enabledFlag = _param->bEnableDefaultDisplayWindowFlag;
+    m_defaultDisplayWindow.m_winRightOffset = _param->defDispWinRightOffset;
+    m_defaultDisplayWindow.m_winTopOffset = _param->defDispWinTopOffset;
+    m_defaultDisplayWindow.m_winBottomOffset = _param->defDispWinBottomOffset;
+    m_defaultDisplayWindow.m_winLeftOffset = _param->defDispWinLeftOffset;
     m_pad[0] = m_pad[1] = 0;
 
     //======== set pad size if width is not multiple of the minimum CU size =========
@@ -1465,25 +1470,26 @@
     m_decodingUnitInfoSEIEnabled = 0;
     m_useScalingListId = 0;
     m_activeParameterSetsSEIEnabled = 0;
-    m_vuiParametersPresentFlag = false;
+    m_vuiParametersPresentFlag = _param->bEnableVuiParametersPresentFlag;
     m_minSpatialSegmentationIdc = 0;
-    m_aspectRatioIdc = 0;
-    m_sarWidth = 0;
-    m_sarHeight = 0;
-    m_overscanInfoPresentFlag = false;
-    m_overscanAppropriateFlag = false;
-    m_videoSignalTypePresentFlag = false;
-    m_videoFormat = 5;
-    m_videoFullRangeFlag = false;
-    m_colourDescriptionPresentFlag = false;
-    m_colourPrimaries = 2;
-    m_transferCharacteristics = 2;
-    m_matrixCoefficients = 2;
-    m_chromaLocInfoPresentFlag = false;
-    m_chromaSampleLocTypeTopField = 0;
-    m_chromaSampleLocTypeBottomField = 0;
+    m_aspectRatioInfoPresentFlag = _param->bEnableAspectRatioIdc;
+    m_aspectRatioIdc = _param->aspectRatioIdc;
+    m_sarWidth = _param->sarWidth;
+    m_sarHeight = _param->sarHeight;
+    m_overscanInfoPresentFlag = _param->bEnableOverscanInfoPresentFlag;
+    m_overscanAppropriateFlag = _param->bEnableOverscanAppropriateFlag;
+    m_videoSignalTypePresentFlag = _param->bEnableVideoSignalTypePresentFlag;
+    m_videoFormat = _param->videoFormat;
+    m_videoFullRangeFlag = _param->bEnableVideoFullRangeFlag;
+    m_colourDescriptionPresentFlag = _param->bEnableColorDescriptionPresentFlag;
+    m_colourPrimaries = _param->colorPrimaries;
+    m_transferCharacteristics = _param->transferCharacteristics;
+    m_matrixCoefficients = _param->matrixCoeffs;
+    m_chromaLocInfoPresentFlag = _param->bEnableChromaLocInfoPresentFlag;
+    m_chromaSampleLocTypeTopField = _param->chromaSampleLocTypeTopField;
+    m_chromaSampleLocTypeBottomField = _param->chromaSampleLocTypeBottomField;
     m_neutralChromaIndicationFlag = false;
-    m_frameFieldInfoPresentFlag = false;
+    m_frameFieldInfoPresentFlag = _param->bEnableFrameFieldInfoPresentFlag;
     m_pocProportionalToTimingFlag = false;
     m_numTicksPocDiffOneMinus1 = 0;
     m_bitstreamRestrictionFlag = false;
@@ -1501,6 +1507,11 @@
     m_useLossless = false;  // x264 configures this via --qp=0
     m_TransquantBypassEnableFlag = false;
     m_CUTransquantBypassFlagValue = false;
+    m_fieldSeqFlag = _param->bEnableFieldSeqFlag;
+    m_vuiTimingInfoPresentFlag = _param->bEnableVuiTimingInfoPresentFlag;
+    m_vuiHrdParametersPresentFlag = _param->bEnableVuiHrdParametersPresentFlag;
+    m_bitstreamRestrictionFlag = _param->bEnableBitstreamRestrictionFlag;
+    m_subPicHrdParamsPresentFlag = _param->bEnableSubPicHrdParamsPresentFlag;
 }
 
 int Encoder::extractNalData(NALUnitEBSP **nalunits)
diff -r 1c78bd13a14f -r 8ef0c1405487 source/x265.cpp
--- a/source/x265.cpp	Wed Feb 19 09:46:46 2014 -0800
+++ b/source/x265.cpp	Wed Feb 19 10:00:22 2014 -0800
@@ -154,6 +154,26 @@
     { "strong-intra-smoothing",    no_argument, NULL, 0 },
     { "no-cutree",                 no_argument, NULL, 0 },
     { "cutree",                    no_argument, NULL, 0 },
+    { "vui",                  no_argument, NULL, 0 },
+    { "sar",            required_argument, NULL, 0 },
+    { "extended-sar",   required_argument, NULL, 0 },
+    { "overscan",       required_argument, NULL, 0 },
+    { "videoformat",    required_argument, NULL, 0 },
+    { "range",                no_argument, NULL, 0 },
+    { "no-range",             no_argument, NULL, 0 },
+    { "colorprim",      required_argument, NULL, 0 },
+    { "transfer",       required_argument, NULL, 0 },
+    { "colormatrix",    required_argument, NULL, 0 },
+    { "chromaloc",      required_argument, NULL, 0 },
+    { "fieldseq",             no_argument, NULL, 0 },
+    { "no-fieldseq",          no_argument, NULL, 0 },
+    { "framefieldinfo",       no_argument, NULL, 0 },
+    { "no-framefieldinfo",    no_argument, NULL, 0 },
+    { "crop-rect",      required_argument, NULL, 0 },
+    { "timinginfo",           no_argument, NULL, 0 },
+    { "nal-hrd",              no_argument, NULL, 0 },
+    { "bitstreamrestriction", no_argument, NULL, 0 },
+    { "subpichrd",            no_argument, NULL, 0 },
     { 0, 0, 0, 0 }
 };
 
@@ -351,6 +371,32 @@
     H0("   --recon-depth                 Bit-depth of reconstructed raw image file. Defaults to input bit depth\n");
     H0("\nSEI options:\n");
     H0("   --hash                        Decoded Picture Hash SEI 0: disabled, 1: MD5, 2: CRC, 3: Checksum. Default %d\n", param->decodedPictureHashSEI);
+    H0("\nVUI options:\n");
+    H0("   --vui                         Add Video Useability Information with all fields to the SPS. Default %s\n", OPT(param->bEnableVuiParametersPresentFlag));
+    H0("   --sar                         Sample Aspect Ratio, the ratio of width to height of an individual pixel.\n");
+    H0("                                 Choose from 0=Unspecified, 1=1:1(\"square\"), 2=12:11, 3=10:11, 4=16:11,\n");
+    H0("                                 5=40:33, 6=24:11, 7=20:11, 8=32:11, 9=80:33, 10=18:11, 11=15:11,\n");
+    H0("                                 12=64:33, 13=160:99, 14=4:3, 15=3:2, 16=2:1. Default %d\n",param->aspectRatioIdc);
+    H0("   --extended-sar                Use a custom Sample Aspect Ratio,[WxH]\n");
+    H0("   --overscan <string>           Specify crop overscan setting from undef, show or crop. Default of undef\n");
+    H0("   --videoformat <string>        Specify video format from undef, component, pal, ntsc, secam, mac. Default of undef\n");
+    H0("   --[no-]range                       Specify black level and range of luma and chroma signals. Default of %s\n", OPT(param->bEnableVideoFullRangeFlag));
+    H0("   --colorprim <string>          Specify color primaries from undef, bt709, bt470m, bt470bg, smpte170m,\n");
+    H0("                                 smpte240m, film, bt2020. Default of undef\n");
+    H0("   --transfer <string>           Specify transfer characteristics from undef, bt709, bt470m, bt470bg, smpte170m,\n");
+    H0("                                 smpte240m, linear, log100, log316, iec61966-2-4, bt1361e, iec61966-2-1,\n");
+    H0("                                 bt2020-10, bt2020-12. Default of undef\n");
+    H0("   --colormatrix <string>        Specify color matrix setting from undef, bt709, fcc, bt470bg, smpte170m,\n");
+    H0("                                 smpte240m, GBR, YCgCo, bt2020nc, bt2020c\n");
+    H0("   --chromaloc <integer>         Specify chroma sample location (0 to 5). Default of %d\n",param->chromaSampleLocTypeTopField);
+    H0("   --[no-]fieldseq               Specify that pictures are fields and an SEI timing message\n");
+    H0("                                 will be added to every access unit. Default %s\n", OPT(param->bEnableFieldSeqFlag));
+    H0("   --[no-]framefieldinfo         Specify that a pic-struct will be added to the SEI timing message. Default %s\n", OPT(param->bEnableFrameFieldInfoPresentFlag));
+    H0("   --crop-rect <string>          Add 'left,top,right,bottom' to the bitstream-level cropping rectangle\n");
+    H0("   --timinginfo                  Add timing information to the VUI. Defaut %s\n", OPT(param->bEnableVuiTimingInfoPresentFlag));
+    H0("   --nal-hrd                     Signal HRD information. Default %s\n", OPT(param->bEnableVuiHrdParametersPresentFlag));
+    H0("   --bitstreamrestriction        Add bit stream restriction fields to the VUI. Default %s\n", OPT(param->bEnableBitstreamRestrictionFlag));
+    H0("   --subpichrd                   Add sub picture HRD parameters to the HRD. Default %s\n", OPT(param->bEnableSubPicHrdParamsPresentFlag));
 #undef OPT
 #undef H0
     exit(0);
diff -r 1c78bd13a14f -r 8ef0c1405487 source/x265.h
--- a/source/x265.h	Wed Feb 19 09:46:46 2014 -0800
+++ b/source/x265.h	Wed Feb 19 10:00:22 2014 -0800
@@ -332,6 +332,147 @@
      * types are MD5(1), CRC(2), Checksum(3).  Default is 0, none */
     int       decodedPictureHashSEI;
 
+    /*== Video Usability Information ==*/
+
+    /* Enable the generation of a VUI with all fields in the SPS.  VUI fields
+     * that are not specified on the command line will have default values. */
+    int       bEnableVuiParametersPresentFlag;
+
+    /* Enable aspect ratio in VUI.  Causes the aspect_ratio_idc to be added
+     * to the VUI.  The default is false. */
+    int bEnableAspectRatioIdc;
+
+    /* Aspect ratio idc to be added to the VUI.  The default is 0 indicating
+     * the apsect ratio is unspecified.  If set to EXTENDED_SAR(255) then
+     * sarWidth and sarHeight must also be set. */ 
+    int       aspectRatioIdc;
+
+    /* Sample Aspect Ratio width in arbitrary units to be added to the VUI
+     * only if aspectRatioIdc is set to EXTENDED_SAR(255).  This is the width
+     * of an individual pixel.  If this is set then sarHeight must also be set.
+     */
+    int       sarWidth;
+
+    /* Sample Aspect Ratio height in arbitrary units to be added to the VUI.
+     * only if aspectRatioIdc is set to EXTENDED_SAR(255).  This is the width 
+     * of an individual pixel.  If this is set then sarWidth must also be set.
+     */
+    int       sarHeight;
+
+    /* Enable overscan info present flag in the VUI.  If this is set then 
+     * bEnabledOverscanAppropriateFlag will be added to the VUI. The default
+     * is false. */
+    int       bEnableOverscanInfoPresentFlag;
+
+    /* Enable overscan appropriate flag.  The status of this flag is added to
+     * the VUI only if bEnableOverscanInfoPresentFlag is set.  If this flag is
+     * set then cropped decoded pictures may be output for display. The default
+     * is false. */
+    int       bEnableOverscanAppropriateFlag;
+
+    /* Video signal type present flag of the VUI.  If this is set then 
+     * videoFormat, bEnableVideoFullRangeFlag and 
+     * bEnableColorDescriptionPresentFlag will be added to the VUI.  The default
+     * is false. */
+    int       bEnableVideoSignalTypePresentFlag;
+
+    /* Video format of the source video.  0 = component, 1 = PAL, 2 = NTSC,
+     * 3 = SECAM, 4 = MAC, 5 = unspecified video format is the default. */
+    int       videoFormat;
+
+    /* Video full range flag indicates the black level and range of the luma
+     * and chroma signals as derived from E′Y, E′PB, and E′PR or E′R, E′G, and
+     * E′B real-valued component signals.  False is the default. */
+    int       bEnableVideoFullRangeFlag;
+
+    /* Color description present flag in the VUI.  If this is set then 
+     * color_primaries, transfer_characteristics and matrix_coeffs are to be added
+     * to the VUI.  The default is false. */
+    int       bEnableColorDescriptionPresentFlag;
+
+    /* Color primaries holds the chromacity coordinates of the source primaries.
+     * The default is 2. */
+    int       colorPrimaries;
+
+    /* Transfer characteristics indicates the opto-electronic transfer characteristic
+     * of the source picture.  The default is 2. */
+    int       transferCharacteristics;
+
+    /* Matrix coefficients used to derive the luma and chroma signals from the red,
+     * blue and green primaries.  The default is 2. */
+    int       matrixCoeffs;
+
+    /* Chroma location info present flag adds chroma_sample_loc_type_top_field and
+     * chroma_sample_loc_type_bottom_field to the VUI.  The default is false. */
+    int       bEnableChromaLocInfoPresentFlag;
+
+    /* Chroma sample location type top field holds the chroma location in the top
+     * field.  The default is 0. */
+    int       chromaSampleLocTypeTopField;
+
+    /* Chroma sample location type bottom field holds the chroma location in the bottom
+     * field.  The default is 0. */
+    int       chromaSampleLocTypeBottomField;
+
+    /* Field seq flag specifies that the pictures are fields and each one has a 
+     * timing SEI message.  The default is false */
+    int       bEnableFieldSeqFlag;
+
+    /* Frame field info present flag indicates that each picture has a timing SEI
+     * message wich includes a pic_struct, source_scan_type and duplicate_flag 
+     * elements.  If not set then the pic_struct element is not included.  The 
+     * default is false. */
+    int       bEnableFrameFieldInfoPresentFlag;
+
+    /* Default display window flag adds def_disp_win_left_offset ,
+     * def_disp_win_right_offset, def_disp_win_top_offset and
+     * def_disp_win_bottom_offset to the VUI.  The default is false. */
+    int       bEnableDefaultDisplayWindowFlag;
+
+    /* Default display window left offset holds the left offset with the
+     * conformance cropping window to further crop the displayed window. */
+    int       defDispWinLeftOffset;
+
+    /* Default display window right offset holds the right offset with the 
+     * conformance cropping window to further crop the displayed window. */
+    int       defDispWinRightOffset;
+
+    /* Default display window top offset holds the top offset with the 
+     * conformance cropping window to further crop the displayed window. */
+    int       defDispWinTopOffset;
+
+    /* Default display window bottom offset holds the bottom offset with the 
+     * conformance cropping window to further crop the displayed window. */
+    int       defDispWinBottomOffset;
+
+    /* VUI timing info present flag adds vui_num_units_in_tick, vui_time_scale,
+     * vui_poc_proportional_to_timing_flag and vui_hrd_parameters_present_flag
+     * to the VUI.  vui_num_units_in_tick, vui_time_scale and 
+     * vui_poc_proportional_to_timing_flag are derived from processing the input
+     * video.  The default is false. */
+    int       bEnableVuiTimingInfoPresentFlag;
+
+    /* VUI hrd parameters present flag adds the HRD to the VUI */
+    int       bEnableVuiHrdParametersPresentFlag;
+
+    /* Bitstream restriction flag adds tiles_fixed_structure_flag,
+     * motion_vectors_over_pic_boundaries_flag, restricted_ref_pic_lists_flag,
+     * min_spatial_segmentation_idc, max_bytes_per_pic_denom,
+     * max_bit_per_min_cu_denom, log2_max_mv_length_horizontal and
+     * log2_max_mv_length_vertical to the VUI. All values are derived from
+     * processing the input video.  The default is false.  */
+    int       bEnableBitstreamRestrictionFlag;
+
+    /*== Hypothetical Reference Decoder Parameters ==*/
+
+    /* Sub pic HRD params present flag determines if tic_divisor_minus2,
+     * du_cpb_removal_delay_increment_length_minus1,
+     * sub_pic_cpb_params_in_pic_timing_sei_flag,
+     * dpb_output_delay_du_length_minus1 and cpb_size_du_scale
+     * are added to the HRD.  All are derived from processing the input video.
+     * The default is false. */
+    int       bEnableSubPicHrdParamsPresentFlag;
+
     /*== Internal Picture Specification ==*/
 
     /* Internal encoder bit depth. If x265 was compiled to use 8bit pixels


More information about the x265-devel mailing list