[x265] [PATCH] Reset rps for I-slice marked as P-slice in enhancement layer

Karam Singh karam.singh at multicorewareinc.com
Thu Sep 12 12:46:21 UTC 2024


All the patches of this series have been pushed to the master branch.
*__________________________*
*Karam Singh*
*Ph.D. IIT Guwahati*
Senior Software (Video Coding) Engineer
Mobile: +91 8011279030
Block 9A, 6th floor, DLF Cyber City
Manapakkam, Chennai 600 089


On Mon, Sep 9, 2024 at 2:02 PM Anusuya Kumarasamy <
anusuya.kumarasamy at multicorewareinc.com> wrote:

> From f2c166ff4fbc49a004b766ebd34b24515491ac77 Mon Sep 17 00:00:00 2001
> From: AnusuyaKumarasamy <anusuya.kumarasamy at multicorewareinc.com>
> Date: Mon, 19 Aug 2024 13:46:55 +0530
> Subject: [PATCH 1/7] Reset rps for I-slice marked as P-slice in enhancement
>  layer
>
> ---
>  source/common/slice.cpp        | 6 ++++--
>  source/encoder/dpb.cpp         | 8 ++++++--
>  source/encoder/encoder.cpp     | 5 ++++-
>  source/encoder/ratecontrol.cpp | 6 +++++-
>  4 files changed, 19 insertions(+), 6 deletions(-)
>
> diff --git a/source/common/slice.cpp b/source/common/slice.cpp
> index 24ccff933..0c09df21b 100644
> --- a/source/common/slice.cpp
> +++ b/source/common/slice.cpp
> @@ -82,16 +82,18 @@ void Slice::setRefPicList(PicList& picList, PicList&
> refPicSetInterLayer0, PicLi
>          return;
>      }
>
> -#if ENABLE_SCC_EXT
> +#if ENABLE_SCC_EXT || ENABLE_MULTIVIEW || ENABLE_ALPHA
>      /*Reset the number of references for I-slice marked as P-slice*/
> -    if (m_param->bEnableSCC && m_sliceType != m_origSliceType)
> +    if ((m_param->bEnableSCC || sLayerId) && m_sliceType !=
> m_origSliceType)
>      {
>          memset(m_refFrameList, 0, sizeof(m_refFrameList));
>          memset(m_refReconPicList, 0, sizeof(m_refReconPicList));
>          memset(m_refPOCList, 0, sizeof(m_refPOCList));
>          m_numRefIdx[0] = 1;
>      }
> +#endif
>
> +#if ENABLE_SCC_EXT
>      if (!checkNumPocTotalCurr && m_rps.numberOfPictures == 0)
>      {
>          Frame* prevPic = picList.getPOC(X265_MAX(0, m_poc - 1));
> diff --git a/source/encoder/dpb.cpp b/source/encoder/dpb.cpp
> index 498d62c1a..19480d7ca 100644
> --- a/source/encoder/dpb.cpp
> +++ b/source/encoder/dpb.cpp
> @@ -151,9 +151,12 @@ void DPB::prepareEncode(Frame *newFrame)
>      if (slice->m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL ||
> slice->m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP)
>          m_lastIDR = pocCurr;
>      slice->m_lastIDR = m_lastIDR;
> -    slice->m_origSliceType = slice->m_sliceType = IS_X265_TYPE_B(type) ?
> B_SLICE : (type == X265_TYPE_P) ? P_SLICE : I_SLICE;
> +    slice->m_sliceType = IS_X265_TYPE_B(type) ? B_SLICE : (type ==
> X265_TYPE_P) ? P_SLICE : I_SLICE;
> +#if ENABLE_SCC_EXT
> +    if (slice->m_param->bEnableSCC)        slice->m_origSliceType =
> slice->m_sliceType;
>      if (slice->m_param->bEnableSCC && IS_X265_TYPE_I(type))
>          slice->m_sliceType = P_SLICE;
> +#endif
>
>      if (type == X265_TYPE_B)
>      {
> @@ -481,7 +484,8 @@ void DPB::decodingRefreshMarking(int pocCurr,
> NalUnitType nalUnitType, int scala
>                  iterFrame = iterFrame->m_next;
>              }
>
> -            m_bRefreshPending = false;
> +            if (scalableLayerId == m_picList.first()->m_param->numLayers
> - 1)
> +                m_bRefreshPending = false;
>          }
>          if (nalUnitType == NAL_UNIT_CODED_SLICE_CRA)
>          {
> diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp
> index 1a16f039d..4c2865953 100644
> --- a/source/encoder/encoder.cpp
> +++ b/source/encoder/encoder.cpp
> @@ -2223,6 +2223,7 @@ int Encoder::encode(const x265_picture* pic_in,
> x265_picture** pic_out)
>                      frameEnc[layer]->m_lowres.sliceType = baseViewType;
>                  else if(m_param->numViews > 1)
>                      frameEnc[layer]->m_lowres.sliceType =
> IS_X265_TYPE_I(baseViewType) ? X265_TYPE_P : baseViewType;
> +                frameEnc[layer]->m_lowres.bKeyframe =
> frameEnc[0]->m_lowres.bKeyframe;
>              }
>  #endif
>
> @@ -2309,6 +2310,8 @@ int Encoder::encode(const x265_picture* pic_in,
> x265_picture** pic_out)
>                      slice->m_endCUAddr =
> slice->realEndAddress(m_sps.numCUsInFrame * m_param->num4x4Partitions);
>                  }
>                  frameEnc[layer]->m_valid = true;
> +                int baseViewType = frameEnc[0]->m_lowres.sliceType;
> +                frameEnc[layer]->m_encData->m_slice->m_origSliceType =
> IS_X265_TYPE_B(baseViewType) ? B_SLICE : (baseViewType == X265_TYPE_P) ?
> P_SLICE : I_SLICE;
>              }
>              if (m_param->analysisLoad && m_param->bDisableLookahead)
>              {
> @@ -3653,11 +3656,11 @@ void Encoder::initSPS(SPS *sps)
>      sps->sps_extension_flag = false;
>
>  #if ENABLE_MULTIVIEW
> +    sps->maxViews = m_param->numViews;
>      if (m_param->numViews > 1)
>      {
>          sps->sps_extension_flag = true;
>          sps->setSpsExtOrMaxSubLayersMinus1 = 7;
> -        sps->maxViews = m_param->numViews;
>      }
>  #endif
>
> diff --git a/source/encoder/ratecontrol.cpp
> b/source/encoder/ratecontrol.cpp
> index 25cb7318e..9851f69e3 100644
> --- a/source/encoder/ratecontrol.cpp
> +++ b/source/encoder/ratecontrol.cpp
> @@ -1348,7 +1348,11 @@ int RateControl::rateControlStart(Frame* curFrame,
> RateControlEntry* rce, Encode
>
>      FrameData& curEncData = *curFrame->m_encData;
>      m_curSlice = curEncData.m_slice;
> -    m_sliceType = m_curSlice->m_origSliceType;
> +    m_sliceType = m_curSlice->m_sliceType;
> +#if ENABLE_SCC_EXT
> +    if(m_param->bEnableSCC)
> +        m_sliceType = m_curSlice->m_origSliceType;
> +#endif
>      rce->sliceType = m_sliceType;
>      if (!m_2pass)
>          rce->keptAsRef = IS_REFERENCED(curFrame);
> --
> 2.36.0.windows.1
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20240912/62063bb7/attachment-0001.htm>


More information about the x265-devel mailing list