[x265] [PATCH] Fix output change in analysis load
pooja at multicorewareinc.com
pooja at multicorewareinc.com
Thu Oct 24 12:47:14 CEST 2019
# HG changeset patch
# User Pooja Venkatesan <pooja at multicorewareinc.com>
# Date 1571755477 -19800
# Tue Oct 22 20:14:37 2019 +0530
# Branch Release_3.2
# Node ID 7fa570ead8d361bf6055cd2a881a8e15f12110ae
# Parent a3a088a7262fcc02560bc8b71d0a3cf5b9c69fe3
Fix output change in analysis load
diff -r a3a088a7262f -r 7fa570ead8d3 source/encoder/search.cpp
--- a/source/encoder/search.cpp Mon Oct 14 14:33:16 2019 +0530
+++ b/source/encoder/search.cpp Tue Oct 22 20:14:37 2019 +0530
@@ -2156,14 +2156,17 @@
{
CUData& cu = interMode.cu;
MV mv, mvmin, mvmax;
- cu.clipMv(mv);
int cand = 0, bestcost = INT_MAX;
- do
+ while (cand < m_param->mvRefine)
{
- if (cand && (mvp[cand] == mvp[cand - 1] || (cand == 2 && mvp[cand] == mvp[cand - 2])))
+ if ((cand && mvp[cand] == mvp[cand - 1]) || (cand == 2 && (mvp[cand] == mvp[cand - 2] || mvp[cand] == mvp[cand - 1])))
+ {
+ cand++;
continue;
+ }
MV bestMV;
- mv = mvp[cand];
+ mv = mvp[cand++];
+ cu.clipMv(mv);
setSearchRange(cu, mv, m_param->searchRange, mvmin, mvmax);
int cost = m_me.motionEstimate(&m_slice->m_mref[list][ref], mvmin, mvmax, mv, numMvc, mvc, m_param->searchRange, bestMV, m_param->maxSlices,
m_param->bSourceReferenceEstimation ? m_slice->m_refFrameList[list][ref]->m_fencPic->getLumaAddr(0) : 0);
@@ -2172,7 +2175,7 @@
bestcost = cost;
outmv = bestMV;
}
- }while (++cand < m_param->mvRefine);
+ }
}
/* find the best inter prediction for each PU of specified mode */
void Search::predInterSearch(Mode& interMode, const CUGeom& cuGeom, bool bChromaMC, uint32_t refMasks[2])
@@ -2246,7 +2249,13 @@
const MV* amvp = interMode.amvpCand[list][ref];
int mvpIdx = selectMVP(cu, pu, amvp, list, ref);
MV mvmin, mvmax, outmv, mvp;
- mvp = amvp[mvpIdx];
+ if (useAsMVP)
+ {
+ mvp = interDataCTU->mv[list][cuIdx + puIdx].word;
+ mvpIdx = interDataCTU->mvpIdx[list][cuIdx + puIdx];
+ }
+ else
+ mvp = amvp[mvpIdx];
if (m_param->searchMethod == X265_SEA)
{
int puX = puIdx & 1;
@@ -2259,28 +2268,26 @@
int satdCost;
if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead && mvpIdx == bestME[list].mvpIdx)
mvpIn = bestME[list].mv;
- if (useAsMVP)
+ if (useAsMVP && m_param->mvRefine > 1)
{
MV bestmv, mvpSel[3];
int mvpIdxSel[3];
satdCost = m_me.COST_MAX;
- mvpSel[0] = interDataCTU->mv[list][cuIdx + puIdx].word;
- mvpIdxSel[0] = interDataCTU->mvpIdx[list][cuIdx + puIdx];
- if (m_param->mvRefine > 1)
+ mvpSel[0] = mvp;
+ mvpIdxSel[0] = mvpIdx;
+ mvpIdx = selectMVP(cu, pu, amvp, list, ref);
+ mvpSel[1] = interMode.amvpCand[list][ref][mvpIdx];
+ mvpIdxSel[1] = mvpIdx;
+ if (m_param->mvRefine > 2)
{
- mvpSel[1] = interMode.amvpCand[list][ref][mvpIdx];
- mvpIdxSel[1] = mvpIdx;
- if (m_param->mvRefine > 2)
- {
- mvpSel[2] = interMode.amvpCand[list][ref][!mvpIdx];
- mvpIdxSel[2] = !mvpIdx;
- }
+ mvpSel[2] = interMode.amvpCand[list][ref][!mvpIdx];
+ mvpIdxSel[2] = !mvpIdx;
}
for (int cand = 0; cand < m_param->mvRefine; cand++)
{
if (cand && (mvpSel[cand] == mvpSel[cand - 1] || (cand == 2 && mvpSel[cand] == mvpSel[cand - 2])))
continue;
- setSearchRange(cu, mvp, m_param->searchRange, mvmin, mvmax);
+ setSearchRange(cu, mvpSel[cand], m_param->searchRange, mvmin, mvmax);
int bcost = m_me.motionEstimate(&m_slice->m_mref[list][ref], mvmin, mvmax, mvpSel[cand], numMvc, mvc, m_param->searchRange, bestmv, m_param->maxSlices,
m_param->bSourceReferenceEstimation ? m_slice->m_refFrameList[list][ref]->m_fencPic->getLumaAddr(0) : 0);
if (satdCost > bcost)
@@ -2291,6 +2298,7 @@
mvpIdx = mvpIdxSel[cand];
}
}
+ mvpIn = mvp;
}
else
{
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265.patch
Type: text/x-patch
Size: 4873 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20191024/2ad7e0e7/attachment.bin>
More information about the x265-devel
mailing list