[x265] [PATCH] insert SEIRecoveryPoint at IDR frames when --idr-recovery-sei is set
Ashok Kumar Mishra
ashok at multicorewareinc.com
Fri Mar 9 07:56:23 CET 2018
On Thu, Mar 8, 2018 at 3:41 PM, <aarthi at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Aarthi Thirumalai <aarthi at multicorewareinc.com>
> # Date 1520503694 -19800
> # Thu Mar 08 15:38:14 2018 +0530
> # Node ID b7c8bfabc808a933cf6bdcef63bf49c8177851a6
> # Parent 613d9f443769767fb99299a524ad0055f9237ce3
> insert SEIRecoveryPoint at IDR frames when --idr-recovery-sei is set
>
> diff -r 613d9f443769 -r b7c8bfabc808 doc/reST/cli.rst
> --- a/doc/reST/cli.rst Mon Mar 05 15:14:34 2018 +0530
> +++ b/doc/reST/cli.rst Thu Mar 08 15:38:14 2018 +0530
> @@ -2212,6 +2212,9 @@
>
> Only effective at RD levels 5 and 6
>
> +.. option:: --idr-recovery-sei, --no-idr-recoveery-sei
> + Emit RecoveryPoint info as sei in bitstream for each IDR frame.
> Default disabled.
> +
> DCT Approximations
> =================
>
> diff -r 613d9f443769 -r b7c8bfabc808 source/CMakeLists.txt
> --- a/source/CMakeLists.txt Mon Mar 05 15:14:34 2018 +0530
> +++ b/source/CMakeLists.txt Thu Mar 08 15:38:14 2018 +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 154)
> +set(X265_BUILD 155)
> configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
> "${PROJECT_BINARY_DIR}/x265.def")
> configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
> diff -r 613d9f443769 -r b7c8bfabc808 source/common/param.cpp
> --- a/source/common/param.cpp Mon Mar 05 15:14:34 2018 +0530
> +++ b/source/common/param.cpp Thu Mar 08 15:38:14 2018 +0530
> @@ -133,7 +133,7 @@
> param->bEmitHRDSEI = 0;
> param->bEmitInfoSEI = 1;
> param->bEmitHDRSEI = 0;
> -
> + param->bEmitIDRRecoverySEI = 0;
> /* CU definitions */
> param->maxCUSize = 64;
> param->minCUSize = 8;
> @@ -982,6 +982,7 @@
> OPT("limit-sao") p->bLimitSAO = atobool(value);
> OPT("dhdr10-info") p->toneMapFile = strdup(value);
> OPT("dhdr10-opt") p->bDhdr10opt = atobool(value);
> + OPT("idr-recovery-sei") p->bEmitIDRRecoverySEI = atobool(value);
> OPT("const-vbv") p->rc.bEnableConstVbv = atobool(value);
> OPT("ctu-info") p->bCTUInfo = atoi(value);
> OPT("scale-factor") p->scaleFactor = atoi(value);
> @@ -1730,6 +1731,7 @@
> BOOL(p->bEmitHDRSEI, "hdr");
> BOOL(p->bHDROpt, "hdr-opt");
> BOOL(p->bDhdr10opt, "dhdr10-opt");
> + BOOL(p->bEmitIDRRecoverySEI, "idr-recovery-sei");
> if (p->analysisSave)
> s += sprintf(s, " analysis-save");
> if (p->analysisLoad)
> diff -r 613d9f443769 -r b7c8bfabc808 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Mon Mar 05 15:14:34 2018 +0530
> +++ b/source/encoder/encoder.cpp Thu Mar 08 15:38:14 2018 +0530
> @@ -2268,7 +2268,7 @@
> list.serialize(NAL_UNIT_SPS, bs);
>
> bs.resetBits();
> - sbacCoder.codePPS( m_pps, (m_param->maxSlices <= 1), m_iPPSQpMinus26);
> + sbacCoder.codePPS(m_pps, (m_param->maxSlices <= 1), m_iPPSQpMinus26);
> bs.writeByteAlignment();
> list.serialize(NAL_UNIT_PPS, bs);
>
> @@ -2303,14 +2303,14 @@
> if (opts)
> {
> char *buffer = X265_MALLOC(char, strlen(opts) +
> strlen(PFX(version_str)) +
> - strlen(PFX(build_info_str))
> + 200);
> + strlen(PFX(build_info_str)) + 200);
> if (buffer)
> {
> sprintf(buffer, "x265 (build %d) - %s:%s - H.265/HEVC
> codec - "
> - "Copyright 2013-2018 (c) Multicoreware, Inc - "
> - "http://x265.org - options: %s",
> - X265_BUILD, PFX(version_str),
> PFX(build_info_str), opts);
> -
> + "Copyright 2013-2018 (c) Multicoreware, Inc - "
> + "http://x265.org - options: %s",
> + X265_BUILD, PFX(version_str), PFX(build_info_str),
> opts);
> +
> bs.resetBits();
> SEIuserDataUnregistered idsei;
> idsei.m_userData = (uint8_t*)buffer;
> diff -r 613d9f443769 -r b7c8bfabc808 source/encoder/frameencoder.cpp
> --- a/source/encoder/frameencoder.cpp Mon Mar 05 15:14:34 2018 +0530
> +++ b/source/encoder/frameencoder.cpp Thu Mar 08 15:38:14 2018 +0530
> @@ -594,7 +594,6 @@
>
> /* reset entropy coders and compute slice id */
> m_entropyCoder.load(m_initSliceContext);
> -
> for (uint32_t sliceId = 0; sliceId < m_param->maxSlices; sliceId++)
> for (uint32_t row = m_sliceBaseRow[sliceId]; row <
> m_sliceBaseRow[sliceId + 1]; row++)
> m_rows[row].init(m_initSliceContext, sliceId);
> @@ -644,6 +643,19 @@
>
> m_top->m_lastBPSEI = m_rce.encodeOrder;
> }
> +
> + if (m_frame->m_lowres.sliceType == X265_TYPE_IDR &&
> m_param->bEmitIDRRecoverySEI)
> + {
> + /* Recovery Point SEI require the SPS to be "activated" */
> + SEIRecoveryPoint sei;
> + sei.m_recoveryPocCnt = 0;
> + sei.m_exactMatchingFlag = true;
> + sei.m_brokenLinkFlag = false;
> + m_bs.resetBits();
> + sei.write(m_bs, *slice->m_sps);
> + m_bs.writeByteAlignment();
> + m_nalList.serialize(NAL_UNIT_PREFIX_SEI, m_bs);
> + }
> }
>
> if ((m_param->bEmitHRDSEI || !!m_param->interlaceMode))
> diff -r 613d9f443769 -r b7c8bfabc808 source/encoder/sei.h
> --- a/source/encoder/sei.h Mon Mar 05 15:14:34 2018 +0530
> +++ b/source/encoder/sei.h Thu Mar 08 15:38:14 2018 +0530
> @@ -253,6 +253,11 @@
> class SEIRecoveryPoint : public SEI
> {
> public:
> + SEIRecoveryPoint()
> + {
> + m_payloadType = RECOVERY_POINT;
> + m_payloadSize = 0;
> + }
> int m_recoveryPocCnt;
> bool m_exactMatchingFlag;
> bool m_brokenLinkFlag;
> diff -r 613d9f443769 -r b7c8bfabc808 source/x265.h
> --- a/source/x265.h Mon Mar 05 15:14:34 2018 +0530
> +++ b/source/x265.h Thu Mar 08 15:38:14 2018 +0530
> @@ -1557,6 +1557,11 @@
> * It represents the percentage of maximum AU size used.
> * Default is 1 (which is 100%). Range is 0.5 to 1. */
> double maxAUSizeFactor;
> +
> + /* Enables the emission of a Recovery Point SEI with the stream
> headers
> + * at each IDR frame describing poc of the recovery point, exact
> matching flag
> + * and broken link flag. Default is disabled. */
> + int bEmitIDRRecoverySEI;
> } x265_param;
>
> /* x265_param_alloc:
> diff -r 613d9f443769 -r b7c8bfabc808 source/x265cli.h
> --- a/source/x265cli.h Mon Mar 05 15:14:34 2018 +0530
> +++ b/source/x265cli.h Thu Mar 08 15:38:14 2018 +0530
> @@ -294,6 +294,8 @@
> { "copy-pic", no_argument, NULL, 0 },
> { "no-copy-pic", no_argument, NULL, 0 },
> { "max-ausize-factor", required_argument, NULL, 0 },
> + { "idr-recovery-sei", no_argument, NULL, 0 },
> + { "no-idr-recovery-sei", no_argument, NULL, 0 },
> { 0, 0, 0, 0 },
> { 0, 0, 0, 0 },
> { 0, 0, 0, 0 },
> @@ -552,6 +554,7 @@
> H0(" --[no-]repeat-headers Emit SPS and PPS headers at each
> keyframe. Default %s\n", OPT(param->bRepeatHeaders));
> H0(" --[no-]info Emit SEI identifying encoder and
> parameters. Default %s\n", OPT(param->bEmitInfoSEI));
> H0(" --[no-]hrd Enable HRD parameters signaling.
> Default %s\n", OPT(param->bEmitHRDSEI));
> + H0(" --[no-]idr-recovery-sei Emit recovery point infor SEI at
> each IDR frame \n");
> H0(" --[no-]temporal-layers Enable a temporal sublayer for
> unreferenced B frames. Default %s\n", OPT(param->
> bEnableTemporalSubLayers));
> 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);
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
>
Pushed.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20180309/590ee088/attachment.html>
More information about the x265-devel
mailing list