[x265] [PATCH] Support for HLG-graded content and pic_struct
Ashok Kumar Mishra
ashok at multicorewareinc.com
Thu Apr 12 14:21:00 CEST 2018
On Thu, Apr 12, 2018 at 5:44 PM, Ashok Kumar Mishra <
ashok at multicorewareinc.com> wrote:
> Adding the patch file.
>
>
> On Thu, Apr 12, 2018 at 5:14 PM, <ashok at multicorewareinc.com> wrote:
>
>> # HG changeset patch
>> # User Ashok Kumar Mishra <ashok at multicorewareinc.com>
>> # Date 1523532439 -19800
>> # Thu Apr 12 16:57:19 2018 +0530
>> # Node ID ace55bce0e3c6e0beb52712fd71e01025bd73a22
>> # Parent 04a337abd70de269cef7d9655365f3a3ebde02aa
>> Support for HLG-graded content and pic_struct
>>
>> diff -r 04a337abd70d -r ace55bce0e3c source/common/param.cpp
>> --- a/source/common/param.cpp Thu Apr 12 15:10:59 2018 +0530
>> +++ b/source/common/param.cpp Thu Apr 12 16:57:19 2018 +0530
>> @@ -134,7 +134,8 @@
>> param->bEmitInfoSEI = 1;
>> param->bEmitHDRSEI = 0;
>> param->bEmitIDRRecoverySEI = 0;
>> - /* CU definitions */
>> +
>> + /* CU definitions */
>> param->maxCUSize = 64;
>> param->minCUSize = 8;
>> param->tuQTMaxInterDepth = 1;
>> @@ -192,7 +193,8 @@
>> param->bEnableSAO = 1;
>> param->bSaoNonDeblocked = 0;
>> param->bLimitSAO = 0;
>> - /* Coding Quality */
>> +
>> + /* Coding Quality */
>> param->cbQpOffset = 0;
>> param->crQpOffset = 0;
>> param->rdPenalty = 0;
>> @@ -302,6 +304,10 @@
>> param->bLowPassDct = 0;
>> param->bMVType = 0;
>> param->bSingleSeiNal = 0;
>> +
>> + /* SEI messages */
>> + param->preferredTransferCharacteristics = -1;
>> + param->pictureStructure = -1;
>> }
>>
>> int x265_param_default_preset(x265_param* param, const char* preset,
>> const char* tune)
>> @@ -1030,6 +1036,8 @@
>> OPT("max-ausize-factor") p->maxAUSizeFactor = atof(value);
>> OPT("dynamic-refine") p->bDynamicRefine = atobool(value);
>> OPT("single-sei") p->bSingleSeiNal = atobool(value);
>> + OPT("atc-sei") p->preferredTransferCharacteristics =
>> atoi(value);
>> + OPT("pic-struct") p->pictureStructure = atoi(value);
>> else
>> return X265_PARAM_BAD_NAME;
>> }
>> diff -r 04a337abd70d -r ace55bce0e3c source/encoder/encoder.cpp
>> --- a/source/encoder/encoder.cpp Thu Apr 12 15:10:59 2018 +0530
>> +++ b/source/encoder/encoder.cpp Thu Apr 12 16:57:19 2018 +0530
>> @@ -338,10 +338,12 @@
>>
>> if (m_param->bEmitHRDSEI)
>> m_rateControl->initHRD(m_sps);
>> +
>> if (!m_rateControl->init(m_sps))
>> m_aborted = true;
>> if (!m_lookahead->create())
>> m_aborted = true;
>> +
>> initRefIdx();
>> if (m_param->analysisSave && m_param->bUseAnalysisFile)
>> {
>> @@ -2436,7 +2438,7 @@
>> vui.defaultDisplayWindow.bottomOffset =
>> m_param->vui.defDispWinBottomOffset;
>> vui.defaultDisplayWindow.leftOffset = m_param->vui.defDispWinLeftOff
>> set;
>>
>> - vui.frameFieldInfoPresentFlag = !!m_param->interlaceMode;
>> + vui.frameFieldInfoPresentFlag = !!m_param->interlaceMode ||
>> (m_param->pictureStructure >= 0);
>> vui.fieldSeqFlag = !!m_param->interlaceMode;
>>
>> vui.hrdParametersPresentFlag = m_param->bEmitHRDSEI;
>> diff -r 04a337abd70d -r ace55bce0e3c source/encoder/frameencoder.cpp
>> --- a/source/encoder/frameencoder.cpp Thu Apr 12 15:10:59 2018 +0530
>> +++ b/source/encoder/frameencoder.cpp Thu Apr 12 16:57:19 2018 +0530
>> @@ -674,9 +674,14 @@
>> sei->m_picStruct = (poc & 1) ? 1 /* top */ : 2 /* bottom
>> */;
>> else if (m_param->interlaceMode == 1)
>> sei->m_picStruct = (poc & 1) ? 2 /* bottom */ : 1 /* top
>> */;
>> - else
>> - sei->m_picStruct = 0;
>> - sei->m_sourceScanType = 0;
>> + else
>> + sei->m_picStruct =
>> m_param->pictureStructure;
>> +
>> + if (m_param->interlaceMode)
>> + sei->m_sourceScanType = 0;
>> + else
>> + sei->m_sourceScanType = 1;
>> +
>> sei->m_duplicateFlag = false;
>> }
>>
>> @@ -696,6 +701,18 @@
>> sei->write(m_bs, *slice->m_sps);
>> sei->alignAndSerialize(m_bs, false, m_param->bSingleSeiNal,
>> NAL_UNIT_PREFIX_SEI, m_nalList);
>> }
>> +
>> + if (m_param->preferredTransferCharacteristics > -1 &&
>> slice->isIRAP())
>> + {
>> + SEIAlternativeTC m_seiAlternativeTC;
>> + m_seiAlternativeTC.m_preferredTransferCharacteristics =
>> m_param->preferredTransferCharacteristics;
>> + m_bs.resetBits();
>> + int payloadSize = m_seiAlternativeTC.countPayloa
>> dSize(*slice->m_sps);
>> + m_seiAlternativeTC.setSize(payloadSize);
>> + m_seiAlternativeTC.write(m_bs, *slice->m_sps);
>> + m_seiAlternativeTC.alignAndSerialize(m_bs, false,
>> m_param->bSingleSeiNal, NAL_UNIT_PREFIX_SEI, m_nalList);
>> + }
>> +
>> bool isSei = false;
>> /* Write user SEI */
>> for (int i = 0; i < m_frame->m_userSEI.numPayloads; i++)
>> @@ -729,8 +746,9 @@
>> else
>> x265_log(m_param, X265_LOG_ERROR, "Unrecognized SEI type\n");
>> }
>> - isSei |= ((m_frame->m_lowres.bKeyframe && m_param->bRepeatHeaders)
>> || m_param->bEmitHRDSEI
>> - || !!m_param->interlaceMode || (m_frame->m_lowres.sliceType ==
>> X265_TYPE_IDR && m_param->bEmitIDRRecoverySEI));
>> +
>> + isSei |= ((m_frame->m_lowres.bKeyframe && m_param->bRepeatHeaders)
>> || m_param->bEmitHRDSEI ||
>> + !!m_param->interlaceMode || (m_frame->m_lowres.sliceType ==
>> X265_TYPE_IDR && m_param->bEmitIDRRecoverySEI));
>>
>> if (isSei && m_param->bSingleSeiNal)
>> {
>> diff -r 04a337abd70d -r ace55bce0e3c source/encoder/sei.h
>> --- a/source/encoder/sei.h Thu Apr 12 15:10:59 2018 +0530
>> +++ b/source/encoder/sei.h Thu Apr 12 16:57:19 2018 +0530
>> @@ -296,5 +296,23 @@
>> WRITE_CODE(m_payload[i], 8, "creative_intent_metadata");
>> }
>> };
>> +
>> +class SEIAlternativeTC : public SEI
>> +{
>> +public:
>> + int m_preferredTransferCharacteristics;
>> + SEIAlternativeTC()
>> + {
>> + m_payloadType = ALTERNATIVE_TRANSFER_CHARACTERISTICS;
>> + m_payloadSize = 0;
>> + m_preferredTransferCharacteristics = -1;
>> + }
>> +
>> + void writeSEI(const SPS&)
>> + {
>> + WRITE_CODE(m_preferredTransferCharacteristics, 8, "Preferred
>> transfer characteristics");
>> + }
>> +};
>> +
>> }
>> #endif // ifndef X265_SEI_H
>> diff -r 04a337abd70d -r ace55bce0e3c source/x265.h
>> --- a/source/x265.h Thu Apr 12 15:10:59 2018 +0530
>> +++ b/source/x265.h Thu Apr 12 16:57:19 2018 +0530
>> @@ -265,6 +265,7 @@
>> REGION_REFRESH_INFO = 134,
>> MASTERING_DISPLAY_INFO = 137,
>> CONTENT_LIGHT_LEVEL_INFO = 144,
>> + ALTERNATIVE_TRANSFER_CHARACTERISTICS = 147,
>> } SEIPayloadType;
>>
>> typedef struct x265_sei_payload
>> @@ -1161,6 +1162,18 @@
>> * Default is 0, which is recommended */
>> int crQpOffset;
>>
>> + /* Specifies the preferred transfer characteristics syntax
>> element in the
>> + * alternative transfer characteristics SEI message (see. D.2.38
>> and D.3.38 of
>> + * JCTVC-W1005 http://phenix.it-sudparis.eu/j
>> ct/doc_end_user/documents/23_San%20Diego/wg11/JCTVC-W1005-v4.zip
>> + * */
>> + int preferredTransferCharacteristics;
>> +
>> + /*
>> + * Specifies the value for the pic_struc syntax element of the
>> picture timing SEI message (See D2.3 and D3.3)
>> + * of the HEVC spec. for a detailed explanation
>> + * */
>> + int pictureStructure;
>> +
>> struct
>> {
>> /* Explicit mode of rate-control, necessary for API users. It
>> must
>> diff -r 04a337abd70d -r ace55bce0e3c source/x265cli.h
>> --- a/source/x265cli.h Thu Apr 12 15:10:59 2018 +0530
>> +++ b/source/x265cli.h Thu Apr 12 16:57:19 2018 +0530
>> @@ -300,6 +300,8 @@
>> { "no-idr-recovery-sei", no_argument, NULL, 0 },
>> { "single-sei", no_argument, NULL, 0 },
>> { "no-single-sei", no_argument, NULL, 0 },
>> + { "atc-sei", required_argument, NULL, 0 },
>> + { "pic-struct", required_argument, NULL, 0 },
>> { 0, 0, 0, 0 },
>> { 0, 0, 0, 0 },
>> { 0, 0, 0, 0 },
>> @@ -563,6 +565,8 @@
>> H0(" --[no-]temporal-layers Enable a temporal sublayer for
>> unreferenced B frames. Default %s\n", OPT(param->bEnableTemporalSubL
>> ayers));
>> H0(" --[no-]aud Emit access unit delimiters at
>> the start of each access unit. Default %s\n", OPT(param->bEnableAccessUnitDe
>> limiters));
>> H1(" --hash <integer> Decoded Picture Hash SEI 0:
>> disabled, 1: MD5, 2: CRC, 3: Checksum. Default %d\n",
>> param->decodedPictureHashSEI);
>> + H0(" --atc-sei <integer> Emit the alternative
>> transfer characteristics SEI message where the integer is the preferred
>> transfer characteristics. Default disabled\n");
>> + H0(" --pic-struct <integer> Set the picture structure
>> and emits it in the picture timing SEI message. Values in the range 0..12.
>> See D.3.3 of the HEVC spec. for a detailed explanation.");
>> H0(" --log2-max-poc-lsb <integer> Maximum of the picture order
>> count\n");
>> H0(" --[no-]vui-timing-info Emit VUI timing information in
>> the bistream. Default %s\n", OPT(param->bEmitVUITimingInfo));
>> H0(" --[no-]vui-hrd-info Emit VUI HRD information in the
>> bistream. Default %s\n", OPT(param->bEmitVUIHRDInfo));
>>
>
>
Pushed.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20180412/bd2decca/attachment.html>
More information about the x265-devel
mailing list