[x265] [PATCH] Select the best among the tradition MVP and the Scaled MV as MVP

pooja at multicorewareinc.com pooja at multicorewareinc.com
Thu May 30 11:11:53 CEST 2019


# HG changeset patch
# User Pooja Venkatesan <pooja at multicorewareinc.com>
# Date 1559024172 -19800
#      Tue May 28 11:46:12 2019 +0530
# Node ID 4d5ea449955a12f4704f7eef8ee9da30d674819b
# Parent  a46ded2c14116af1cafacdc1fb98be43259dc7d6
Select the best among the tradition MVP and the Scaled MV as MVP
from analysis-save encode in load mode for refine-inter levels.

diff -r a46ded2c1411 -r 4d5ea449955a source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp	Tue May 28 14:01:54 2019 +0800
+++ b/source/encoder/analysis.cpp	Tue May 28 11:46:12 2019 +0530
@@ -2488,10 +2488,14 @@
                             MV mvp;
 
                             int numMvc = mode.cu.getPMV(mode.interNeighbours, list, ref, mode.amvpCand[list][ref], mvc);
-                            if (m_param->interRefine != 1)
-                                mvp = mode.amvpCand[list][ref][mode.cu.m_mvpIdx[list][pu.puAbsPartIdx]];
-                            else
-                                mvp = interDataCTU->mv[list][cuIdx + part].word;
+                            mvp = mode.amvpCand[list][ref][mode.cu.m_mvpIdx[list][pu.puAbsPartIdx]];
+                            if(m_param->interRefine == 1)
+                            {
+                                mode.amvpCand[list][ref][!(mode.cu.m_mvpIdx[list][pu.puAbsPartIdx])] = interDataCTU->mv[list][cuIdx + part].word;
+                                int mvpIdx = selectMVP(mode.cu, pu, mode.amvpCand[list][ref], list, ref);
+                                if (mvpIdx != mode.cu.m_mvpIdx[list][pu.puAbsPartIdx])
+                                    mvp = interDataCTU->mv[list][cuIdx + part].word;
+                            }
                             if (m_param->mvRefine || m_param->interRefine == 1)
                             {
                                 MV outmv;
diff -r a46ded2c1411 -r 4d5ea449955a source/encoder/search.cpp
--- a/source/encoder/search.cpp	Tue May 28 14:01:54 2019 +0800
+++ b/source/encoder/search.cpp	Tue May 28 11:46:12 2019 +0530
@@ -2196,7 +2196,7 @@
         bestME[1].cost = MAX_UINT;
 
         getBlkBits((PartSize)cu.m_partSize[0], slice->isInterP(), puIdx, lastMode, m_listSelBits);
-        bool bDoUnidir = true;
+        bool bDoUnidir = true, bDoPme = m_param->bDistributeMotionEstimation;
 
         cu.getNeighbourMV(puIdx, pu.puAbsPartIdx, interMode.interNeighbours);
         /* Uni-directional prediction */
@@ -2225,8 +2225,18 @@
                 MV mvmin, mvmax, outmv, mvp;
                 if (useAsMVP)
                 {
-                    mvp = interDataCTU->mv[list][cuIdx + puIdx].word;
-                    mvpIdx = interDataCTU->mvpIdx[list][cuIdx + puIdx];
+                    interMode.amvpCand[list][ref][!mvpIdx] = interDataCTU->mv[list][cuIdx + puIdx].word;
+                    int mvpIdx0 = selectMVP(interMode.cu, pu, interMode.amvpCand[list][ref], list, ref);
+                    if (mvpIdx != mvpIdx0)
+                    {
+                        mvp = interDataCTU->mv[list][cuIdx + puIdx].word;
+                        mvpIdx = interDataCTU->mvpIdx[list][cuIdx + puIdx];
+                    }
+                    else
+                    {
+                        useAsMVP = false;
+                        break;
+                    }
                 }
                 else
                     mvp = amvp[mvpIdx];
@@ -2277,10 +2287,10 @@
                     bestME[list].mvCost  = mvCost;
                     bestME[list].ref = ref;
                 }
-                bDoUnidir = false;
-            }            
+                bDoUnidir = bDoPme = false;
+            }
         }
-        else if (m_param->bDistributeMotionEstimation)
+        if (bDoPme)
         {
             PME pme(*this, interMode, cuGeom, pu, puIdx);
             pme.m_jobTotal = 0;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265.patch
Type: text/x-patch
Size: 3820 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20190530/6e4c4e4f/attachment-0001.bin>


More information about the x265-devel mailing list