<div dir="ltr">From 9350b78dc247df80673b93d0f076ef0c4e00a2af 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, 25 Oct 2024 16:37:08 +0530<br>Subject: [PATCH 06/10] Remove the redundant code for mcstf in encoder<br><br>---<br> source/common/frame.cpp    | 11 +++++<br> source/encoder/encoder.cpp | 97 ++------------------------------------<br> source/encoder/encoder.h   |  1 -<br> 3 files changed, 16 insertions(+), 93 deletions(-)<br><br>diff --git a/source/common/frame.cpp b/source/common/frame.cpp<br>index 63e9b829b..e5f5b0327 100644<br>--- a/source/common/frame.cpp<br>+++ b/source/common/frame.cpp<br>@@ -315,6 +315,17 @@ void Frame::destroy()<br>             delete m_fencPicSubsampled4;<br>             m_fencPicSubsampled4 = NULL;<br>         }<br>+<br>+        for (int i = 0; i < (m_mcstf->m_range << 1); i++)<br>+            m_mcstf->destroyRefPicInfo(&m_mcstfRefList[i]);<br>+<br>+        if (m_mcstffencPic)<br>+        {<br>+            m_mcstffencPic->destroy();<br>+            delete m_mcstffencPic;<br>+            m_mcstffencPic = NULL;<br>+        }<br>+<br>         delete m_mcstf;<br>         X265_FREE(m_isSubSampled);<br>     }<br>diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp<br>index 7745a7196..09f58c62a 100644<br>--- a/source/encoder/encoder.cpp<br>+++ b/source/encoder/encoder.cpp<br>@@ -171,7 +171,6 @@ Encoder::Encoder()<br>     m_startPoint = 0;<br>     m_saveCTUSize = 0;<br>     m_zoneIndex = 0;<br>-    m_origPicBuffer = 0;<br> }<br> <br> inline char *strcatFilename(const char *input, const char *suffix)<br>@@ -362,9 +361,6 @@ void Encoder::create()<br>     m_lookahead->m_numPools = pools;<br>     m_dpb = new DPB(m_param);<br> <br>-    if (m_param->bEnableTemporalFilter)<br>-        m_origPicBuffer = new OrigPicBuffer();<br>-<br>     m_rateControl = new RateControl(*m_param, this);<br>     if (!m_param->bResetZoneConfig)<br>     {<br>@@ -938,9 +934,6 @@ void Encoder::destroy()<br>         delete[] zoneWriteCount;<br>     }<br> <br>-    if (m_param->bEnableTemporalFilter)<br>-        delete m_origPicBuffer;<br>-<br>     if (m_rateControl)<br>     {<br>         m_rateControl->destroy();<br>@@ -1405,82 +1398,6 @@ bool Encoder::isFilterThisframe(uint8_t sliceTypeConfig, int curSliceType)<br>     return ((sliceTypeConfig & newSliceType) != 0);<br> }<br> <br>-inline int enqueueRefFrame(FrameEncoder* curframeEncoder, Frame* iterFrame, Frame* curFrame, bool isPreFiltered, int16_t i)<br>-{<br>-    TemporalFilterRefPicInfo* dest = &curframeEncoder->m_mcstfRefList[curFrame->m_mcstf->m_numRef];<br>-    dest->poc = iterFrame->m_poc;<br>-    dest->picBuffer = iterFrame->m_mcstffencPic;<br>-    dest->picBufferSubSampled2 = iterFrame->m_fencPicSubsampled2;<br>-    dest->picBufferSubSampled4 = iterFrame->m_fencPicSubsampled4;<br>-    dest->isFilteredFrame = isPreFiltered;<br>-    dest->isSubsampled = iterFrame->m_isSubSampled;<br>-    dest->origOffset = i;<br>-<br>-    TemporalFilterRefPicInfo* temp = &curFrame->m_mcstfRefList[curFrame->m_mcstf->m_numRef];<br>-    temp->poc = iterFrame->m_poc;<br>-    temp->picBuffer = iterFrame->m_mcstffencPic;<br>-    temp->lowres = iterFrame->m_lowres.lowresPlane[0];<br>-    temp->lowerRes = iterFrame->m_lowres.lowerResPlane[0];<br>-    temp->isFilteredFrame = isPreFiltered;<br>-    temp->origOffset = i;<br>-<br>-    curFrame->m_mcstf->m_numRef++;<br>-<br>-    return 1;<br>-}<br>-<br>-bool Encoder::generateMcstfRef(Frame* frameEnc, FrameEncoder* currEncoder)<br>-{<br>-    frameEnc->m_mcstf->m_numRef = 0;<br>-<br>-    for (int iterPOC = (frameEnc->m_poc - frameEnc->m_mcstf->m_range);<br>-        iterPOC <= (frameEnc->m_poc + frameEnc->m_mcstf->m_range); iterPOC++)<br>-    {<br>-        bool isFound = false;<br>-        if (iterPOC != frameEnc->m_poc)<br>-        {<br>-            //search for the reference frame in the Original Picture Buffer<br>-            if (!isFound)<br>-            {<br>-                for (int j = 0; j < (2 * frameEnc->m_mcstf->m_range); j++)<br>-                {<br>-                    if (iterPOC < 0)<br>-                        continue;<br>-                    if (iterPOC >= m_pocLast)<br>-                    {<br>-<br>-                        TemporalFilter* mcstf = frameEnc->m_mcstf;<br>-                        while (mcstf->m_numRef)<br>-                        {<br>-                            memset(frameEnc->m_mcstfRefList[mcstf->m_numRef].mvs0, 0, sizeof(MV) * ((mcstf->m_sourceWidth / 16) * (mcstf->m_sourceHeight / 16)));<br>-                            memset(frameEnc->m_mcstfRefList[mcstf->m_numRef].mvs1, 0, sizeof(MV) * ((mcstf->m_sourceWidth / 16) * (mcstf->m_sourceHeight / 16)));<br>-                            memset(frameEnc->m_mcstfRefList[mcstf->m_numRef].mvs2, 0, sizeof(MV) * ((mcstf->m_sourceWidth / 16) * (mcstf->m_sourceHeight / 16)));<br>-                            memset(frameEnc->m_mcstfRefList[mcstf->m_numRef].mvs, 0, sizeof(MV) * ((mcstf->m_sourceWidth / 4) * (mcstf->m_sourceHeight / 4)));<br>-                            memset(frameEnc->m_mcstfRefList[mcstf->m_numRef].noise, 0, sizeof(int) * ((mcstf->m_sourceWidth / 4) * (mcstf->m_sourceHeight / 4)));<br>-                            memset(frameEnc->m_mcstfRefList[mcstf->m_numRef].error, 0, sizeof(int) * ((mcstf->m_sourceWidth / 4) * (mcstf->m_sourceHeight / 4)));<br>-<br>-                            mcstf->m_numRef--;<br>-                        }<br>-<br>-                        break;<br>-                    }<br>-                    Frame* iterFrame = frameEnc->m_encData->m_slice->m_mcstfRefFrameList[1][j];<br>-                    if (iterFrame->m_poc == iterPOC)<br>-                    {<br>-                        if (!enqueueRefFrame(currEncoder, iterFrame, frameEnc, false, (int16_t)(iterPOC - frameEnc->m_poc)))<br>-                        {<br>-                            return false;<br>-                        };<br>-                        break;<br>-                    }<br>-                }<br>-            }<br>-        }<br>-    }<br>-<br>-    return true;<br>-}<br>-<br> /**<br>  * Feed one new input frame into the encoder, get one frame out. If pic_in is<br>  * NULL, a flush condition is implied and pic_in must be NULL for all subsequent<br>@@ -2510,18 +2427,14 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)<br>             // Generate MCSTF References and perform HME<br>             if (m_param->bEnableTemporalFilter && isFilterThisframe(frameEnc[0]->m_mcstf->m_sliceTypeConfig, frameEnc[0]->m_lowres.sliceType))<br>             {<br>-<br>-                if (!generateMcstfRef(frameEnc[0], curEncoder))<br>-                {<br>-                    m_aborted = true;<br>-                    x265_log(m_param, X265_LOG_ERROR, "Failed to initialize MCSTFReferencePicInfo at POC %d\n", frameEnc[0]->m_poc);<br>-                    fflush(stderr);<br>-                    return -1;<br>-                }<br>-<br>                 for (int i = 0; i < frameEnc[0]->m_mcstf->m_numRef; i++)<br>                 {<br>                     TemporalFilterRefPicInfo* ref = &frameEnc[0]->m_mcstfRefList[i];<br>+<br>+                    //Resetting the reference picture buffer from mcstfpiclist<br>+                    Frame* iterFrame = frameEnc[0]->m_encData->m_slice->m_mcstfRefFrameList[1][i];<br>+                    ref->picBuffer = iterFrame->m_mcstffencPic;<br>+<br>                     ref->slicetype = m_lookahead->findSliceType(frameEnc[0]->m_poc + ref->origOffset);<br>                     Frame* dpbframePtr = m_dpb->m_picList.getPOC(frameEnc[0]->m_poc + ref->origOffset, 0);<br>                     if (dpbframePtr != NULL)<br>diff --git a/source/encoder/encoder.h b/source/encoder/encoder.h<br>index f50f783d0..af216942b 100644<br>--- a/source/encoder/encoder.h<br>+++ b/source/encoder/encoder.h<br>@@ -287,7 +287,6 @@ public:<br>     FILE* m_filmGrainIn;<br>     /* Aom film grain model file*/<br>     FILE* m_aomFilmGrainIn;<br>-    OrigPicBuffer*          m_origPicBuffer;<br> <br>     Encoder();<br>     ~Encoder()<br>-- <br>2.36.0.windows.1<br><br></div>