[x265] [PATCH] Added command line options to generate a VUI and add it to the coded bitstream
dave
dtyx265 at gmail.com
Fri Feb 21 00:31:11 CET 2014
On 02/20/2014 12:44 PM, Steve Borho wrote:
>
>
>
> On Wed, Feb 19, 2014 at 12:01 PM, <dtyx265 at gmail.com
> <mailto:dtyx265 at gmail.com>> wrote:
>
> # HG changeset patch
> # User David T Yuen <dtyx265 at gmail.com <mailto: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
>
>
> Hello, Thanks for working through these details.
>
> I had some review comments for this patch but unfortunately didn't get
> around to responding to this patch yesterday.
>
> 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)
>
>
> We don't support tiles, so it is ok to leave this hard-coded to zero
>
> , 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; }
>
>
>
> We're trying to remove these C++ style get/set methods. Just set/get
> these variables directly.
I agree, they are more work than they are worth. I was just sticking to
with "coding style already in place". I know the long term goal is to
convert everything to C and I would rather work on that than simply
convert the new VUI code to not use get/set style.
>
> 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
>
>
>
> there's no need to add these flags to TEncCfg since TEncCfg itself has
> an x265_param structure built into it. These are redundant.
Again, I agree, it's over engineering to copy a value from arguments to
x265_param, to TEncCfg, to TComVUI to coded output when nothing happens
to it other than copying it. I wanted to work within the existing code
structure because I thought it would make it easier to convert
everything to C and potentially, actually preferably, re-structure or
redesign it from it's current state than some mixed style.
>
> + 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; }
>
>
> ditto here, these should go away
Agreed
>
> +
> + 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");
>
> this one can be backed out
No problem. Are there any plans for Tiles in the future?
>
> 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);
>
>
> you can use param.* here
Again, I was just maintaining style.
>
> +
> 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;
>
>
> All the sets to fields redundant with x265_param should go away
Agreed.
>
> - 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));
>
>
> nicely done
Thanks. It's all modeled after x264 cli.
>
> #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;
>
>
> I think these parameters should go within a vui sub-struct, similar to
> the rc sub-struct.
>
> Excellent job documenting them all.
I was planning on reviewing these. A few may come close to plagiarizing
the h265 spec. In those cases, unless someone can come up with
something better I suggest simply quoting the h265 spec and giving it
credit.
>
>
> + /*== 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
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org <mailto:x265-devel at videolan.org>
> https://mailman.videolan.org/listinfo/x265-devel
>
>
>
>
> --
> Steve Borho
>
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
I have already found a minor nit here and there so you will probably see
me submit a relevant tweak here and there.
There looks like a lot of cruft in the design of x265, mostly from the
HM base, If you want get rid of it then there needs to be a plan of
coming up with something to replace it with and I am not a fan of simply
replacing x265's C++ classes with C structures that are copies of those
classes. If this is something that you need somebody to work on then I
would like to volunteer.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20140220/5d97d565/attachment-0001.html>
More information about the x265-devel
mailing list