On Thu, Apr 12, 2018 at 5:44 PM, Ashok Kumar Mishra < as...@multicorewareinc.com> wrote:
> Adding the patch file. > > > On Thu, Apr 12, 2018 at 5:14 PM, <as...@multicorewareinc.com> wrote: > >> # HG changeset patch >> # User Ashok Kumar Mishra <as...@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.
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel