[x265] [PATCH] Cleanup SEI code

Ashok Kumar Mishra ashok at multicorewareinc.com
Tue Sep 25 11:01:16 CEST 2018


On Tue, Sep 18, 2018 at 4:35 PM <ashok at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Ashok Kumar Mishra <ashok at multicorewareinc.com>
> # Date 1537268644 -19800
> #      Tue Sep 18 16:34:04 2018 +0530
> # Node ID f3c175d92ec248fc6b3388c6f70c1f3ea365d539
> # Parent  6426e22f479f10a07d606119dede0da844fb5015
> Cleanup SEI code
>
> diff -r 6426e22f479f -r f3c175d92ec2 source/common/param.cpp
> --- a/source/common/param.cpp   Tue Sep 18 16:34:04 2018 +0530
> +++ b/source/common/param.cpp   Tue Sep 18 16:34:04 2018 +0530
> @@ -1415,9 +1415,16 @@
>      if (param->masteringDisplayColorVolume || param->maxFALL ||
> param->maxCLL)
>          param->bEmitHDRSEI = 1;
>
> -    bool isSingleSEI = ((param->bEmitHRDSEI || param->bEmitInfoSEI ||
> param->decodedPictureHashSEI ||
> -                         param->masteringDisplayColorVolume ||
> param->maxCLL || param->maxFALL ||
> -                         param->bEmitHDRSEI ||
> param->bEmitIDRRecoverySEI));
> +    bool isSingleSEI = (param->bRepeatHeaders
> +                     || param->bEmitHRDSEI
> +                     || param->bEmitInfoSEI
> +                     || param->bEmitHDRSEI
> +                     || param->bEmitIDRRecoverySEI
> +                   || !!param->interlaceMode
> +                     || param->preferredTransferCharacteristics > 1
> +                     || param->toneMapFile
> +                     || param->naluFile);
> +
>      if (!isSingleSEI && param->bSingleSeiNal)
>      {
>          param->bSingleSeiNal = 0;
> diff -r 6426e22f479f -r f3c175d92ec2 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp        Tue Sep 18 16:34:04 2018 +0530
> +++ b/source/encoder/encoder.cpp        Tue Sep 18 16:34:04 2018 +0530
> @@ -2374,27 +2374,22 @@
>      sbacCoder.codePPS(m_pps, (m_param->maxSlices <= 1), m_iPPSQpMinus26);
>      bs.writeByteAlignment();
>      list.serialize(NAL_UNIT_PPS, bs);
> +
>      if (m_param->bSingleSeiNal)
>          bs.resetBits();
> +
>      if (m_param->bEmitHDRSEI)
>      {
>          SEIContentLightLevel cllsei;
>          cllsei.max_content_light_level = m_param->maxCLL;
>          cllsei.max_pic_average_light_level = m_param->maxFALL;
> -        if (!m_param->bSingleSeiNal)
> -            bs.resetBits();
> -        cllsei.write(bs, m_sps);
> -        cllsei.alignAndSerialize(bs, false, m_param->bSingleSeiNal,
> NAL_UNIT_PREFIX_SEI, list);
> +        cllsei.writeSEImessages(bs, m_sps, NAL_UNIT_PREFIX_SEI, list,
> m_param->bSingleSeiNal);
> +
>          if (m_param->masteringDisplayColorVolume)
>          {
>              SEIMasteringDisplayColorVolume mdsei;
>              if (mdsei.parse(m_param->masteringDisplayColorVolume))
> -            {
> -                if (!m_param->bSingleSeiNal)
> -                    bs.resetBits();
> -                mdsei.write(bs, m_sps);
> -                mdsei.alignAndSerialize(bs, false,
> m_param->bSingleSeiNal, NAL_UNIT_PREFIX_SEI, list);
> -            }
> +                mdsei.writeSEImessages(bs, m_sps, NAL_UNIT_PREFIX_SEI,
> list, m_param->bSingleSeiNal);
>              else
>                  x265_log(m_param, X265_LOG_WARNING, "unable to parse
> mastering display color volume info\n");
>          }
> @@ -2413,13 +2408,12 @@
>                      "Copyright 2013-2018 (c) Multicoreware, Inc - "
>                      "http://x265.org - options: %s",
>                      X265_BUILD, PFX(version_str), PFX(build_info_str),
> opts);
> -                if (!m_param->bSingleSeiNal)
> -                    bs.resetBits();
> +
>                  SEIuserDataUnregistered idsei;
>                  idsei.m_userData = (uint8_t*)buffer;
>                  idsei.setSize((uint32_t)strlen(buffer));
> -                idsei.write(bs, m_sps);
> -                idsei.alignAndSerialize(bs, false,
> m_param->bSingleSeiNal, NAL_UNIT_PREFIX_SEI, list);
> +                idsei.writeSEImessages(bs, m_sps, NAL_UNIT_PREFIX_SEI,
> list, m_param->bSingleSeiNal);
> +
>                  X265_FREE(buffer);
>              }
>
> @@ -2433,12 +2427,7 @@
>          SEIActiveParameterSets sei;
>          sei.m_selfContainedCvsFlag = true;
>          sei.m_noParamSetUpdateFlag = true;
> -        if (!m_param->bSingleSeiNal)
> -            bs.resetBits();
> -        int payloadSize = sei.countPayloadSize(m_sps);
> -        sei.setSize(payloadSize);
> -        sei.write(bs, m_sps);
> -        sei.alignAndSerialize(bs, false, m_param->bSingleSeiNal,
> NAL_UNIT_PREFIX_SEI, list);
> +        sei.writeSEImessages(bs, m_sps, NAL_UNIT_PREFIX_SEI, list,
> m_param->bSingleSeiNal);
>      }
>  }
>
> @@ -2521,7 +2510,7 @@
>      vui.defaultDisplayWindow.bottomOffset =
> m_param->vui.defDispWinBottomOffset;
>      vui.defaultDisplayWindow.leftOffset =
> m_param->vui.defDispWinLeftOffset;
>
> -       vui.frameFieldInfoPresentFlag = !!m_param->interlaceMode ||
> (m_param->pictureStructure >= 0);
> +    vui.frameFieldInfoPresentFlag = !!m_param->interlaceMode ||
> (m_param->pictureStructure >= 0);
>      vui.fieldSeqFlag = !!m_param->interlaceMode;
>
>      vui.hrdParametersPresentFlag = m_param->bEmitHRDSEI;
> diff -r 6426e22f479f -r f3c175d92ec2 source/encoder/frameencoder.cpp
> --- a/source/encoder/frameencoder.cpp   Tue Sep 18 16:34:04 2018 +0530
> +++ b/source/encoder/frameencoder.cpp   Tue Sep 18 16:34:04 2018 +0530
> @@ -365,6 +365,33 @@
>      return length;
>  }
>
> +bool FrameEncoder::writeToneMapInfo(x265_sei_payload *payload)
> +{
> +    bool payloadChange = false;
> +    if (m_top->m_prevTonemapPayload.payload != NULL &&
> payload->payloadSize == m_top->m_prevTonemapPayload.payloadSize)
> +    {
> +        if (memcmp(m_top->m_prevTonemapPayload.payload, payload->payload,
> payload->payloadSize) != 0)
> +            payloadChange = true;
> +    }
> +    else
> +    {
> +        payloadChange = true;
> +        if (m_top->m_prevTonemapPayload.payload != NULL)
> +            x265_free(m_top->m_prevTonemapPayload.payload);
> +        m_top->m_prevTonemapPayload.payload =
> (uint8_t*)x265_malloc(sizeof(uint8_t)* payload->payloadSize);
> +    }
> +
> +    if (payloadChange)
> +    {
> +        m_top->m_prevTonemapPayload.payloadType = payload->payloadType;
> +        m_top->m_prevTonemapPayload.payloadSize = payload->payloadSize;
> +        memcpy(m_top->m_prevTonemapPayload.payload, payload->payload,
> payload->payloadSize);
> +    }
> +
> +    bool isIDR = m_frame->m_lowres.sliceType == X265_TYPE_IDR;
> +    return (payloadChange || isIDR);
> +}
> +
>  void FrameEncoder::writeTrailingSEIMessages()
>  {
>      Slice* slice = m_frame->m_encData->m_slice;
> @@ -393,10 +420,8 @@
>          payloadSize = 1 + 4 * planes;
>      }
>
> -    m_bs.resetBits();
>      m_seiReconPictureDigest.setSize(payloadSize);
> -    m_seiReconPictureDigest.write(m_bs, *slice->m_sps);
> -    m_seiReconPictureDigest.alignAndSerialize(m_bs, true,
> m_param->bSingleSeiNal, NAL_UNIT_SUFFIX_SEI, m_nalList);
> +    m_seiReconPictureDigest.writeSEImessages(m_bs, *slice->m_sps,
> NAL_UNIT_SUFFIX_SEI, m_nalList, false);
>  }
>
>  void FrameEncoder::compressFrame()
> @@ -496,9 +521,7 @@
>                  wa.waitForExit();
>              else
>                  weightAnalyse(*slice, *m_frame, *m_param);
> -
>          }
> -
>      }
>      else
>          slice->disableWeights();
> @@ -670,12 +693,7 @@
>              bpSei->m_dpbDelayOffset = 0;
>              // hrdFullness() calculates the initial CPB removal delay and
> offset
>              m_top->m_rateControl->hrdFullness(bpSei);
> -            if (!m_param->bSingleSeiNal)
> -                m_bs.resetBits();
> -            int payloadSize = bpSei->countPayloadSize(*slice->m_sps);
> -            bpSei->setSize(payloadSize);
> -            bpSei->write(m_bs, *slice->m_sps);
> -            bpSei->alignAndSerialize(m_bs, false, m_param->bSingleSeiNal,
> NAL_UNIT_PREFIX_SEI, m_nalList);
> +            bpSei->writeSEImessages(m_bs, *slice->m_sps,
> NAL_UNIT_PREFIX_SEI, m_nalList, m_param->bSingleSeiNal);
>
>              m_top->m_lastBPSEI = m_rce.encodeOrder;
>          }
> @@ -687,11 +705,7 @@
>              sei.m_recoveryPocCnt = 0;
>              sei.m_exactMatchingFlag = true;
>              sei.m_brokenLinkFlag = false;
> -            if (!m_param->bSingleSeiNal)
> -                m_bs.resetBits();
> -            sei.setSize(sei.countPayloadSize(*slice->m_sps));
> -            sei.write(m_bs, *slice->m_sps);
> -            sei.alignAndSerialize(m_bs, false, m_param->bSingleSeiNal,
> NAL_UNIT_PREFIX_SEI, m_nalList);
> +            sei.writeSEImessages(m_bs, *slice->m_sps,
> NAL_UNIT_PREFIX_SEI, m_nalList, m_param->bSingleSeiNal);
>          }
>      }
>
> @@ -711,10 +725,7 @@
>              else
>                  sei->m_picStruct = m_param->pictureStructure;
>
> -            if (m_param->interlaceMode)
> -                sei->m_sourceScanType = 0;
> -            else
> -                sei->m_sourceScanType = 1;
> +            sei->m_sourceScanType = m_param->interlaceMode ? 0 : 1;
>
>              sei->m_duplicateFlag = false;
>          }
> @@ -728,26 +739,17 @@
>              sei->m_auCpbRemovalDelay = X265_MIN(X265_MAX(1,
> m_rce.encodeOrder - prevBPSEI), (1 << hrd->cpbRemovalDelayLength));
>              sei->m_picDpbOutputDelay = slice->m_sps->numReorderPics + poc
> - m_rce.encodeOrder;
>          }
> -        if (!m_param->bSingleSeiNal)
> -            m_bs.resetBits();
> -        int payloadSize = sei->countPayloadSize(*slice->m_sps);
> -        sei->setSize(payloadSize);
> -        sei->write(m_bs, *slice->m_sps);
> -        sei->alignAndSerialize(m_bs, false, m_param->bSingleSeiNal,
> NAL_UNIT_PREFIX_SEI, m_nalList);
> +
> +        sei->writeSEImessages(m_bs, *slice->m_sps, NAL_UNIT_PREFIX_SEI,
> m_nalList, m_param->bSingleSeiNal);
>      }
>
>      if (m_param->preferredTransferCharacteristics > -1 && slice->isIRAP())
>      {
>          SEIAlternativeTC m_seiAlternativeTC;
>          m_seiAlternativeTC.m_preferredTransferCharacteristics =
> m_param->preferredTransferCharacteristics;
> -        m_bs.resetBits();
> -        int payloadSize =
> m_seiAlternativeTC.countPayloadSize(*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);
> +        m_seiAlternativeTC.writeSEImessages(m_bs, *slice->m_sps,
> NAL_UNIT_PREFIX_SEI, m_nalList, m_param->bSingleSeiNal);
>      }
>
> -    bool isSei = false;
>      /* Write user SEI */
>      for (int i = 0; i < m_frame->m_userSEI.numPayloads; i++)
>      {
> @@ -756,33 +758,27 @@
>          {
>              SEIuserDataUnregistered sei;
>              sei.m_userData = payload->payload;
> -            if (!m_param->bSingleSeiNal)
> -                m_bs.resetBits();
>              sei.setSize(payload->payloadSize);
> -            sei.write(m_bs, *slice->m_sps);
> -            sei.alignAndSerialize(m_bs, false, m_param->bSingleSeiNal,
> NAL_UNIT_PREFIX_SEI, m_nalList);
> -            isSei = true;
> +            sei.writeSEImessages(m_bs, *slice->m_sps,
> NAL_UNIT_PREFIX_SEI, m_nalList, m_param->bSingleSeiNal);
>          }
>          else if (payload->payloadType == USER_DATA_REGISTERED_ITU_T_T35)
>          {
> +            bool writeSei = m_param->bDhdr10opt ?
> writeToneMapInfo(payload) : true;
>              if (writeSei)
>              {
> -                SEICreativeIntentMeta sei;
> -                sei.m_payload = payload->payload;
> -                if (!m_param->bSingleSeiNal)
> -                    m_bs.resetBits();
> +                SEIuserDataRegistered sei;
> +                sei.m_userData = payload->payload;
>                  sei.setSize(payload->payloadSize);
> -                sei.write(m_bs, *slice->m_sps);
> -                sei.alignAndSerialize(m_bs, false,
> m_param->bSingleSeiNal, NAL_UNIT_PREFIX_SEI, m_nalList);
> -                isSei = true;
> +                sei.writeSEImessages(m_bs, *slice->m_sps,
> NAL_UNIT_PREFIX_SEI, m_nalList, m_param->bSingleSeiNal);
>              }
>          }
>          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));
> +    bool 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) ||
> +                   m_frame->m_userSEI.numPayloads);
>
>      if (isSei && m_param->bSingleSeiNal)
>      {
> @@ -1061,10 +1057,8 @@
>
>          m_nalList.serialize(slice->m_nalUnitType, m_bs);
>      }
> -    if (isSei && m_param->bSingleSeiNal)
> -        m_bs.resetBits();
>
> -    if (m_param->decodedPictureHashSEI)
> +    if (m_param->decodedPictureHashSEI)
>          writeTrailingSEIMessages();
>
>      uint64_t bytes = 0;
> diff -r 6426e22f479f -r f3c175d92ec2 source/encoder/frameencoder.h
> --- a/source/encoder/frameencoder.h     Tue Sep 18 16:34:04 2018 +0530
> +++ b/source/encoder/frameencoder.h     Tue Sep 18 16:34:04 2018 +0530
> @@ -230,6 +230,7 @@
>      int  collectCTUStatistics(const CUData& ctu, FrameStats* frameLog);
>      void noiseReductionUpdate();
>      void writeTrailingSEIMessages();
> +    bool writeToneMapInfo(x265_sei_payload *payload);
>
>      /* Called by WaveFront::findJob() */
>      virtual void processRow(int row, int threadId);
> diff -r 6426e22f479f -r f3c175d92ec2 source/encoder/sei.cpp
> --- a/source/encoder/sei.cpp    Tue Sep 18 16:34:04 2018 +0530
> +++ b/source/encoder/sei.cpp    Tue Sep 18 16:34:04 2018 +0530
> @@ -33,46 +33,44 @@
>      0x2C, 0xA2, 0xDE, 0x09, 0xB5, 0x17, 0x47, 0xDB,
>      0xBB, 0x55, 0xA4, 0xFE, 0x7F, 0xC2, 0xFC, 0x4E
>  };
> -/* count the size of the payload and return the size in bits */
> -int SEI::countPayloadSize(const SPS& sps)
> +
> +/* marshal a single SEI message sei, storing the marshalled representation
> +* in bitstream bs */
> +void SEI::writeSEImessages(Bitstream& bs, const SPS& sps, NalUnitType
> nalUnitType, NALList& list, int isNested)
>  {
> +    if (!isNested)
> +        bs.resetBits();
> +
>      BitCounter counter;
>      m_bitIf = &counter;
>      writeSEI(sps);
> +    /* count the size of the payload and return the size in bits */
>      X265_CHECK(0 == (counter.getNumberOfWrittenBits() & 7), "payload
> unaligned\n");
> -    int count = counter.getNumberOfWrittenBits() >> 3;
> -    return count;
> -}
> +    uint32_t payloadData = counter.getNumberOfWrittenBits() >> 3;
>
> -void SEI::alignAndSerialize(Bitstream& bs, int lastSei, int isSingleSei,
> NalUnitType nalUnitType, NALList& list)
> -{
> -    if (lastSei || !isSingleSei)
> +    // set bitstream
> +    m_bitIf = &bs;
> +
> +    uint32_t payloadType = m_payloadType;
> +    for (; payloadType >= 0xff; payloadType -= 0xff)
> +        WRITE_CODE(0xff, 8, "payload_type");
> +    WRITE_CODE(payloadType, 8, "payload_type");
> +
> +    uint32_t payloadSize = payloadData;
> +    for (; payloadSize >= 0xff; payloadSize -= 0xff)
> +        WRITE_CODE(0xff, 8, "payload_size");
> +    WRITE_CODE(payloadSize, 8, "payload_size");
> +
> +    // virtual writeSEI method, write to bs
> +    writeSEI(sps);
> +
> +    if (!isNested)
>      {
>          bs.writeByteAlignment();
>          list.serialize(nalUnitType, bs);
>      }
>  }
>
> -/* marshal a single SEI message sei, storing the marshalled representation
> - * in bitstream bs */
> -void SEI::write(Bitstream& bs, const SPS& sps)
> -{
> -    uint32_t type = m_payloadType;
> -    m_bitIf = &bs;
> -    uint32_t payloadSize = m_payloadSize;
> -    if (m_payloadType == USER_DATA_UNREGISTERED)
> -        payloadSize = m_payloadSize + 16;
> -    uint32_t payloadType = m_payloadType;
> -    for (; payloadType >= 0xff; payloadType -= 0xff)
> -        WRITE_CODE(0xff, 8, "payload_type");
> -    WRITE_CODE(type, 8, "payload_type");
> -    for (; payloadSize >= 0xff; payloadSize -= 0xff)
> -        WRITE_CODE(0xff, 8, "payload_size");
> -    WRITE_CODE(payloadSize, 8, "payload_size");
> -    /* virtual writeSEI method, write to bs */
> -    writeSEI(sps);
> -}
> -
>  void SEI::writeByteAlign()
>  {
>      // TODO: expose bs.writeByteAlignment() as virtual function
> diff -r 6426e22f479f -r f3c175d92ec2 source/encoder/sei.h
> --- a/source/encoder/sei.h      Tue Sep 18 16:34:04 2018 +0530
> +++ b/source/encoder/sei.h      Tue Sep 18 16:34:04 2018 +0530
> @@ -36,11 +36,9 @@
>  class SEI : public SyntaxElementWriter
>  {
>  public:
> -    /* SEI users call write() to marshal an SEI to a bitstream.
> -     * The write() method calls writeSEI() which encodes the header */
> -    void write(Bitstream& bs, const SPS& sps);
> -    void alignAndSerialize(Bitstream& bs, int lastSei, int isSingleSei,
> NalUnitType nalUnitType, NALList& list);
> -    int countPayloadSize(const SPS& sps);
> +    /* SEI users call writeSEImessages() to marshal an SEI to a bitstream.
> +    * The writeSEImessages() method calls writeSEI() which encodes the
> header */
> +    void writeSEImessages(Bitstream& bs, const SPS& sps, NalUnitType
> nalUnitType, NALList& list, int isNested);
>      void setSize(uint32_t size);
>      static char* base64Decode(char encodedString[], int
> base64EncodeLength);
>      virtual ~SEI() {}
> @@ -51,6 +49,32 @@
>      void writeByteAlign();
>  };
>
> +//seongnam.oh at samsung.com :: for the Creative Intent Meta Data Encoding
> +class SEIuserDataRegistered : public SEI
> +{
> +public:
> +    SEIuserDataRegistered()
> +    {
> +        m_payloadType = USER_DATA_REGISTERED_ITU_T_T35;
> +        m_payloadSize = 0;
> +    }
> +
> +    uint8_t *m_userData;
> +
> +    // daniel.vt at samsung.com :: for the Creative Intent Meta Data
> Encoding ( seongnam.oh at samsung.com )
> +    void writeSEI(const SPS&)
> +    {
> +        if (!m_userData)
> +            return;
> +
> +        uint32_t i = 0;
> +        for (; i < m_payloadSize; ++i)
> +            WRITE_CODE(m_userData[i], 8, "creative_intent_metadata");
> +    }
> +};
> +
> +static const uint32_t ISO_IEC_11578_LEN = 16;
> +
>  class SEIuserDataUnregistered : public SEI
>  {
>  public:
> @@ -59,11 +83,11 @@
>          m_payloadType = USER_DATA_UNREGISTERED;
>          m_payloadSize = 0;
>      }
> -    static const uint8_t m_uuid_iso_iec_11578[16];
> +    static const uint8_t m_uuid_iso_iec_11578[ISO_IEC_11578_LEN];
>      uint8_t *m_userData;
>      void writeSEI(const SPS&)
>      {
> -        for (uint32_t i = 0; i < 16; i++)
> +        for (uint32_t i = 0; i < ISO_IEC_11578_LEN; i++)
>              WRITE_CODE(m_uuid_iso_iec_11578[i], 8,
> "sei.uuid_iso_iec_11578[i]");
>          for (uint32_t i = 0; i < m_payloadSize; i++)
>              WRITE_CODE(m_userData[i], 8, "user_data");
> @@ -280,45 +304,21 @@
>      }
>  };
>
> -//seongnam.oh at samsung.com :: for the Creative Intent Meta Data Encoding
> -class SEICreativeIntentMeta : public SEI
> -{
> -public:
> -    SEICreativeIntentMeta()
> -    {
> -        m_payloadType = USER_DATA_REGISTERED_ITU_T_T35;
> -        m_payloadSize = 0;
> -    }
> -
> -    uint8_t *m_payload;
> -
> -    // daniel.vt at samsung.com :: for the Creative Intent Meta Data
> Encoding ( seongnam.oh at samsung.com )
> -    void writeSEI(const SPS&)
> -    {
> -        if (!m_payload)
> -            return;
> -
> -        uint32_t i = 0;
> -        for (; i < m_payloadSize; ++i)
> -            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");
> -       }
> +        m_payloadType = ALTERNATIVE_TRANSFER_CHARACTERISTICS;
> +        m_payloadSize = 0;
> +        m_preferredTransferCharacteristics = -1;
> +    }
> +
> +    void writeSEI(const SPS&)
> +    {
> +        WRITE_CODE(m_preferredTransferCharacteristics, 8, "Preferred
> transfer characteristics");
> +    }
>  };
>
>  }
>

Pushed to default.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20180925/bc2b1ede/attachment-0001.html>


More information about the x265-devel mailing list