[x265] [PATCH 5 of 5] search: misc variable renames and comment improvements
Steve Borho
steve at borho.org
Wed Feb 25 03:17:45 CET 2015
# HG changeset patch
# User Steve Borho <steve at borho.org>
# Date 1424806035 21600
# Tue Feb 24 13:27:15 2015 -0600
# Node ID e3090fcd0942a0b6a117a976233774b1a9c0c00c
# Parent ad0de20884e0188c3634c4338e2afa5489963a65
search: misc variable renames and comment improvements
diff -r ad0de20884e0 -r e3090fcd0942 source/common/cudata.cpp
--- a/source/common/cudata.cpp Tue Feb 24 13:06:39 2015 -0600
+++ b/source/common/cudata.cpp Tue Feb 24 13:27:15 2015 -0600
@@ -1375,8 +1375,8 @@
return true;
}
-/* Construct list of merging candidates */
-uint32_t CUData::getInterMergeCandidates(uint32_t absPartIdx, uint32_t puIdx, MVField(*mvFieldNeighbours)[2], uint8_t* interDirNeighbours) const
+/* Construct list of merging candidates, returns count */
+uint32_t CUData::getInterMergeCandidates(uint32_t absPartIdx, uint32_t puIdx, MVField(*candMvField)[2], uint8_t* candDir) const
{
uint32_t absPartAddr = m_absIdxInCTU + absPartIdx;
const bool isInterB = m_slice->isInterB();
@@ -1385,10 +1385,10 @@
for (uint32_t i = 0; i < maxNumMergeCand; ++i)
{
- mvFieldNeighbours[i][0].mv = 0;
- mvFieldNeighbours[i][1].mv = 0;
- mvFieldNeighbours[i][0].refIdx = REF_NOT_VALID;
- mvFieldNeighbours[i][1].refIdx = REF_NOT_VALID;
+ candMvField[i][0].mv = 0;
+ candMvField[i][1].mv = 0;
+ candMvField[i][0].refIdx = REF_NOT_VALID;
+ candMvField[i][1].refIdx = REF_NOT_VALID;
}
/* calculate the location of upper-left corner pixel and size of the current PU */
@@ -1420,11 +1420,11 @@
if (isAvailableA1)
{
// get Inter Dir
- interDirNeighbours[count] = cuLeft->m_interDir[leftPartIdx];
+ candDir[count] = cuLeft->m_interDir[leftPartIdx];
// get Mv from Left
- cuLeft->getMvField(cuLeft, leftPartIdx, 0, mvFieldNeighbours[count][0]);
+ cuLeft->getMvField(cuLeft, leftPartIdx, 0, candMvField[count][0]);
if (isInterB)
- cuLeft->getMvField(cuLeft, leftPartIdx, 1, mvFieldNeighbours[count][1]);
+ cuLeft->getMvField(cuLeft, leftPartIdx, 1, candMvField[count][1]);
count++;
@@ -1444,11 +1444,11 @@
if (isAvailableB1 && (!isAvailableA1 || !cuLeft->hasEqualMotion(leftPartIdx, *cuAbove, abovePartIdx)))
{
// get Inter Dir
- interDirNeighbours[count] = cuAbove->m_interDir[abovePartIdx];
+ candDir[count] = cuAbove->m_interDir[abovePartIdx];
// get Mv from Left
- cuAbove->getMvField(cuAbove, abovePartIdx, 0, mvFieldNeighbours[count][0]);
+ cuAbove->getMvField(cuAbove, abovePartIdx, 0, candMvField[count][0]);
if (isInterB)
- cuAbove->getMvField(cuAbove, abovePartIdx, 1, mvFieldNeighbours[count][1]);
+ cuAbove->getMvField(cuAbove, abovePartIdx, 1, candMvField[count][1]);
count++;
@@ -1465,11 +1465,11 @@
if (isAvailableB0 && (!isAvailableB1 || !cuAbove->hasEqualMotion(abovePartIdx, *cuAboveRight, aboveRightPartIdx)))
{
// get Inter Dir
- interDirNeighbours[count] = cuAboveRight->m_interDir[aboveRightPartIdx];
+ candDir[count] = cuAboveRight->m_interDir[aboveRightPartIdx];
// get Mv from Left
- cuAboveRight->getMvField(cuAboveRight, aboveRightPartIdx, 0, mvFieldNeighbours[count][0]);
+ cuAboveRight->getMvField(cuAboveRight, aboveRightPartIdx, 0, candMvField[count][0]);
if (isInterB)
- cuAboveRight->getMvField(cuAboveRight, aboveRightPartIdx, 1, mvFieldNeighbours[count][1]);
+ cuAboveRight->getMvField(cuAboveRight, aboveRightPartIdx, 1, candMvField[count][1]);
count++;
@@ -1486,11 +1486,11 @@
if (isAvailableA0 && (!isAvailableA1 || !cuLeft->hasEqualMotion(leftPartIdx, *cuLeftBottom, leftBottomPartIdx)))
{
// get Inter Dir
- interDirNeighbours[count] = cuLeftBottom->m_interDir[leftBottomPartIdx];
+ candDir[count] = cuLeftBottom->m_interDir[leftBottomPartIdx];
// get Mv from Left
- cuLeftBottom->getMvField(cuLeftBottom, leftBottomPartIdx, 0, mvFieldNeighbours[count][0]);
+ cuLeftBottom->getMvField(cuLeftBottom, leftBottomPartIdx, 0, candMvField[count][0]);
if (isInterB)
- cuLeftBottom->getMvField(cuLeftBottom, leftBottomPartIdx, 1, mvFieldNeighbours[count][1]);
+ cuLeftBottom->getMvField(cuLeftBottom, leftBottomPartIdx, 1, candMvField[count][1]);
count++;
@@ -1510,11 +1510,11 @@
&& (!isAvailableB1 || !cuAbove->hasEqualMotion(abovePartIdx, *cuAboveLeft, aboveLeftPartIdx)))
{
// get Inter Dir
- interDirNeighbours[count] = cuAboveLeft->m_interDir[aboveLeftPartIdx];
+ candDir[count] = cuAboveLeft->m_interDir[aboveLeftPartIdx];
// get Mv from Left
- cuAboveLeft->getMvField(cuAboveLeft, aboveLeftPartIdx, 0, mvFieldNeighbours[count][0]);
+ cuAboveLeft->getMvField(cuAboveLeft, aboveLeftPartIdx, 0, candMvField[count][0]);
if (isInterB)
- cuAboveLeft->getMvField(cuAboveLeft, aboveLeftPartIdx, 1, mvFieldNeighbours[count][1]);
+ cuAboveLeft->getMvField(cuAboveLeft, aboveLeftPartIdx, 1, candMvField[count][1]);
count++;
@@ -1563,8 +1563,8 @@
if (bExistMV)
{
dir |= 1;
- mvFieldNeighbours[count][0].mv = colmv;
- mvFieldNeighbours[count][0].refIdx = refIdx;
+ candMvField[count][0].mv = colmv;
+ candMvField[count][0].refIdx = refIdx;
}
if (isInterB)
@@ -1576,14 +1576,14 @@
if (bExistMV)
{
dir |= 2;
- mvFieldNeighbours[count][1].mv = colmv;
- mvFieldNeighbours[count][1].refIdx = refIdx;
+ candMvField[count][1].mv = colmv;
+ candMvField[count][1].refIdx = refIdx;
}
}
if (dir != 0)
{
- interDirNeighbours[count] = (uint8_t)dir;
+ candDir[count] = (uint8_t)dir;
count++;
@@ -1605,20 +1605,20 @@
priorityList0 >>= 2;
priorityList1 >>= 2;
- if ((interDirNeighbours[i] & 0x1) && (interDirNeighbours[j] & 0x2))
+ if ((candDir[i] & 0x1) && (candDir[j] & 0x2))
{
// get Mv from cand[i] and cand[j]
- int refIdxL0 = mvFieldNeighbours[i][0].refIdx;
- int refIdxL1 = mvFieldNeighbours[j][1].refIdx;
+ int refIdxL0 = candMvField[i][0].refIdx;
+ int refIdxL1 = candMvField[j][1].refIdx;
int refPOCL0 = m_slice->m_refPOCList[0][refIdxL0];
int refPOCL1 = m_slice->m_refPOCList[1][refIdxL1];
- if (!(refPOCL0 == refPOCL1 && mvFieldNeighbours[i][0].mv == mvFieldNeighbours[j][1].mv))
+ if (!(refPOCL0 == refPOCL1 && candMvField[i][0].mv == candMvField[j][1].mv))
{
- mvFieldNeighbours[count][0].mv = mvFieldNeighbours[i][0].mv;
- mvFieldNeighbours[count][0].refIdx = refIdxL0;
- mvFieldNeighbours[count][1].mv = mvFieldNeighbours[j][1].mv;
- mvFieldNeighbours[count][1].refIdx = refIdxL1;
- interDirNeighbours[count] = 3;
+ candMvField[count][0].mv = candMvField[i][0].mv;
+ candMvField[count][0].refIdx = refIdxL0;
+ candMvField[count][1].mv = candMvField[j][1].mv;
+ candMvField[count][1].refIdx = refIdxL1;
+ candDir[count] = 3;
count++;
@@ -1633,15 +1633,15 @@
int refcnt = 0;
while (count < maxNumMergeCand)
{
- interDirNeighbours[count] = 1;
- mvFieldNeighbours[count][0].mv = 0;
- mvFieldNeighbours[count][0].refIdx = r;
+ candDir[count] = 1;
+ candMvField[count][0].mv = 0;
+ candMvField[count][0].refIdx = r;
if (isInterB)
{
- interDirNeighbours[count] = 3;
- mvFieldNeighbours[count][1].mv.word = 0;
- mvFieldNeighbours[count][1].refIdx = r;
+ candDir[count] = 3;
+ candMvField[count][1].mv.word = 0;
+ candMvField[count][1].refIdx = r;
}
count++;
diff -r ad0de20884e0 -r e3090fcd0942 source/common/cudata.h
--- a/source/common/cudata.h Tue Feb 24 13:06:39 2015 -0600
+++ b/source/common/cudata.h Tue Feb 24 13:27:15 2015 -0600
@@ -195,7 +195,7 @@
uint8_t getCbf(uint32_t absPartIdx, TextType ttype, uint32_t tuDepth) const { return (m_cbf[ttype][absPartIdx] >> tuDepth) & 0x1; }
uint8_t getQtRootCbf(uint32_t absPartIdx) const { return m_cbf[0][absPartIdx] || m_cbf[1][absPartIdx] || m_cbf[2][absPartIdx]; }
int8_t getRefQP(uint32_t currAbsIdxInCTU) const;
- uint32_t getInterMergeCandidates(uint32_t absPartIdx, uint32_t puIdx, MVField (*mvFieldNeighbours)[2], uint8_t* interDirNeighbours) const;
+ uint32_t getInterMergeCandidates(uint32_t absPartIdx, uint32_t puIdx, MVField (*candMvField)[2], uint8_t* candDir) const;
void clipMv(MV& outMV) const;
int fillMvpCand(uint32_t puIdx, uint32_t absPartIdx, int picList, int refIdx, MV* amvpCand, MV* mvc) const;
void getIntraTUQtDepthRange(uint32_t tuDepthRange[2], uint32_t absPartIdx) const;
diff -r ad0de20884e0 -r e3090fcd0942 source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp Tue Feb 24 13:06:39 2015 -0600
+++ b/source/encoder/analysis.cpp Tue Feb 24 13:27:15 2015 -0600
@@ -1217,32 +1217,32 @@
bestPred->cu.setPredModeSubParts(MODE_INTER);
bestPred->cu.m_mergeFlag[0] = true;
- MVField mvFieldNeighbours[MRG_MAX_NUM_CANDS][2]; // double length for mv of both lists
- uint8_t interDirNeighbours[MRG_MAX_NUM_CANDS];
- uint32_t maxNumMergeCand = tempPred->cu.getInterMergeCandidates(0, 0, mvFieldNeighbours, interDirNeighbours);
+ MVField candMvField[MRG_MAX_NUM_CANDS][2]; // double length for mv of both lists
+ uint8_t candDir[MRG_MAX_NUM_CANDS];
+ uint32_t numMergeCand = tempPred->cu.getInterMergeCandidates(0, 0, candMvField, candDir);
PredictionUnit pu(merge.cu, cuGeom, 0);
bestPred->sa8dCost = MAX_INT64;
int bestSadCand = -1;
int sizeIdx = cuGeom.log2CUSize - 2;
- for (uint32_t i = 0; i < maxNumMergeCand; ++i)
+ for (uint32_t i = 0; i < numMergeCand; ++i)
{
if (m_bFrameParallel &&
- (mvFieldNeighbours[i][0].mv.y >= (m_param->searchRange + 1) * 4 ||
- mvFieldNeighbours[i][1].mv.y >= (m_param->searchRange + 1) * 4))
+ (candMvField[i][0].mv.y >= (m_param->searchRange + 1) * 4 ||
+ candMvField[i][1].mv.y >= (m_param->searchRange + 1) * 4))
continue;
tempPred->cu.m_mvpIdx[0][0] = (uint8_t)i; // merge candidate ID is stored in L0 MVP idx
- tempPred->cu.m_interDir[0] = interDirNeighbours[i];
- tempPred->cu.m_mv[0][0] = mvFieldNeighbours[i][0].mv;
- tempPred->cu.m_refIdx[0][0] = (int8_t)mvFieldNeighbours[i][0].refIdx;
- tempPred->cu.m_mv[1][0] = mvFieldNeighbours[i][1].mv;
- tempPred->cu.m_refIdx[1][0] = (int8_t)mvFieldNeighbours[i][1].refIdx;
+ tempPred->cu.m_interDir[0] = candDir[i];
+ tempPred->cu.m_mv[0][0] = candMvField[i][0].mv;
+ tempPred->cu.m_mv[1][0] = candMvField[i][1].mv;
+ tempPred->cu.m_refIdx[0][0] = (int8_t)candMvField[i][0].refIdx;
+ tempPred->cu.m_refIdx[1][0] = (int8_t)candMvField[i][1].refIdx;
motionCompensation(tempPred->cu, pu, tempPred->predYuv, true, m_bChromaSa8d);
- tempPred->sa8dBits = getTUBits(i, maxNumMergeCand);
+ tempPred->sa8dBits = getTUBits(i, numMergeCand);
tempPred->distortion = primitives.cu[sizeIdx].sa8d(fencYuv->m_buf[0], fencYuv->m_size, tempPred->predYuv.m_buf[0], tempPred->predYuv.m_size);
if (m_bChromaSa8d)
{
@@ -1275,11 +1275,11 @@
/* Encode with residual */
tempPred->cu.m_mvpIdx[0][0] = (uint8_t)bestSadCand;
- tempPred->cu.setPUInterDir(interDirNeighbours[bestSadCand], 0, 0);
- tempPred->cu.setPUMv(0, mvFieldNeighbours[bestSadCand][0].mv, 0, 0);
- tempPred->cu.setPURefIdx(0, (int8_t)mvFieldNeighbours[bestSadCand][0].refIdx, 0, 0);
- tempPred->cu.setPUMv(1, mvFieldNeighbours[bestSadCand][1].mv, 0, 0);
- tempPred->cu.setPURefIdx(1, (int8_t)mvFieldNeighbours[bestSadCand][1].refIdx, 0, 0);
+ tempPred->cu.setPUInterDir(candDir[bestSadCand], 0, 0);
+ tempPred->cu.setPUMv(0, candMvField[bestSadCand][0].mv, 0, 0);
+ tempPred->cu.setPUMv(1, candMvField[bestSadCand][1].mv, 0, 0);
+ tempPred->cu.setPURefIdx(0, (int8_t)candMvField[bestSadCand][0].refIdx, 0, 0);
+ tempPred->cu.setPURefIdx(1, (int8_t)candMvField[bestSadCand][1].refIdx, 0, 0);
tempPred->sa8dCost = bestPred->sa8dCost;
tempPred->predYuv.copyFromYuv(bestPred->predYuv);
@@ -1291,11 +1291,11 @@
md.bestMode = bestPred;
/* broadcast sets of MV field data */
- bestPred->cu.setPUInterDir(interDirNeighbours[bestSadCand], 0, 0);
- bestPred->cu.setPUMv(0, mvFieldNeighbours[bestSadCand][0].mv, 0, 0);
- bestPred->cu.setPURefIdx(0, (int8_t)mvFieldNeighbours[bestSadCand][0].refIdx, 0, 0);
- bestPred->cu.setPUMv(1, mvFieldNeighbours[bestSadCand][1].mv, 0, 0);
- bestPred->cu.setPURefIdx(1, (int8_t)mvFieldNeighbours[bestSadCand][1].refIdx, 0, 0);
+ bestPred->cu.setPUInterDir(candDir[bestSadCand], 0, 0);
+ bestPred->cu.setPUMv(0, candMvField[bestSadCand][0].mv, 0, 0);
+ bestPred->cu.setPUMv(1, candMvField[bestSadCand][1].mv, 0, 0);
+ bestPred->cu.setPURefIdx(0, (int8_t)candMvField[bestSadCand][0].refIdx, 0, 0);
+ bestPred->cu.setPURefIdx(1, (int8_t)candMvField[bestSadCand][1].refIdx, 0, 0);
}
/* sets md.bestMode if a valid merge candidate is found, else leaves it NULL */
@@ -1316,52 +1316,47 @@
skip.cu.setPartSizeSubParts(SIZE_2Nx2N);
skip.cu.m_mergeFlag[0] = true;
- MVField mvFieldNeighbours[MRG_MAX_NUM_CANDS][2]; // double length for mv of both lists
- uint8_t interDirNeighbours[MRG_MAX_NUM_CANDS];
- uint32_t maxNumMergeCand = merge.cu.getInterMergeCandidates(0, 0, mvFieldNeighbours, interDirNeighbours);
+ MVField candMvField[MRG_MAX_NUM_CANDS][2]; // double length for mv of both lists
+ uint8_t candDir[MRG_MAX_NUM_CANDS];
+ uint32_t numMergeCand = merge.cu.getInterMergeCandidates(0, 0, candMvField, candDir);
PredictionUnit pu(merge.cu, cuGeom, 0);
bool foundCbf0Merge = false;
bool triedPZero = false, triedBZero = false;
bestPred->rdCost = MAX_INT64;
- if (m_param->analysisMode == X265_ANALYSIS_LOAD && isSkipMode)
+ if (isSkipMode)
{
uint32_t i = *m_reuseBestMergeCand;
- tempPred->cu.m_mvpIdx[0][0] = (uint8_t)i; /* merge candidate ID is stored in L0 MVP idx */
- tempPred->cu.m_interDir[0] = interDirNeighbours[i];
- tempPred->cu.m_mv[0][0] = mvFieldNeighbours[i][0].mv;
- tempPred->cu.m_refIdx[0][0] = (int8_t)mvFieldNeighbours[i][0].refIdx;
- tempPred->cu.m_mv[1][0] = mvFieldNeighbours[i][1].mv;
- tempPred->cu.m_refIdx[1][0] = (int8_t)mvFieldNeighbours[i][1].refIdx;
- tempPred->cu.setPredModeSubParts(MODE_INTER); /* must be cleared between encode iterations */
+ bestPred->cu.m_mvpIdx[0][0] = (uint8_t)i;
+ bestPred->cu.m_interDir[0] = candDir[i];
+ bestPred->cu.m_mv[0][0] = candMvField[i][0].mv;
+ bestPred->cu.m_mv[1][0] = candMvField[i][1].mv;
+ bestPred->cu.m_refIdx[0][0] = (int8_t)candMvField[i][0].refIdx;
+ bestPred->cu.m_refIdx[1][0] = (int8_t)candMvField[i][1].refIdx;
- motionCompensation(tempPred->cu, pu, tempPred->predYuv, true, true);
-
- encodeResAndCalcRdSkipCU(*tempPred);
-
- if (tempPred->rdCost < bestPred->rdCost)
- std::swap(tempPred, bestPred);
+ motionCompensation(bestPred->cu, pu, bestPred->predYuv, true, true);
+ encodeResAndCalcRdSkipCU(*bestPred);
}
else
{
- for (uint32_t i = 0; i < maxNumMergeCand; i++)
+ for (uint32_t i = 0; i < numMergeCand; i++)
{
if (m_bFrameParallel &&
- (mvFieldNeighbours[i][0].mv.y >= (m_param->searchRange + 1) * 4 ||
- mvFieldNeighbours[i][1].mv.y >= (m_param->searchRange + 1) * 4))
+ (candMvField[i][0].mv.y >= (m_param->searchRange + 1) * 4 ||
+ candMvField[i][1].mv.y >= (m_param->searchRange + 1) * 4))
continue;
/* the merge candidate list is packed with MV(0,0) ref 0 when it is not full */
- if (interDirNeighbours[i] == 1 && !mvFieldNeighbours[i][0].mv.word && !mvFieldNeighbours[i][0].refIdx)
+ if (candDir[i] == 1 && !candMvField[i][0].mv.word && !candMvField[i][0].refIdx)
{
if (triedPZero)
continue;
triedPZero = true;
}
- else if (interDirNeighbours[i] == 3 &&
- !mvFieldNeighbours[i][0].mv.word && !mvFieldNeighbours[i][0].refIdx &&
- !mvFieldNeighbours[i][1].mv.word && !mvFieldNeighbours[i][1].refIdx)
+ else if (candDir[i] == 3 &&
+ !candMvField[i][0].mv.word && !candMvField[i][0].refIdx &&
+ !candMvField[i][1].mv.word && !candMvField[i][1].refIdx)
{
if (triedBZero)
continue;
@@ -1369,11 +1364,11 @@
}
tempPred->cu.m_mvpIdx[0][0] = (uint8_t)i; /* merge candidate ID is stored in L0 MVP idx */
- tempPred->cu.m_interDir[0] = interDirNeighbours[i];
- tempPred->cu.m_mv[0][0] = mvFieldNeighbours[i][0].mv;
- tempPred->cu.m_refIdx[0][0] = (int8_t)mvFieldNeighbours[i][0].refIdx;
- tempPred->cu.m_mv[1][0] = mvFieldNeighbours[i][1].mv;
- tempPred->cu.m_refIdx[1][0] = (int8_t)mvFieldNeighbours[i][1].refIdx;
+ tempPred->cu.m_interDir[0] = candDir[i];
+ tempPred->cu.m_mv[0][0] = candMvField[i][0].mv;
+ tempPred->cu.m_mv[1][0] = candMvField[i][1].mv;
+ tempPred->cu.m_refIdx[0][0] = (int8_t)candMvField[i][0].refIdx;
+ tempPred->cu.m_refIdx[1][0] = (int8_t)candMvField[i][1].refIdx;
tempPred->cu.setPredModeSubParts(MODE_INTER); /* must be cleared between encode iterations */
motionCompensation(tempPred->cu, pu, tempPred->predYuv, true, true);
@@ -1401,11 +1396,11 @@
if (swapped)
{
tempPred->cu.m_mvpIdx[0][0] = (uint8_t)i;
- tempPred->cu.m_interDir[0] = interDirNeighbours[i];
- tempPred->cu.m_mv[0][0] = mvFieldNeighbours[i][0].mv;
- tempPred->cu.m_refIdx[0][0] = (int8_t)mvFieldNeighbours[i][0].refIdx;
- tempPred->cu.m_mv[1][0] = mvFieldNeighbours[i][1].mv;
- tempPred->cu.m_refIdx[1][0] = (int8_t)mvFieldNeighbours[i][1].refIdx;
+ tempPred->cu.m_interDir[0] = candDir[i];
+ tempPred->cu.m_mv[0][0] = candMvField[i][0].mv;
+ tempPred->cu.m_mv[1][0] = candMvField[i][1].mv;
+ tempPred->cu.m_refIdx[0][0] = (int8_t)candMvField[i][0].refIdx;
+ tempPred->cu.m_refIdx[1][0] = (int8_t)candMvField[i][1].refIdx;
tempPred->cu.setPredModeSubParts(MODE_INTER);
tempPred->predYuv.copyFromYuv(bestPred->predYuv);
}
@@ -1424,11 +1419,11 @@
/* broadcast sets of MV field data */
uint32_t bestCand = bestPred->cu.m_mvpIdx[0][0];
- bestPred->cu.setPUInterDir(interDirNeighbours[bestCand], 0, 0);
- bestPred->cu.setPUMv(0, mvFieldNeighbours[bestCand][0].mv, 0, 0);
- bestPred->cu.setPURefIdx(0, (int8_t)mvFieldNeighbours[bestCand][0].refIdx, 0, 0);
- bestPred->cu.setPUMv(1, mvFieldNeighbours[bestCand][1].mv, 0, 0);
- bestPred->cu.setPURefIdx(1, (int8_t)mvFieldNeighbours[bestCand][1].refIdx, 0, 0);
+ bestPred->cu.setPUInterDir(candDir[bestCand], 0, 0);
+ bestPred->cu.setPUMv(0, candMvField[bestCand][0].mv, 0, 0);
+ bestPred->cu.setPUMv(1, candMvField[bestCand][1].mv, 0, 0);
+ bestPred->cu.setPURefIdx(0, (int8_t)candMvField[bestCand][0].refIdx, 0, 0);
+ bestPred->cu.setPURefIdx(1, (int8_t)candMvField[bestCand][1].refIdx, 0, 0);
}
if (m_param->analysisMode)
diff -r ad0de20884e0 -r e3090fcd0942 source/encoder/search.cpp
--- a/source/encoder/search.cpp Tue Feb 24 13:06:39 2015 -0600
+++ b/source/encoder/search.cpp Tue Feb 24 13:27:15 2015 -0600
@@ -1813,12 +1813,12 @@
MVField candMvField[MRG_MAX_NUM_CANDS][2];
uint8_t candDir[MRG_MAX_NUM_CANDS];
- uint32_t maxNumMergeCand = cu.getInterMergeCandidates(pu.puAbsPartIdx, puIdx, candMvField, candDir);
+ uint32_t numMergeCand = cu.getInterMergeCandidates(pu.puAbsPartIdx, puIdx, candMvField, candDir);
if (cu.isBipredRestriction())
{
/* do not allow bidir merge candidates if PU is smaller than 8x8, drop L1 reference */
- for (uint32_t mergeCand = 0; mergeCand < maxNumMergeCand; ++mergeCand)
+ for (uint32_t mergeCand = 0; mergeCand < numMergeCand; ++mergeCand)
{
if (candDir[mergeCand] == 3)
{
@@ -1831,7 +1831,7 @@
Yuv& tempYuv = m_rqt[cuGeom.depth].tmpPredYuv;
uint32_t outCost = MAX_UINT;
- for (uint32_t mergeCand = 0; mergeCand < maxNumMergeCand; ++mergeCand)
+ for (uint32_t mergeCand = 0; mergeCand < numMergeCand; ++mergeCand)
{
/* Prevent TMVP candidates from using unavailable reference pixels */
if (m_bFrameParallel &&
@@ -1850,7 +1850,7 @@
if (m_me.bChromaSATD)
costCand += m_me.bufChromaSATD(tempYuv, pu.puAbsPartIdx);
- uint32_t bitsCand = getTUBits(mergeCand, maxNumMergeCand);
+ uint32_t bitsCand = getTUBits(mergeCand, numMergeCand);
costCand = costCand + m_rdCost.getCost(bitsCand);
if (costCand < outCost)
{
@@ -1862,7 +1862,7 @@
m.mvField[0] = candMvField[m.index][0];
m.mvField[1] = candMvField[m.index][1];
- m.interDir = candDir[m.index];
+ m.dir = candDir[m.index];
return outCost;
}
@@ -2026,7 +2026,7 @@
{
cu.m_mergeFlag[pu.puAbsPartIdx] = true;
cu.m_mvpIdx[0][pu.puAbsPartIdx] = merge.index; // merge candidate ID is stored in L0 MVP idx
- cu.setPUInterDir(merge.interDir, pu.puAbsPartIdx, puIdx);
+ cu.setPUInterDir(merge.dir, pu.puAbsPartIdx, puIdx);
cu.setPUMv(0, merge.mvField[0].mv, pu.puAbsPartIdx, puIdx);
cu.setPURefIdx(0, merge.mvField[0].refIdx, pu.puAbsPartIdx, puIdx);
cu.setPUMv(1, merge.mvField[1].mv, pu.puAbsPartIdx, puIdx);
@@ -2307,7 +2307,7 @@
{
cu.m_mergeFlag[pu.puAbsPartIdx] = true;
cu.m_mvpIdx[0][pu.puAbsPartIdx] = merge.index; /* merge candidate ID is stored in L0 MVP idx */
- cu.setPUInterDir(merge.interDir, pu.puAbsPartIdx, puIdx);
+ cu.setPUInterDir(merge.dir, pu.puAbsPartIdx, puIdx);
cu.setPUMv(0, merge.mvField[0].mv, pu.puAbsPartIdx, puIdx);
cu.setPURefIdx(0, merge.mvField[0].refIdx, pu.puAbsPartIdx, puIdx);
cu.setPUMv(1, merge.mvField[1].mv, pu.puAbsPartIdx, puIdx);
diff -r ad0de20884e0 -r e3090fcd0942 source/encoder/search.h
--- a/source/encoder/search.h Tue Feb 24 13:06:39 2015 -0600
+++ b/source/encoder/search.h Tue Feb 24 13:27:15 2015 -0600
@@ -348,11 +348,11 @@
// reshuffle CBF flags after coding a pair of 4:2:2 chroma blocks
void offsetSubTUCBFs(CUData& cu, TextType ttype, uint32_t tuDepth, uint32_t absPartIdx);
+ /* output of mergeEstimation, best merge candidate */
struct MergeData
{
- /* outputs */
MVField mvField[2];
- uint32_t interDir;
+ uint32_t dir;
uint32_t index;
uint32_t bits;
};
More information about the x265-devel
mailing list