[x265] [PATCH] bitstream: Modify API to discard optional VUI params, remove discard SEI API
Mario *LigH* Rohkrämer
contact at ligh.de
Mon Oct 10 14:05:15 CEST 2016
Typos in syntax documentation:
The dash should be part of the optional negation: rather "[no-]..."
instead of "[no]-..." each time.
In the currently documented form, the result when omitting the "no" would
be a triple dash.
Am 03.10.2016, 09:14 Uhr, schrieb Pradeep Ramachandran
<pradeep at multicorewareinc.com>:
> # HG changeset patch
> # User Pradeep Ramachandran <pradeep at multicorewareinc.com>
> # Date 1475478199 -19800
> # Mon Oct 03 12:33:19 2016 +0530
> # Node ID 91ed7cb38e66c43116e1d279e94d087d462e71ce
> # Parent 11bfa0ae971029fed69554e700185a8ef93a289c
> bitstream: Modify API to discard optional VUI params, remove discard SEI
> API
>
> Cleaner API to remove optional timing & HRD info from VUI.
> Remove discard SEI API as it can be done through a combo of other API
> options
>
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 doc/reST/cli.rst
> --- a/doc/reST/cli.rst Wed Sep 28 15:18:23 2016 +0530
> +++ b/doc/reST/cli.rst Mon Oct 03 12:33:19 2016 +0530
> @@ -1824,7 +1824,7 @@
> enhancement layer. A decoder may chose to drop the enhancement layer
> and only decode and display the base layer slices.
>
> - If used with a fixed GOP (:option:`b-adapt` 0) and :option:`bframes`
> + If used with a fixed GOP (:option:`--b-adapt` 0) and
> :option:`--bframes`
> 3 then the two layers evenly split the frame rate, with a cadence of
> PbBbP. You probably also want :option:`--no-scenecut` and a keyframe
> interval that is a multiple of 4.
> @@ -1833,15 +1833,15 @@
> Maximum of the picture order count. Default 8
> -.. option:: --discard-sei
> +.. option:: --[no]-vui-timing-info
Rather:
+.. option:: --[no-]vui-timing-info
> - Discard SEI messages generated from the final bitstream. HDR-related
> SEI
> - messages are always dumped, immaterial of this option. Default
> disabled.
> -
> -.. option:: --discard-vui
> + Discard optional VUI timing info from bitstream. Default enabled.
> - Discard optional VUI information (timing, HRD info) from the
> - bitstream. Default disabled.
> +.. option:: --[no]-vui-hrd-info
Rather:
+.. option:: --[no-]vui-timing-info
> +
> + Discard optional VUI HRD info from bitstream. Default enabled when
> + :option:`--hrd` is enabled.
> +
> Debugging options
> =================
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/CMakeLists.txt
> --- a/source/CMakeLists.txt Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/CMakeLists.txt Mon Oct 03 12:33:19 2016 +0530
> @@ -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 95)
> +set(X265_BUILD 96)
> configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
> "${PROJECT_BINARY_DIR}/x265.def")
> configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/common/param.cpp
> --- a/source/common/param.cpp Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/common/param.cpp Mon Oct 03 12:33:19 2016 +0530
> @@ -229,7 +229,8 @@
> param->rc.qpMin = 0;
> param->rc.qpMax = QP_MAX_MAX;
> - param->bDiscardOptionalVUI = 0;
> + param->bEmitVUITimingInfo = 1;
> + param->bEmitVUIHRDInfo = 1;
> /* Video Usability Information (VUI) */
> param->vui.aspectRatioIdc = 0;
> @@ -256,7 +257,6 @@
> param->minLuma = 0;
> param->maxLuma = PIXEL_MAX;
> param->log2MaxPocLsb = 8;
> - param->bDiscardSEI = false;
> param->maxSlices = 1;
> }
> @@ -914,8 +914,8 @@
> OPT("qpmin") p->rc.qpMin = atoi(value);
> OPT("analyze-src-pics") p->bSourceReferenceEstimation =
> atobool(value);
> OPT("log2-max-poc-lsb") p->log2MaxPocLsb = atoi(value);
> - OPT("discard-sei") p->bDiscardSEI = atobool(value);
> - OPT("discard-vui") p->bDiscardOptionalVUI = atobool(value);
> + OPT("vui-timing-info") p->bEmitVUITimingInfo = atobool(value);
> + OPT("vui-hrd-info") p->bEmitVUIHRDInfo = atobool(value);
> else
> return X265_PARAM_BAD_NAME;
> }
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/common/slice.h
> --- a/source/common/slice.h Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/common/slice.h Mon Oct 03 12:33:19 2016 +0530
> @@ -243,7 +243,8 @@
> bool bUseAMP; // use param
> bool bUseStrongIntraSmoothing; // use param
> bool bTemporalMVPEnabled;
> - bool bDiscardOptionalVUI;
> + bool bEmitVUITimingInfo;
> + bool bEmitVUIHRDInfo;
> Window conformanceWindow;
> VUI vuiParameters;
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/encoder/encoder.cpp Mon Oct 03 12:33:19 2016 +0530
> @@ -1491,7 +1491,7 @@
> list.serialize(NAL_UNIT_PREFIX_SEI, bs);
> }
> - if (!m_param->bDiscardSEI && m_param->bEmitInfoSEI)
> + if (m_param->bEmitInfoSEI)
> {
> char *opts = x265_param2string(m_param);
> if (opts)
> @@ -1521,7 +1521,7 @@
> }
> }
> - if (!m_param->bDiscardSEI && (m_param->bEmitHRDSEI ||
> !!m_param->interlaceMode))
> + if ((m_param->bEmitHRDSEI || !!m_param->interlaceMode))
> {
> /* Picture Timing and Buffering Period SEI require the SPS to
> be "activated" */
> SEIActiveParameterSets sei;
> @@ -1576,7 +1576,8 @@
> sps->bUseStrongIntraSmoothing = m_param->bEnableStrongIntraSmoothing;
> sps->bTemporalMVPEnabled = m_param->bEnableTemporalMvp;
> - sps->bDiscardOptionalVUI = m_param->bDiscardOptionalVUI;
> + sps->bEmitVUITimingInfo = m_param->bEmitVUITimingInfo;
> + sps->bEmitVUIHRDInfo = m_param->bEmitVUIHRDInfo;
> sps->log2MaxPocLsb = m_param->log2MaxPocLsb;
> int maxDeltaPOC = (m_param->bframes + 2) * (!!m_param->bBPyramid +
> 1) * 2;
> while ((1 << sps->log2MaxPocLsb) <= maxDeltaPOC * 2)
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/encoder/entropy.cpp
> --- a/source/encoder/entropy.cpp Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/encoder/entropy.cpp Mon Oct 03 12:33:19 2016 +0530
> @@ -319,7 +319,7 @@
> WRITE_FLAG(sps.bUseStrongIntraSmoothing,
> "sps_strong_intra_smoothing_enable_flag");
> WRITE_FLAG(1, "vui_parameters_present_flag");
> - codeVUI(sps.vuiParameters, sps.maxTempSubLayers,
> sps.bDiscardOptionalVUI);
> + codeVUI(sps.vuiParameters, sps.maxTempSubLayers,
> sps.bEmitVUITimingInfo, sps.bEmitVUIHRDInfo);
> WRITE_FLAG(0, "sps_extension_flag");
> }
> @@ -422,7 +422,7 @@
> }
> }
> -void Entropy::codeVUI(const VUI& vui, int maxSubTLayers, bool
> bDiscardOptionalVUI)
> +void Entropy::codeVUI(const VUI& vui, int maxSubTLayers, bool
> bEmitVUITimingInfo, bool bEmitVUIHRDInfo)
> {
> WRITE_FLAG(vui.aspectRatioInfoPresentFlag,
> "aspect_ratio_info_present_flag");
> if (vui.aspectRatioInfoPresentFlag)
> @@ -473,7 +473,7 @@
> WRITE_UVLC(vui.defaultDisplayWindow.bottomOffset,
> "def_disp_win_bottom_offset");
> }
> - if (bDiscardOptionalVUI)
> + if (!bEmitVUITimingInfo)
> WRITE_FLAG(0, "vui_timing_info_present_flag");
> else
> {
> @@ -483,7 +483,7 @@
> WRITE_FLAG(0, "vui_poc_proportional_to_timing_flag");
> }
> - if (bDiscardOptionalVUI)
> + if (!bEmitVUIHRDInfo)
> WRITE_FLAG(0, "vui_hrd_parameters_present_flag");
> else
> {
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/encoder/entropy.h
> --- a/source/encoder/entropy.h Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/encoder/entropy.h Mon Oct 03 12:33:19 2016 +0530
> @@ -143,7 +143,7 @@
> void codeVPS(const VPS& vps);
> void codeSPS(const SPS& sps, const ScalingList& scalingList, const
> ProfileTierLevel& ptl);
> void codePPS( const PPS& pps, bool filerAcross, int
> iPPSInitQpMinus26 );
> - void codeVUI(const VUI& vui, int maxSubTLayers, bool
> discardOptionalVUI);
> + void codeVUI(const VUI& vui, int maxSubTLayers, bool
> bEmitVUITimingInfo, bool bEmitVUIHRDInfo);
> void codeAUD(const Slice& slice);
> void codeHrdParameters(const HRDInfo& hrd, int maxSubTLayers);
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/encoder/frameencoder.cpp
> --- a/source/encoder/frameencoder.cpp Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/encoder/frameencoder.cpp Mon Oct 03 12:33:19 2016 +0530
> @@ -525,7 +525,7 @@
> if (m_frame->m_lowres.bKeyframe)
> {
> - if (!m_param->bDiscardSEI && m_param->bEmitHRDSEI)
> + if (m_param->bEmitHRDSEI)
> {
> SEIBufferingPeriod* bpSei =
> &m_top->m_rateControl->m_bufPeriodSEI;
> @@ -547,7 +547,7 @@
> }
> }
> - if (!m_param->bDiscardSEI && (m_param->bEmitHRDSEI ||
> !!m_param->interlaceMode))
> + if ((m_param->bEmitHRDSEI || !!m_param->interlaceMode))
> {
> SEIPictureTiming *sei = m_rce.picTimingSEI;
> const VUI *vui = &slice->m_sps->vuiParameters;
> @@ -583,22 +583,19 @@
> }
> /* Write user SEI */
> - if (!m_param->bDiscardSEI)
> + for (int i = 0; i < m_frame->m_userSEI.numPayloads; i++)
> {
> - for (int i = 0; i < m_frame->m_userSEI.numPayloads; i++)
> - {
> - x265_sei_payload *payload = &m_frame->m_userSEI.payloads[i];
> - SEIuserDataUnregistered sei;
> + x265_sei_payload *payload = &m_frame->m_userSEI.payloads[i];
> + SEIuserDataUnregistered sei;
> - sei.m_payloadType = payload->payloadType;
> - sei.m_userDataLength = payload->payloadSize;
> - sei.m_userData = payload->payload;
> + sei.m_payloadType = payload->payloadType;
> + sei.m_userDataLength = payload->payloadSize;
> + sei.m_userData = payload->payload;
> - m_bs.resetBits();
> - sei.write(m_bs, *slice->m_sps);
> - m_bs.writeByteAlignment();
> - m_nalList.serialize(NAL_UNIT_PREFIX_SEI, m_bs);
> - }
> + m_bs.resetBits();
> + sei.write(m_bs, *slice->m_sps);
> + m_bs.writeByteAlignment();
> + m_nalList.serialize(NAL_UNIT_PREFIX_SEI, m_bs);
> }
> /* CQP and CRF (without capped VBV) doesn't use mid-frame statistics
> to
> @@ -895,7 +892,7 @@
> }
> - if (!m_param->bDiscardSEI && m_param->decodedPictureHashSEI)
> + if (m_param->decodedPictureHashSEI)
> {
> int planes = (m_frame->m_param->internalCsp != X265_CSP_I400) ?
> 3 : 1;
> if (m_param->decodedPictureHashSEI == 1)
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/x265.h
> --- a/source/x265.h Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/x265.h Mon Oct 03 12:33:19 2016 +0530
> @@ -1301,11 +1301,11 @@
> /* Maximum of the picture order count */
> int log2MaxPocLsb;
> - /* Dicard SEI messages when printing */
> - int bDiscardSEI;
> -
> - /* Control removing optional vui information (timing, HRD info) to
> get low bitrate */
> - int bDiscardOptionalVUI;
> + /* Emit VUI Timing info, an optional VUI field */
> + int bEmitVUITimingInfo;
> +
> + /* Emit HRD Timing info */
> + int bEmitVUIHRDInfo;
> /* Maximum count of Slices of picture, the value range is [1,
> maximum rows] */
> unsigned int maxSlices;
> diff -r 11bfa0ae9710 -r 91ed7cb38e66 source/x265cli.h
> --- a/source/x265cli.h Wed Sep 28 15:18:23 2016 +0530
> +++ b/source/x265cli.h Mon Oct 03 12:33:19 2016 +0530
> @@ -208,8 +208,10 @@
> { "min-luma", required_argument, NULL, 0 },
> { "max-luma", required_argument, NULL, 0 },
> { "log2-max-poc-lsb", required_argument, NULL, 8 },
> - { "discard-sei", no_argument, NULL, 0 },
> - { "discard-vui", no_argument, NULL, 0 },
> + { "vui-timing-info", no_argument, NULL, 0 },
> + { "no-vui-timing-info", no_argument, NULL, 0 },
> + { "vui-hrd-info", no_argument, NULL, 0 },
> + { "no-vui-hrd-info", no_argument, NULL, 0 },
> { "no-dither", no_argument, NULL, 0 },
> { "dither", no_argument, NULL, 0 },
> { "no-repeat-headers", no_argument, NULL, 0 },
> @@ -448,8 +450,8 @@
> H0(" --[no-]aud Emit access unit delimiters at
> the start of each access unit. Default %s\n",
> OPT(param->bEnableAccessUnitDelimiters));
> H1(" --hash <integer> Decoded Picture Hash SEI 0:
> disabled, 1: MD5, 2: CRC, 3: Checksum. Default %d\n",
> param->decodedPictureHashSEI);
> H0(" --log2-max-poc-lsb <integer> Maximum of the picture order
> count\n");
> - H0(" --discard-sei Discard SEI packets in
> bitstream. Default %s\n", OPT(param->bDiscardSEI));
> - H0(" --discard-vui Discard optional VUI
> information from the bistream. Default %s\n",
> OPT(param->bDiscardOptionalVUI));
> + H0(" --[no]-vui-timing-info Discard optional VUI timing
Rather:
+ H0(" --[no-]vui-timing-info Discard optional VUI timing
> information from the bistream. Default %s\n",
> OPT(param->bEmitVUITimingInfo));
> + H0(" --[no]-vui-hrd-info Discard optional HRD timing
Rather:
+ H0(" --[no-]vui-hrd-info Discard optional HRD timing
> information from the bistream. Default %s\n",
> OPT(param->bEmitVUIHRDInfo));
> H1("\nReconstructed video options (debugging):\n");
> H1("-r/--recon <filename> Reconstructed raw image YUV or
> Y4M output file name\n");
> H1(" --recon-depth <integer> Bit-depth of reconstructed raw
> image file. Defaults to input bit depth, or 8 if Y4M\n");
--
Fun and success!
Mario *LigH* Rohkrämer
mailto:contact at ligh.de
More information about the x265-devel
mailing list