<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Oct 29, 2013 at 1:10 AM,  <span dir="ltr"><<a href="mailto:deepthidevaki@multicorewareinc.com" target="_blank">deepthidevaki@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 Deepthi Devaki <<a href="mailto:deepthidevaki@multicorewareinc.com">deepthidevaki@multicorewareinc.com</a>><br>
# Date 1383026581 -19800<br>
# Node ID 8c38f0da2ae93bf19e780bf96be95bf201ed8f94<br>
# Parent  8846f5cf6d8d1b06496055a1bc756ed4dd3fa1c5<br>
no-rdo: add no-residue candidate in merge2Nx2N<br></blockquote><div><br></div><div>Queued, but I have some comments</div><div><br></div><div>Our commit messages need to include a lot more detail about why this change is a good idea.  Why does it help?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
diff -r 8846f5cf6d8d -r 8c38f0da2ae9 source/encoder/compress.cpp<br>
--- a/source/encoder/compress.cpp       Tue Oct 29 01:05:47 2013 -0500<br>
+++ b/source/encoder/compress.cpp       Tue Oct 29 11:33:01 2013 +0530<br>
@@ -245,6 +245,7 @@<br>
     outTempCU->setCUTransquantBypassSubParts(m_cfg->getCUTransquantBypassFlagValue(), 0, depth);<br>
     outTempCU->getInterMergeCandidates(0, 0, mvFieldNeighbours, interDirNeighbours, numValidMergeCand);<br>
<br>
+    int bestMergeCand = 0;<br>
     for (int mergeCand = 0; mergeCand < numValidMergeCand; ++mergeCand)<br>
     {<br>
         // set MC parameters, interprets depth relative to LCU level<br>
@@ -268,6 +269,7 @@<br>
<br>
         if (outTempCU->m_totalCost < outBestCU->m_totalCost)<br>
         {<br>
+            bestMergeCand = mergeCand;<br>
             TComDataCU* tmp = outTempCU;<br>
             outTempCU = outBestCU;<br>
             outBestCU = tmp;<br>
@@ -286,7 +288,44 @@<br>
     {<br>
         m_search->motionCompensation(outBestCU, bestPredYuv, REF_PIC_LIST_X, partIdx, false, true);<br>
     }<br>
-    m_search->encodeResAndCalcRdInterCU(outBestCU, m_origYuv[depth], bestPredYuv, m_tmpResiYuv[depth], m_bestResiYuv[depth], yuvReconBest, false);<br>
+<br>
+    TComDataCU* tmp;<br>
+    TComYuv *yuv;<br>
+<br>
+    outTempCU->setPredModeSubParts(MODE_INTER, 0, depth);<br>
+    outTempCU->setCUTransquantBypassSubParts(m_cfg->getCUTransquantBypassFlagValue(), 0, depth);<br>
+    outTempCU->setPartSizeSubParts(SIZE_2Nx2N, 0, depth);<br>
+    outTempCU->setMergeFlagSubParts(true, 0, 0, depth);<br>
+    outTempCU->setMergeIndexSubParts(bestMergeCand, 0, 0, depth);<br>
+    outTempCU->setInterDirSubParts(interDirNeighbours[bestMergeCand], 0, 0, depth);<br>
+    outTempCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField(mvFieldNeighbours[0 + 2 * bestMergeCand], SIZE_2Nx2N, 0, 0);<br>
+    outTempCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField(mvFieldNeighbours[1 + 2 * bestMergeCand], SIZE_2Nx2N, 0, 0);<br>
+<br>
+    //No-residue mode<br>
+    m_search->encodeResAndCalcRdInterCU(outTempCU, m_origYuv[depth], bestPredYuv, m_tmpResiYuv[depth], m_bestResiYuv[depth], m_tmpRecoYuv[depth], true);<br>
+<br>
+    tmp = outTempCU;<br>
+    outTempCU = outBestCU;<br>
+    outBestCU = tmp;<br></blockquote><div><br></div><div>This file desperately needs a swap macro/template function.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

+<br>
+    yuv = yuvReconBest;<br>
+    yuvReconBest = m_tmpRecoYuv[depth];<br>
+    m_tmpRecoYuv[depth] = yuv;<br>
+<br>
+    //Encode with residue<br></blockquote><div><br></div><div>nit: space after forward slashes</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+    m_search->encodeResAndCalcRdInterCU(outTempCU, m_origYuv[depth], bestPredYuv, m_tmpResiYuv[depth], m_bestResiYuv[depth], m_tmpRecoYuv[depth], false);<br>
+<br>
+    if (outTempCU->m_totalCost < outBestCU->m_totalCost)    //Choose best from no-residue mode and residue mode<br>
+    {<br>
+        tmp = outTempCU;<br>
+        outTempCU = outBestCU;<br>
+        outBestCU = tmp;<br>
+<br>
+        yuv = yuvReconBest;<br>
+        yuvReconBest = m_tmpRecoYuv[depth];<br>
+        m_tmpRecoYuv[depth] = yuv;<br>
+    }<br>
+<br>
     if (m_cfg->param.bEnableEarlySkip)<br>
     {<br>
         if (outBestCU->getQtRootCbf(0) == 0)<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><br clear="all"><div><br></div>-- <br>Steve Borho
</div></div>