<div dir="ltr">MVs are no longer shared or reused, but are instead re-computed?<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 17, 2014 at 3:36 PM,  <span dir="ltr"><<a href="mailto:gopu@multicorewareinc.com" target="_blank">gopu@multicorewareinc.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Gopu Govindaswamy <<a href="mailto:gopu@multicorewareinc.com">gopu@multicorewareinc.com</a>><br>
# Date 1416218723 -19800<br>
#      Mon Nov 17 15:35:23 2014 +0530<br>
# Node ID 23bba9b2de1c930976a9018c5127b566ba31c44a<br>
# Parent  27d36c4b4a27d2872430c6a6fc538fbddcf791e6<br>
search: fix binary mismatch and inconsistent crash for share inter information<br>
<br>
diff -r 27d36c4b4a27 -r 23bba9b2de1c source/common/common.h<br>
--- a/source/common/common.h    Mon Nov 17 01:30:26 2014 +0530<br>
+++ b/source/common/common.h    Mon Nov 17 15:35:23 2014 +0530<br>
@@ -350,9 +350,6 @@<br>
 struct analysis_inter_data<br>
 {<br>
     int      ref;<br>
-    int      costZero;<br>
-    int16_t  mvx;<br>
-    int16_t  mvy;<br>
 };<br>
<br>
 /* Stores intra analysis data for a single frame. This struct needs better packing */<br>
diff -r 27d36c4b4a27 -r 23bba9b2de1c source/encoder/analysis.cpp<br>
--- a/source/encoder/analysis.cpp       Mon Nov 17 01:30:26 2014 +0530<br>
+++ b/source/encoder/analysis.cpp       Mon Nov 17 15:35:23 2014 +0530<br>
@@ -1454,10 +1454,7 @@<br>
             MotionData* bestME = interMode.bestME[part];<br>
             for (int32_t i = 0; i < numPredDir; i++)<br>
             {<br>
-                bestME[i].mv.x = m_reuseInterDataCTU->mvx;<br>
-                bestME[i].mv.y = m_reuseInterDataCTU->mvy;<br>
                 bestME[i].ref = m_reuseInterDataCTU->ref;<br>
-                bestME[i].costZero = !!m_reuseInterDataCTU->costZero;<br>
                 m_reuseInterDataCTU++;<br>
             }<br>
         }<br>
@@ -1477,10 +1474,7 @@<br>
                 MotionData* bestME = interMode.bestME[part];<br>
                 for (int32_t i = 0; i < numPredDir; i++)<br>
                 {<br>
-                    m_reuseInterDataCTU->mvx = bestME[i].mv.x;<br>
-                    m_reuseInterDataCTU->mvy = bestME[i].mv.y;<br>
                     m_reuseInterDataCTU->ref = bestME[i].ref;<br>
-                    m_reuseInterDataCTU->costZero = bestME[i].costZero;<br>
                     m_reuseInterDataCTU++;<br>
                 }<br>
             }<br>
@@ -1507,10 +1501,7 @@<br>
             MotionData* bestME = interMode.bestME[part];<br>
             for (int32_t i = 0; i < numPredDir; i++)<br>
             {<br>
-                bestME[i].mv.x = m_reuseInterDataCTU->mvx;<br>
-                bestME[i].mv.y = m_reuseInterDataCTU->mvy;<br>
                 bestME[i].ref = m_reuseInterDataCTU->ref;<br>
-                bestME[i].costZero = !!m_reuseInterDataCTU->costZero;<br>
                 m_reuseInterDataCTU++;<br>
             }<br>
         }<br>
@@ -1526,10 +1517,7 @@<br>
                 MotionData* bestME = interMode.bestME[part];<br>
                 for (int32_t i = 0; i < numPredDir; i++)<br>
                 {<br>
-                    m_reuseInterDataCTU->mvx = bestME[i].mv.x;<br>
-                    m_reuseInterDataCTU->mvy = bestME[i].mv.y;<br>
                     m_reuseInterDataCTU->ref = bestME[i].ref;<br>
-                    m_reuseInterDataCTU->costZero = bestME[i].costZero;<br>
                     m_reuseInterDataCTU++;<br>
                 }<br>
             }<br>
diff -r 27d36c4b4a27 -r 23bba9b2de1c source/encoder/search.cpp<br>
--- a/source/encoder/search.cpp Mon Nov 17 01:30:26 2014 +0530<br>
+++ b/source/encoder/search.cpp Mon Nov 17 15:35:23 2014 +0530<br>
@@ -2001,7 +2001,7 @@<br>
                 uint32_t bits = m_listSelBits[l] + MVP_IDX_BITS;<br>
                 bits += getTUBits(ref, numRefIdx[l]);<br>
<br>
-                cu.fillMvpCand(puIdx, m_puAbsPartIdx, l, ref, interMode.amvpCand[l][ref], mvc);<br>
+                int numMvc = cu.fillMvpCand(puIdx, m_puAbsPartIdx, l, ref, interMode.amvpCand[l][ref], mvc);<br>
<br>
                 // Pick the best possible MVP from AMVP candidates based on least residual<br>
                 uint32_t bestCost = MAX_INT;<br>
@@ -2028,18 +2028,14 @@<br>
                 }<br>
<br>
                 MV mvmin, mvmax, outmv, mvp = interMode.amvpCand[l][ref][mvpIdx];<br>
-                m_me.setMVP(mvp);<br>
-                MV bmv(bestME[l].mv.x, bestME[l].mv.y);<br>
<br>
                 int satdCost;<br>
-                if (bestME[l].costZero)<br>
-                    satdCost = m_me.mvcost(bmv);<br>
-                else<br>
-                    satdCost = bestME[l].cost;<br>
+                setSearchRange(cu, mvp, merange, mvmin, mvmax);<br>
+                satdCost = m_me.motionEstimate(&slice->m_mref[l][ref], mvmin, mvmax, mvp, numMvc, mvc, merange, outmv);<br>
<br>
                 /* Get total cost of partition, but only include MV bit cost once */<br>
-                bits += m_me.bitcost(bmv);<br>
-                uint32_t cost = (satdCost - m_me.mvcost(bmv)) + m_rdCost.getCost(bits);<br>
+                bits += m_me.bitcost(outmv);<br>
+                uint32_t cost = (satdCost - m_me.mvcost(outmv)) + m_rdCost.getCost(bits);<br>
<br>
                 /* Refine MVP selection, updates: mvp, mvpIdx, bits, cost */<br>
                 checkBestMVP(interMode.amvpCand[l][ref], outmv, mvp, mvpIdx, bits, cost);<br>
@@ -2049,7 +2045,6 @@<br>
                     bestME[l].mv = outmv;<br>
                     bestME[l].mvp = mvp;<br>
                     bestME[l].mvpIdx = mvpIdx;<br>
-                    bestME[l].ref = ref;<br>
                     bestME[l].cost = cost;<br>
                     bestME[l].bits = bits;<br>
                 }<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br></div>