<div dir="ltr">From 063fd4410aaf99b254f091f2ba5f9f439c025113 Mon Sep 17 00:00:00 2001<br>From: AnusuyaKumarasamy <<a href="mailto:anusuya.kumarasamy@multicorewareinc.com">anusuya.kumarasamy@multicorewareinc.com</a>><br>Date: Fri, 5 Jul 2024 14:39:54 +0530<br>Subject: [PATCH] Fix inconsistent issue<br><br>---<br> source/common/param.cpp         | 7 +++++++<br> source/common/piclist.cpp       | 3 ++-<br> source/encoder/encoder.cpp      | 4 ++++<br> source/encoder/entropy.cpp      | 4 ++--<br> source/encoder/frameencoder.cpp | 4 ++--<br> source/encoder/search.cpp       | 4 ++--<br> source/x265cli.cpp              | 2 +-<br> 7 files changed, 20 insertions(+), 8 deletions(-)<br><br>diff --git a/source/common/param.cpp b/source/common/param.cpp<br>index 01267b278..dec6ff6c9 100755<br>--- a/source/common/param.cpp<br>+++ b/source/common/param.cpp<br>@@ -1929,6 +1929,13 @@ int x265_check_params(x265_param* param)<br>         }<br>     }<br>     CHECK(param->rc.dataShareMode != X265_SHARE_MODE_FILE && param->rc.dataShareMode != X265_SHARE_MODE_SHAREDMEM, "Invalid data share mode. It must be one of the X265_DATA_SHARE_MODES enum values\n" );<br>+#if ENABLE_ALPHA<br>+    if (param->bEnableAlpha)<br>+    {<br>+        CHECK((param->internalCsp != X265_CSP_I420), "Alpha encode supported only with i420a colorspace");<br>+        CHECK((param->rc.rateControlMode != X265_RC_CQP), "Alpha encode supported only with CQP mode");<br>+    }<br>+#endif<br>     return check_failed;<br> }<br> <br>diff --git a/source/common/piclist.cpp b/source/common/piclist.cpp<br>index 4408d2355..345fd02c9 100644<br>--- a/source/common/piclist.cpp<br>+++ b/source/common/piclist.cpp<br>@@ -230,8 +230,9 @@ void PicList::remove(Frame& curFrame)<br> <br> Frame* PicList::removeFrame(Frame& curFrame)<br> {<br>+    Frame* tmp = &curFrame;<br> #if _DEBUG<br>-    Frame* tmp = m_start;<br>+    tmp = m_start;<br>     while (tmp && tmp != &curFrame)<br>     {<br>         tmp = tmp->m_next;<br>diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp<br>index 4844a158c..88dd4b3fb 100644<br>--- a/source/encoder/encoder.cpp<br>+++ b/source/encoder/encoder.cpp<br>@@ -1647,6 +1647,8 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)<br>                 inFrame[layer]->m_encodeStartTime = x265_mdate();<br>                 /* Set lowres scencut and satdCost here to aovid overwriting ANALYSIS_READ<br>                    decision by lowres init*/<br>+                int cuCount = inFrame[layer]->m_lowres.maxBlocksInRow * inFrame[layer]->m_lowres.maxBlocksInCol;<br>+                memset(inFrame[layer]->m_lowres.intraCost, 0, sizeof(int32_t) * cuCount);<br>                 inFrame[layer]->m_lowres.bScenecut = false;<br>                 inFrame[layer]->m_lowres.satdCost = (int64_t)-1;<br>                 inFrame[layer]->m_lowresInit = false;<br>@@ -2156,6 +2158,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)<br>             frameEnc[0] = m_lookahead->getDecidedPicture();<br>         if (frameEnc[0] && !pass && (!m_param->chunkEnd || (m_encodedFrameNum < m_param->chunkEnd)))<br>         {<br>+#if ENABLE_ALPHA<br>             //Pop non base view pictures from DPB piclist<br>             for (int layer = 1; layer < m_param->numScalableLayers; layer++)<br>             {<br>@@ -2163,6 +2166,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)<br>                 frameEnc[layer] = m_dpb->m_picList.removeFrame(*currentFrame);<br>                 frameEnc[layer]->m_lowres.sliceType = frameEnc[0]->m_lowres.sliceType;<br>             }<br>+#endif<br> <br>             if ((m_param->bEnableSceneCutAwareQp & FORWARD) && m_param->rc.bStatRead)<br>             {<br>diff --git a/source/encoder/entropy.cpp b/source/encoder/entropy.cpp<br>index cc8c83aea..8a99ba4e5 100644<br>--- a/source/encoder/entropy.cpp<br>+++ b/source/encoder/entropy.cpp<br>@@ -475,7 +475,7 @@ void Entropy::codePPS( const PPS& pps, bool filerAcross, int iPPSInitQpMinus26,<br>     WRITE_SVLC(pps.chromaQpOffset[1],      "pps_cr_qp_offset");<br>     WRITE_FLAG(pps.pps_slice_chroma_qp_offsets_present_flag, "pps_slice_chroma_qp_offsets_present_flag");<br> <br>-    WRITE_FLAG(pps.bUseWeightPred,            "weighted_pred_flag");<br>+    WRITE_FLAG(layer ? 0 : pps.bUseWeightPred,            "weighted_pred_flag");<br>     WRITE_FLAG(pps.bUseWeightedBiPred,        "weighted_bipred_flag");<br>     WRITE_FLAG(pps.bTransquantBypassEnabled,  "transquant_bypass_enable_flag");<br>     WRITE_FLAG(0,                             "tiles_enabled_flag");<br>@@ -829,7 +829,7 @@ void Entropy::codeSliceHeader(const Slice& slice, FrameData& encData, uint32_t s<br>             WRITE_UVLC(slice.m_colRefIdx, "collocated_ref_idx");<br>         }<br>     }<br>-    if ((slice.m_pps->bUseWeightPred && slice.m_sliceType == P_SLICE) || (slice.m_pps->bUseWeightedBiPred && slice.m_sliceType == B_SLICE))<br>+    if (((slice.m_pps->bUseWeightPred && slice.m_sliceType == P_SLICE) || (slice.m_pps->bUseWeightedBiPred && slice.m_sliceType == B_SLICE)) && !layer)<br>         codePredWeightTable(slice);<br> <br>     X265_CHECK(slice.m_maxNumMergeCand <= MRG_MAX_NUM_CANDS, "too many merge candidates\n");<br>diff --git a/source/encoder/frameencoder.cpp b/source/encoder/frameencoder.cpp<br>index 9263a4658..1aab82b77 100644<br>--- a/source/encoder/frameencoder.cpp<br>+++ b/source/encoder/frameencoder.cpp<br>@@ -542,8 +542,8 @@ void FrameEncoder::compressFrame(int layer)<br>         m_frame[layer]->m_encData->m_slice->m_rpsIdx = (m_top->m_rateControl->m_rce2Pass + m_frame[layer]->m_encodeOrder)->rpsIdx;<br> <br>     // Weighted Prediction parameters estimation.<br>-    bool bUseWeightP = slice->m_sliceType == P_SLICE && slice->m_pps->bUseWeightPred;<br>-    bool bUseWeightB = slice->m_sliceType == B_SLICE && slice->m_pps->bUseWeightedBiPred;<br>+    bool bUseWeightP = slice->m_sliceType == P_SLICE && slice->m_pps->bUseWeightPred && !layer;<br>+    bool bUseWeightB = slice->m_sliceType == B_SLICE && slice->m_pps->bUseWeightedBiPred && !layer;<br> <br>     WeightParam* reuseWP = NULL;<br>     if (m_param->analysisLoad && (bUseWeightP || bUseWeightB))<br>diff --git a/source/encoder/search.cpp b/source/encoder/search.cpp<br>index dab11fc79..001115782 100644<br>--- a/source/encoder/search.cpp<br>+++ b/source/encoder/search.cpp<br>@@ -2102,7 +2102,7 @@ void Search::singleMotionEstimation(Search& master, Mode& interMode, const Predi<br>     if (!m_param->analysisSave && !m_param->analysisLoad) /* Prevents load/save outputs from diverging if lowresMV is not available */<br>     {<br>         MV lmv = getLowresMV(interMode.cu, pu, list, ref);<br>-        if (lmv.notZero())<br>+        if (lmv.notZero() && !m_frame->m_sLayerId)<br>             mvc[numMvc++] = lmv;<br>         if (m_param->bEnableHME)<br>             mvp_lowres = lmv;<br>@@ -2413,7 +2413,7 @@ void Search::predInterSearch(Mode& interMode, const CUGeom& cuGeom, bool bChroma<br>                     if (!m_param->analysisSave && !m_param->analysisLoad) /* Prevents load/save outputs from diverging when lowresMV is not available */<br>                     {<br>                         MV lmv = getLowresMV(cu, pu, list, ref);<br>-                        if (lmv.notZero())<br>+                        if (lmv.notZero() && !m_frame->m_sLayerId)<br>                             mvc[numMvc++] = lmv;<br>                         if (m_param->bEnableHME)<br>                             mvp_lowres = lmv;<br>diff --git a/source/x265cli.cpp b/source/x265cli.cpp<br>index 6bb81f6d4..1ba0a5877 100755<br>--- a/source/x265cli.cpp<br>+++ b/source/x265cli.cpp<br>@@ -422,7 +422,7 @@ namespace X265_NS {<br>         if (input)<br>             input->release();<br>         input = NULL;<br>-        for (int i = 0; i < param->numScalableLayers; i++)<br>+        for (int i = 0; i < MAX_SCALABLE_LAYERS; i++)<br>         {<br>             if (recon[i])<br>                 recon[i]->release();<br>-- <br>2.36.0.windows.1<br><br></div>