[x265] inline simple functions
Satoshi Nakagawa
nakagawa424 at oki.com
Fri Sep 19 03:16:59 CEST 2014
# HG changeset patch
# User Satoshi Nakagawa <nakagawa424 at oki.com>
# Date 1411087626 -32400
# Fri Sep 19 09:47:06 2014 +0900
# Node ID bc71daca1b43fd8aee5ffb770629a086966d4674
# Parent 25dde1ffab66bf29fa2a16945b6e3dff9e2954ec
inline simple functions
diff -r 25dde1ffab66 -r bc71daca1b43 source/Lib/TLibCommon/TComDataCU.cpp
--- a/source/Lib/TLibCommon/TComDataCU.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/Lib/TLibCommon/TComDataCU.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -88,9 +88,6 @@
m_DataCUMemPool.m_tqBypassYuvMemBlock = NULL;
}
-TComDataCU::~TComDataCU()
-{}
-
bool TComDataCU::initialize(uint32_t numPartition, uint32_t sizeL, uint32_t sizeC, uint32_t numBlocks, bool isLossless)
{
@@ -1086,15 +1083,6 @@
}
}
-/** Check whether the CU is coded in lossless coding mode
- * \param absPartIdx
- * \returns true if the CU is coded in lossless coding mode; false if otherwise
- */
-bool TComDataCU::isLosslessCoded(uint32_t absPartIdx)
-{
- return m_slice->m_pps->bTransquantBypassEnabled && getCUTransquantBypass(absPartIdx);
-}
-
/** Get allowed chroma intra modes
*\param absPartIdx
*\param uiModeList pointer to chroma intra modes array
@@ -1224,11 +1212,6 @@
return ctx;
}
-uint32_t TComDataCU::getCtxInterDir(uint32_t absPartIdx)
-{
- return getDepth(absPartIdx);
-}
-
void TComDataCU::clearCbf(uint32_t absPartIdx, uint32_t depth)
{
uint32_t curPartNum = m_pic->getNumPartInCU() >> (depth << 1);
@@ -2111,11 +2094,6 @@
return numMvc;
}
-bool TComDataCU::isBipredRestriction()
-{
- return getLog2CUSize(0) == 3 && getPartitionSize(0) != SIZE_2Nx2N;
-}
-
void TComDataCU::clipMv(MV& outMV)
{
int mvshift = 2;
@@ -2130,15 +2108,6 @@
outMV.y = X265_MIN(ymax, X265_MAX(ymin, (int)outMV.y));
}
-/** Test whether the current block is skipped
- * \param partIdx Block index
- * \returns Flag indicating whether the block is skipped
- */
-bool TComDataCU::isSkipped(uint32_t partIdx)
-{
- return getSkipFlag(partIdx);
-}
-
// ====================================================================================================================
// Protected member functions
// ====================================================================================================================
@@ -2438,9 +2407,4 @@
result.firstSignificanceMapContext = bIsLuma ? 21 : 12;
}
-uint32_t TComDataCU::getSCUAddr()
-{
- return (m_cuAddr << g_maxFullDepth * 2) + m_absIdxInLCU;
-}
-
//! \}
diff -r 25dde1ffab66 -r bc71daca1b43 source/Lib/TLibCommon/TComDataCU.h
--- a/source/Lib/TLibCommon/TComDataCU.h Thu Sep 18 18:02:36 2014 +0530
+++ b/source/Lib/TLibCommon/TComDataCU.h Fri Sep 19 09:47:06 2014 +0900
@@ -248,7 +248,7 @@
public:
TComDataCU();
- virtual ~TComDataCU();
+ ~TComDataCU() {}
uint32_t m_psyEnergy;
uint64_t m_totalPsyCost;
@@ -290,7 +290,8 @@
uint32_t& getZorderIdxInCU() { return m_absIdxInLCU; }
- uint32_t getSCUAddr();
+ uint32_t getSCUAddr() const { return (m_cuAddr << g_maxFullDepth * 2) + m_absIdxInLCU; }
+
uint32_t getCUPelX() { return m_cuPelX; }
@@ -344,7 +345,7 @@
char getLastCodedQP(uint32_t absPartIdx);
void setQPSubCUs(int qp, TComDataCU* cu, uint32_t absPartIdx, uint32_t depth, bool &foundNonZeroCbf);
- bool isLosslessCoded(uint32_t absPartIdx);
+ bool isLosslessCoded(uint32_t idx) const { return m_cuTransquantBypass[idx] && m_slice->m_pps->bTransquantBypassEnabled; }
uint8_t* getTransformIdx() { return m_trIdx; }
@@ -488,10 +489,9 @@
// member functions for modes
// -------------------------------------------------------------------------------------------------------------------
- bool isIntra(uint32_t partIdx) { return m_predModes[partIdx] == MODE_INTRA; }
-
- bool isSkipped(uint32_t partIdx); ///< SKIP (no residual)
- bool isBipredRestriction();
+ bool isIntra(uint32_t partIdx) const { return m_predModes[partIdx] == MODE_INTRA; }
+ bool isSkipped(uint32_t idx) const { return m_skipFlag[idx]; }
+ bool isBipredRestriction() const { return m_log2CUSize[0] == 3 && m_partSizes[0] != SIZE_2Nx2N; }
// -------------------------------------------------------------------------------------------------------------------
// member functions for symbol prediction (most probable / mode conversion)
@@ -506,7 +506,7 @@
uint32_t getCtxSplitFlag(uint32_t absPartIdx, uint32_t depth);
uint32_t getCtxSkipFlag(uint32_t absPartIdx);
- uint32_t getCtxInterDir(uint32_t absPartIdx);
+ uint32_t getCtxInterDir(uint32_t idx) const { return m_depth[idx]; }
// -------------------------------------------------------------------------------------------------------------------
// member functions for RD cost storage
diff -r 25dde1ffab66 -r bc71daca1b43 source/Lib/TLibCommon/TComPicYuv.cpp
--- a/source/Lib/TLibCommon/TComPicYuv.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/Lib/TLibCommon/TComPicYuv.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -60,10 +60,6 @@
m_buOffsetC = NULL;
}
-TComPicYuv::~TComPicYuv()
-{
-}
-
bool TComPicYuv::create(int picWidth, int picHeight, int picCsp, uint32_t maxCUSize, uint32_t maxFullDepth)
{
m_picWidth = picWidth;
diff -r 25dde1ffab66 -r bc71daca1b43 source/Lib/TLibCommon/TComPicYuv.h
--- a/source/Lib/TLibCommon/TComPicYuv.h Thu Sep 18 18:02:36 2014 +0530
+++ b/source/Lib/TLibCommon/TComPicYuv.h Fri Sep 19 09:47:06 2014 +0900
@@ -94,7 +94,7 @@
int m_numCuInHeight;
TComPicYuv();
- virtual ~TComPicYuv();
+ ~TComPicYuv() {}
// ------------------------------------------------------------------------------------------------
// Memory management
diff -r 25dde1ffab66 -r bc71daca1b43 source/common/deblock.cpp
--- a/source/common/deblock.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/common/deblock.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -525,8 +525,8 @@
if (cu->m_slice->m_pps->bTransquantBypassEnabled)
{
// check if each of PUs is lossless coded
- partPNoFilter = cuP->isLosslessCoded(partP);
- partQNoFilter = cuQ->isLosslessCoded(partQ);
+ partPNoFilter = cuP->getCUTransquantBypass(partP);
+ partQNoFilter = cuQ->getCUTransquantBypass(partQ);
}
if (d < beta)
@@ -623,8 +623,8 @@
if (cu->m_slice->m_pps->bTransquantBypassEnabled)
{
// check if each of PUs is lossless coded
- partPNoFilter = cuP->isLosslessCoded(partP);
- partQNoFilter = cuQ->isLosslessCoded(partQ);
+ partPNoFilter = cuP->getCUTransquantBypass(partP);
+ partQNoFilter = cuQ->getCUTransquantBypass(partQ);
}
for (uint32_t chromaIdx = 0; chromaIdx < 2; chromaIdx++)
diff -r 25dde1ffab66 -r bc71daca1b43 source/common/frame.cpp
--- a/source/common/frame.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/common/frame.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -55,9 +55,6 @@
m_interData = NULL;
}
-Frame::~Frame()
-{}
-
bool Frame::create(x265_param *param, Window& display, Window& conformance)
{
m_conformanceWindow = conformance;
diff -r 25dde1ffab66 -r bc71daca1b43 source/common/frame.h
--- a/source/common/frame.h Thu Sep 18 18:02:36 2014 +0530
+++ b/source/common/frame.h Fri Sep 19 09:47:06 2014 +0900
@@ -87,7 +87,7 @@
x265_inter_data* m_interData; // inter analysis information
Frame();
- virtual ~Frame();
+ ~Frame() {}
bool create(x265_param *param, Window& display, Window& conformance);
bool allocPicSym(x265_param *param);
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/analysis.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -299,35 +299,38 @@
void Analysis::compressCU(TComDataCU* cu)
{
+ Frame* pic = cu->m_pic;
+ uint32_t cuAddr = cu->getAddr();
+
if (cu->m_slice->m_pps->bUseDQP)
m_bEncodeDQP = true;
// initialize CU data
- m_bestCU[0]->initCU(cu->m_pic, cu->getAddr());
- m_tempCU[0]->initCU(cu->m_pic, cu->getAddr());
+ m_bestCU[0]->initCU(pic, cuAddr);
+ m_tempCU[0]->initCU(pic, cuAddr);
// analysis of CU
uint32_t numPartition = cu->getTotalNumPart();
if (m_bestCU[0]->m_slice->m_sliceType == I_SLICE)
{
- if (m_param->analysisMode == X265_ANALYSIS_LOAD && m_bestCU[0]->m_pic->m_intraData)
+ if (m_param->analysisMode == X265_ANALYSIS_LOAD && pic->m_intraData)
{
uint32_t zOrder = 0;
compressSharedIntraCTU(m_bestCU[0], m_tempCU[0], false, cu, cu->m_CULocalData,
- &m_bestCU[0]->m_pic->m_intraData->depth[cu->getAddr() * cu->m_numPartitions],
- &m_bestCU[0]->m_pic->m_intraData->partSizes[cu->getAddr() * cu->m_numPartitions],
- &m_bestCU[0]->m_pic->m_intraData->modes[cu->getAddr() * cu->m_numPartitions], zOrder);
+ &pic->m_intraData->depth[cuAddr * cu->m_numPartitions],
+ &pic->m_intraData->partSizes[cuAddr * cu->m_numPartitions],
+ &pic->m_intraData->modes[cuAddr * cu->m_numPartitions], zOrder);
}
else
{
compressIntraCU(m_bestCU[0], m_tempCU[0], false, cu, cu->m_CULocalData);
- if (m_param->analysisMode == X265_ANALYSIS_SAVE && m_bestCU[0]->m_pic->m_intraData)
+ if (m_param->analysisMode == X265_ANALYSIS_SAVE && pic->m_intraData)
{
- memcpy(&m_bestCU[0]->m_pic->m_intraData->depth[cu->getAddr() * cu->m_numPartitions], m_bestCU[0]->getDepth(), sizeof(uint8_t) * cu->getTotalNumPart());
- memcpy(&m_bestCU[0]->m_pic->m_intraData->modes[cu->getAddr() * cu->m_numPartitions], m_bestCU[0]->getLumaIntraDir(), sizeof(uint8_t) * cu->getTotalNumPart());
- memcpy(&m_bestCU[0]->m_pic->m_intraData->partSizes[cu->getAddr() * cu->m_numPartitions], m_bestCU[0]->getPartitionSize(), sizeof(char) * cu->getTotalNumPart());
- m_bestCU[0]->m_pic->m_intraData->cuAddr[cu->getAddr()] = cu->getAddr();
- m_bestCU[0]->m_pic->m_intraData->poc[cu->getAddr()] = cu->m_pic->m_POC;
+ memcpy(&pic->m_intraData->depth[cuAddr * cu->m_numPartitions], m_bestCU[0]->getDepth(), sizeof(uint8_t) * cu->getTotalNumPart());
+ memcpy(&pic->m_intraData->modes[cuAddr * cu->m_numPartitions], m_bestCU[0]->getLumaIntraDir(), sizeof(uint8_t) * cu->getTotalNumPart());
+ memcpy(&pic->m_intraData->partSizes[cuAddr * cu->m_numPartitions], m_bestCU[0]->getPartitionSize(), sizeof(char) * cu->getTotalNumPart());
+ pic->m_intraData->cuAddr[cuAddr] = cuAddr;
+ pic->m_intraData->poc[cuAddr] = cu->m_pic->m_POC;
}
}
if (m_param->bLogCuStats || m_param->rc.bStatWrite)
@@ -415,17 +418,20 @@
}
}
}
+
void Analysis::compressIntraCU(TComDataCU*& outBestCU, TComDataCU*& outTempCU, uint32_t depth, TComDataCU* cuPicsym, CU *cu)
{
//PPAScopeEvent(CompressIntraCU + depth);
Frame* pic = outBestCU->m_pic;
+ uint32_t cuAddr = outBestCU->getAddr();
+ uint32_t absPartIdx = outBestCU->getZorderIdxInCU();
if (depth == 0)
// get original YUV data from picture
- m_origYuv[depth]->copyFromPicYuv(pic->getPicYuvOrg(), outBestCU->getAddr(), outBestCU->getZorderIdxInCU());
+ m_origYuv[depth]->copyFromPicYuv(pic->getPicYuvOrg(), cuAddr, absPartIdx);
else
// copy partition YUV from depth 0 CTU cache
- m_origYuv[0]->copyPartToYuv(m_origYuv[depth], outBestCU->getZorderIdxInCU());
+ m_origYuv[0]->copyPartToYuv(m_origYuv[depth], absPartIdx);
Slice* slice = outTempCU->m_slice;
// We need to split, so don't try these modes.
int cu_split_flag = !(cu->flags & CU::LEAF);
@@ -447,12 +453,12 @@
outBestCU->m_totalPsyCost = m_rdCost.calcPsyRdCost(outBestCU->m_totalDistortion, outBestCU->m_totalBits, outBestCU->m_psyEnergy);
else
outBestCU->m_totalRDCost = m_rdCost.calcRdCost(outBestCU->m_totalDistortion, outBestCU->m_totalBits);
+
+ // copy original YUV samples in lossless mode
+ if (outBestCU->isLosslessCoded(0))
+ fillOrigYUVBuffer(outBestCU, m_origYuv[depth]);
}
- // copy original YUV samples in lossless mode
- if (outBestCU->isLosslessCoded(0))
- fillOrigYUVBuffer(outBestCU, m_origYuv[depth]);
-
// further split
if (cu_split_flag)
{
@@ -474,7 +480,7 @@
compressIntraCU(subBestPartCU, subTempPartCU, nextDepth, cuPicsym, child_cu);
outTempCU->copyPartFrom(subBestPartCU, partUnitIdx, nextDepth); // Keep best part data to current temporary data.
- copyYuv2Tmp(subBestPartCU->getTotalNumPart() * partUnitIdx, nextDepth);
+ m_bestRecoYuv[nextDepth]->copyToPartYuv(m_tmpRecoYuv[depth], subBestPartCU->getTotalNumPart() * partUnitIdx);
}
else
{
@@ -527,7 +533,7 @@
if (!cu_unsplit_flag)
return;
// Copy Yuv data to picture Yuv
- copyYuv2Pic(pic, outBestCU->getAddr(), outBestCU->getZorderIdxInCU(), depth);
+ m_bestRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), cuAddr, absPartIdx);
#if CHECKED_BUILD || _DEBUG
X265_CHECK(outBestCU->getPartitionSize(0) != SIZE_NONE, "no best partition size\n");
@@ -615,7 +621,7 @@
if (!subBestPartCU->m_totalRDCost) // if cost is 0, CU is best CU
outTempCU->m_totalRDCost = 0; // set outTempCU cost to 0, so later check will use this CU as best CU
- copyYuv2Tmp(subBestPartCU->getTotalNumPart() * partUnitIdx, nextDepth);
+ m_bestRecoYuv[nextDepth]->copyToPartYuv(m_tmpRecoYuv[depth], subBestPartCU->getTotalNumPart() * partUnitIdx);
}
else
{
@@ -662,7 +668,7 @@
outBestCU->copyToPic(depth);
if (!cu_unsplit_flag)
return;
- copyYuv2Pic(pic, outBestCU->getAddr(), outBestCU->getZorderIdxInCU(), depth);
+ m_bestRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), outBestCU->getAddr(), outBestCU->getZorderIdxInCU());
#if CHECKED_BUILD || _DEBUG
X265_CHECK(outBestCU->getPartitionSize(0) != SIZE_NONE, "no best partition size\n");
@@ -728,11 +734,12 @@
void Analysis::compressInterCU_rd0_4(TComDataCU*& outBestCU, TComDataCU*& outTempCU, TComDataCU* cu, uint32_t depth, TComDataCU* cuPicsym, CU *cu_t, int bInsidePicture, uint32_t PartitionIndex, uint32_t minDepth)
{
Frame* pic = outTempCU->m_pic;
+ uint32_t cuAddr = outTempCU->getAddr();
uint32_t absPartIdx = outTempCU->getZorderIdxInCU();
if (depth == 0)
// get original YUV data from picture
- m_origYuv[depth]->copyFromPicYuv(pic->getPicYuvOrg(), outTempCU->getAddr(), absPartIdx);
+ m_origYuv[depth]->copyFromPicYuv(pic->getPicYuvOrg(), cuAddr, absPartIdx);
else
// copy partition YUV from depth 0 CTU cache
m_origYuv[0]->copyPartToYuv(m_origYuv[depth], absPartIdx);
@@ -751,14 +758,14 @@
if (depth == 0 && m_param->rdLevel == 0)
{
- m_origYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), cu->getAddr(), 0);
+ m_origYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), cuAddr, 0);
}
// We need to split, so don't try these modes.
#if TOPSKIP
if (cu_unsplit_flag && !bInsidePictureParent)
{
- TComDataCU* colocated0 = slice->m_numRefIdx[0] > 0 ? slice->m_refPicList[0][0]->getCU(outTempCU->getAddr()) : NULL;
- TComDataCU* colocated1 = slice->m_numRefIdx[1] > 0 ? slice->m_refPicList[1][0]->getCU(outTempCU->getAddr()) : NULL;
+ TComDataCU* colocated0 = slice->m_numRefIdx[0] > 0 ? slice->m_refPicList[0][0]->getCU(cuAddr) : NULL;
+ TComDataCU* colocated1 = slice->m_numRefIdx[1] > 0 ? slice->m_refPicList[1][0]->getCU(cuAddr) : NULL;
char currentQP = outTempCU->getQP(0);
char previousQP = colocated0->getQP(0);
uint32_t delta = 0, minDepth0 = 4, minDepth1 = 4;
@@ -794,12 +801,12 @@
/* Initialise all Mode-CUs based on parentCU */
if (depth == 0)
{
- m_interCU_2Nx2N[depth]->initCU(pic, cu->getAddr());
- m_interCU_Nx2N[depth]->initCU(pic, cu->getAddr());
- m_interCU_2NxN[depth]->initCU(pic, cu->getAddr());
- m_intraInInterCU[depth]->initCU(pic, cu->getAddr());
- m_mergeCU[depth]->initCU(pic, cu->getAddr());
- m_bestMergeCU[depth]->initCU(pic, cu->getAddr());
+ m_interCU_2Nx2N[depth]->initCU(pic, cuAddr);
+ m_interCU_Nx2N[depth]->initCU(pic, cuAddr);
+ m_interCU_2NxN[depth]->initCU(pic, cuAddr);
+ m_intraInInterCU[depth]->initCU(pic, cuAddr);
+ m_mergeCU[depth]->initCU(pic, cuAddr);
+ m_bestMergeCU[depth]->initCU(pic, cuAddr);
}
else
{
@@ -1022,7 +1029,7 @@
TComDataCU* aboveLeft = outTempCU->getCUAboveLeft();
TComDataCU* aboveRight = outTempCU->getCUAboveRight();
TComDataCU* left = outTempCU->getCULeft();
- TComDataCU* rootCU = pic->getPicSym()->getCU(outTempCU->getAddr());
+ TComDataCU* rootCU = pic->getPicSym()->getCU(cuAddr);
totalCostCU += rootCU->m_avgCost[depth] * rootCU->m_count[depth];
totalCountCU += rootCU->m_count[depth];
@@ -1064,7 +1071,7 @@
/* Copy Yuv data to picture Yuv */
if (m_param->rdLevel != 0)
- copyYuv2Pic(pic, outBestCU->getAddr(), absPartIdx, depth);
+ m_bestRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), cuAddr, absPartIdx);
return;
}
}
@@ -1095,7 +1102,7 @@
tempavgCost = m_rdCost.m_psyRd ? subBestPartCU->m_totalPsyCost : subBestPartCU->m_totalRDCost;
else
tempavgCost = subBestPartCU->m_totalRDCost;
- TComDataCU* rootCU = pic->getPicSym()->getCU(outTempCU->getAddr());
+ TComDataCU* rootCU = pic->getPicSym()->getCU(cuAddr);
uint64_t temp = rootCU->m_avgCost[nextDepth] * rootCU->m_count[nextDepth];
rootCU->m_count[nextDepth] += 1;
rootCU->m_avgCost[nextDepth] = (temp + tempavgCost) / rootCU->m_count[nextDepth];
@@ -1168,7 +1175,7 @@
if (depth == 0)
{
uint64_t tempavgCost = m_rdCost.m_psyRd ? outBestCU->m_totalPsyCost : outBestCU->m_totalRDCost;
- TComDataCU* rootCU = pic->getPicSym()->getCU(outTempCU->getAddr());
+ TComDataCU* rootCU = pic->getPicSym()->getCU(cuAddr);
uint64_t temp = rootCU->m_avgCost[depth] * rootCU->m_count[depth];
rootCU->m_count[depth] += 1;
rootCU->m_avgCost[depth] = (temp + tempavgCost) / rootCU->m_count[depth];
@@ -1200,7 +1207,7 @@
{
/* Copy Yuv data to picture Yuv */
if (cu_unsplit_flag)
- copyYuv2Pic(pic, outBestCU->getAddr(), absPartIdx, depth);
+ m_bestRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), cuAddr, absPartIdx);
}
#if CHECKED_BUILD || _DEBUG
@@ -1236,13 +1243,15 @@
//PPAScopeEvent(CompressCU + depth);
Frame* pic = outBestCU->m_pic;
+ uint32_t cuAddr = outBestCU->getAddr();
+ uint32_t absPartIdx = outBestCU->getZorderIdxInCU();
if (depth == 0)
// get original YUV data from picture
- m_origYuv[depth]->copyFromPicYuv(pic->getPicYuvOrg(), outBestCU->getAddr(), outBestCU->getZorderIdxInCU());
+ m_origYuv[depth]->copyFromPicYuv(pic->getPicYuvOrg(), cuAddr, absPartIdx);
else
// copy partition YUV from depth 0 CTU cache
- m_origYuv[0]->copyPartToYuv(m_origYuv[depth], outBestCU->getZorderIdxInCU());
+ m_origYuv[0]->copyPartToYuv(m_origYuv[depth], absPartIdx);
// variable for Cbf fast mode PU decision
bool doNotBlockPu = true;
@@ -1419,12 +1428,12 @@
outBestCU->m_totalPsyCost = m_rdCost.calcPsyRdCost(outBestCU->m_totalDistortion, outBestCU->m_totalBits, outBestCU->m_psyEnergy);
else
outBestCU->m_totalRDCost = m_rdCost.calcRdCost(outBestCU->m_totalDistortion, outBestCU->m_totalBits);
+
+ // copy original YUV samples in lossless mode
+ if (outBestCU->isLosslessCoded(0))
+ fillOrigYUVBuffer(outBestCU, m_origYuv[depth]);
}
- // copy original YUV samples in lossless mode
- if (outBestCU->isLosslessCoded(0))
- fillOrigYUVBuffer(outBestCU, m_origYuv[depth]);
-
// further split
if (cu_split_flag && !outBestCU->isSkipped(0))
{
@@ -1449,7 +1458,7 @@
compressInterCU_rd5_6(subBestPartCU, subTempPartCU, nextDepth, cuPicsym, child_cu);
outTempCU->copyPartFrom(subBestPartCU, partUnitIdx, nextDepth); // Keep best part data to current temporary data.
- copyYuv2Tmp(subBestPartCU->getTotalNumPart() * partUnitIdx, nextDepth);
+ m_bestRecoYuv[nextDepth]->copyToPartYuv(m_tmpRecoYuv[depth], subBestPartCU->getTotalNumPart() * partUnitIdx);
}
else
{
@@ -1500,7 +1509,7 @@
outBestCU->copyToPic(depth); // Copy Best data to Picture for next partition prediction.
// Copy Yuv data to picture Yuv
- copyYuv2Pic(pic, outBestCU->getAddr(), outBestCU->getZorderIdxInCU(), depth);
+ m_bestRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), cuAddr, absPartIdx);
#if CHECKED_BUILD || _DEBUG
X265_CHECK(outBestCU->getPartitionSize(0) != SIZE_NONE, "no best partition size\n");
@@ -2052,8 +2061,7 @@
TComDataCU* subTempPartCU = m_tempCU[nextDepth];
uint32_t qNumParts = (pic->getNumPartInCU() >> (depth << 1)) >> 2;
uint32_t xmax = slice->m_sps->picWidthInLumaSamples - lcu->getCUPelX();
- uint32_t ymax = slice->m_sps->picHeightInLumaSamples - lcu->getCUPelY();
- for (uint32_t partUnitIdx = 0; partUnitIdx < 4; partUnitIdx++, absPartIdx += qNumParts)
+ uint32_t ymax = slice->m_sps->picHeightInLumaSamples - lcu->getCUPelY(); for (uint32_t partUnitIdx = 0; partUnitIdx < 4; partUnitIdx++, absPartIdx += qNumParts)
{
if (g_zscanToPelX[absPartIdx] < xmax && g_zscanToPelY[absPartIdx] < ymax)
{
@@ -2065,6 +2073,8 @@
return;
}
+ uint32_t cuAddr = cu->getAddr();
+
m_quant.setQPforQuant(cu);
if (lcu->getPredictionMode(absPartIdx) == MODE_INTER)
@@ -2093,7 +2103,6 @@
src2 = m_bestPredYuv[0]->getCrAddr(absPartIdx);
src1 = m_origYuv[0]->getCrAddr(absPartIdx);
dst = m_tmpResiYuv[depth]->getCrAddr();
- dststride = m_tmpResiYuv[depth]->m_cwidth;
primitives.chroma[m_param->internalCsp].sub_ps[sizeIdx](dst, dststride, src1, src2, src1stride, src2stride);
uint32_t tuDepthRange[2];
@@ -2131,9 +2140,8 @@
pred = m_bestPredYuv[0]->getCrAddr(absPartIdx);
res = m_tmpResiYuv[depth]->getCrAddr();
reco = m_bestRecoYuv[depth]->getCrAddr();
- reco = m_bestRecoYuv[depth]->getCrAddr();
primitives.chroma[m_param->internalCsp].add_ps[sizeIdx](reco, dststride, pred, res, src1stride, src2stride);
- m_bestRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), lcu->getAddr(), absPartIdx);
+ m_bestRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), cuAddr, absPartIdx);
return;
}
}
@@ -2142,19 +2150,19 @@
int part = partitionFromLog2Size(log2CUSize);
TComPicYuv* rec = pic->getPicYuvRec();
pixel* src = m_bestPredYuv[0]->getLumaAddr(absPartIdx);
- pixel* dst = rec->getLumaAddr(cu->getAddr(), absPartIdx);
+ pixel* dst = rec->getLumaAddr(cuAddr, absPartIdx);
uint32_t srcstride = m_bestPredYuv[0]->getStride();
uint32_t dststride = rec->getStride();
primitives.luma_copy_pp[part](dst, dststride, src, srcstride);
src = m_bestPredYuv[0]->getCbAddr(absPartIdx);
- dst = rec->getCbAddr(cu->getAddr(), absPartIdx);
+ dst = rec->getCbAddr(cuAddr, absPartIdx);
srcstride = m_bestPredYuv[0]->getCStride();
dststride = rec->getCStride();
primitives.chroma[m_param->internalCsp].copy_pp[part](dst, dststride, src, srcstride);
src = m_bestPredYuv[0]->getCrAddr(absPartIdx);
- dst = rec->getCrAddr(cu->getAddr(), absPartIdx);
+ dst = rec->getCrAddr(cuAddr, absPartIdx);
primitives.chroma[m_param->internalCsp].copy_pp[part](dst, dststride, src, srcstride);
}
else
@@ -2162,7 +2170,7 @@
m_origYuv[0]->copyPartToYuv(m_origYuv[depth], absPartIdx);
generateCoeffRecon(cu, m_origYuv[depth], m_modePredYuv[5][depth], m_tmpResiYuv[depth], m_tmpRecoYuv[depth]);
checkDQP(cu);
- m_tmpRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), lcu->getAddr(), absPartIdx);
+ m_tmpRecoYuv[depth]->copyToPicYuv(pic->getPicYuvRec(), cuAddr, absPartIdx);
cu->copyCodedToPic(depth);
}
}
@@ -2241,16 +2249,6 @@
}
}
-void Analysis::copyYuv2Pic(Frame* outPic, uint32_t cuAddr, uint32_t absPartIdx, uint32_t depth)
-{
- m_bestRecoYuv[depth]->copyToPicYuv(outPic->getPicYuvRec(), cuAddr, absPartIdx);
-}
-
-void Analysis::copyYuv2Tmp(uint32_t partUnitIdx, uint32_t nextDepth)
-{
- m_bestRecoYuv[nextDepth]->copyToPartYuv(m_tmpRecoYuv[nextDepth - 1], partUnitIdx);
-}
-
/* Function for filling original YUV samples of a CU in lossless mode */
void Analysis::fillOrigYUVBuffer(TComDataCU* cu, TComYuv* fencYuv)
{
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/analysis.h
--- a/source/encoder/analysis.h Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/analysis.h Fri Sep 19 09:47:06 2014 +0900
@@ -129,8 +129,6 @@
void encodeIntraInInter(TComDataCU* cu, TComYuv* fencYuv, TComYuv* predYuv, ShortYuv* outResiYuv, TComYuv* outReconYuv);
void encodeResidue(TComDataCU* lcu, TComDataCU* cu, uint32_t absPartIdx, uint32_t depth);
void checkDQP(TComDataCU* cu);
- void copyYuv2Pic(Frame* outPic, uint32_t cuAddr, uint32_t absPartIdx, uint32_t depth);
- void copyYuv2Tmp(uint32_t partUnitIdx, uint32_t depth);
void deriveTestModeAMP(TComDataCU* bestCU, PartSize parentSize, bool &bTestAMP_Hor, bool &bTestAMP_Ver,
bool &bTestMergeAMP_Hor, bool &bTestMergeAMP_Ver);
void fillOrigYUVBuffer(TComDataCU* outCU, TComYuv* origYuv);
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/encoder.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -75,10 +75,6 @@
m_param = NULL;
}
-Encoder::~Encoder()
-{
-}
-
void Encoder::create()
{
if (!primitives.sad[0])
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/encoder.h
--- a/source/encoder/encoder.h Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/encoder.h Fri Sep 19 09:47:06 2014 +0900
@@ -130,7 +130,7 @@
Encoder();
- virtual ~Encoder();
+ ~Encoder() {}
void create();
void destroy();
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/entropy.cpp
--- a/source/encoder/entropy.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/entropy.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -1143,11 +1143,6 @@
}
// SBAC RD
-void Entropy::load(Entropy& src)
-{
- this->copyFrom(src);
-}
-
void Entropy::loadIntraDirModeLuma(Entropy& src)
{
copyState(src);
@@ -1155,11 +1150,6 @@
::memcpy(&m_contextState[OFF_ADI_CTX], &src.m_contextState[OFF_ADI_CTX], sizeof(uint8_t) * NUM_ADI_CTX);
}
-void Entropy::store(Entropy& dest)
-{
- dest.copyFrom(*this);
-}
-
void Entropy::copyFrom(Entropy& src)
{
copyState(src);
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/entropy.h
--- a/source/encoder/entropy.h Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/entropy.h Fri Sep 19 09:47:06 2014 +0900
@@ -117,7 +117,6 @@
Entropy();
void setBitstream(Bitstream* p) { m_bitIf = p; }
- bool isBitCounter() const { return !m_bitIf; }
uint32_t getNumberOfWrittenBits()
{
@@ -130,9 +129,10 @@
void resetEntropy(Slice *slice);
// SBAC RD
- void load(Entropy& src);
+ void load(Entropy& src) { copyFrom(src); }
+
void loadIntraDirModeLuma(Entropy& src);
- void store(Entropy& dest);
+ void store(Entropy& dest) { dest.copyFrom(*this); }
void loadContexts(Entropy& src) { copyContextsFrom(src); }
void copyState(Entropy& other);
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/motion.h
--- a/source/encoder/motion.h Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/motion.h Fri Sep 19 09:47:06 2014 +0900
@@ -65,7 +65,7 @@
MotionEstimate();
- virtual ~MotionEstimate();
+ ~MotionEstimate();
void setSearchMethod(int i) { searchMethod = i; }
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/predict.cpp
--- a/source/encoder/predict.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/predict.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -363,7 +363,6 @@
{
int refStride = refPic->getCStride();
int dstStride = dstPic->getCStride();
-
int hChromaShift = CHROMA_H_SHIFT(m_csp);
int vChromaShift = CHROMA_V_SHIFT(m_csp);
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/predict.h
--- a/source/encoder/predict.h Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/predict.h Fri Sep 19 09:47:06 2014 +0900
@@ -83,7 +83,7 @@
pixel* m_refLeftFlt;
Predict();
- virtual ~Predict();
+ ~Predict();
void initTempBuff(int csp);
diff -r 25dde1ffab66 -r bc71daca1b43 source/encoder/search.cpp
--- a/source/encoder/search.cpp Thu Sep 18 18:02:36 2014 +0530
+++ b/source/encoder/search.cpp Fri Sep 19 09:47:06 2014 +0900
@@ -2166,7 +2166,7 @@
else
zeroCost = m_rdCost.calcRdCost(zeroDistortion, zeroResiBits);
- if (cu->isLosslessCoded(0))
+ if (bIsLosslessMode)
zeroCost = cost + 1;
if (zeroCost < cost)
@@ -2592,7 +2592,7 @@
nonZeroPsyEnergyY = m_rdCost.psyCost(size, fencYuv->getLumaAddr(absPartIdx), fencYuv->getStride(),
cu->m_pic->getPicYuvRec()->getLumaAddr(cu->getAddr(), zorder), cu->m_pic->getPicYuvRec()->getStride());
}
- if (cu->isLosslessCoded(0))
+ if (cu->getCUTransquantBypass(0))
{
distY = nonZeroDistY;
psyEnergyY = nonZeroPsyEnergyY;
@@ -2692,7 +2692,7 @@
cu->m_pic->getPicYuvRec()->getCbAddr(cu->getAddr(), zorder),
cu->m_pic->getPicYuvRec()->getCStride());
}
- if (cu->isLosslessCoded(0))
+ if (cu->getCUTransquantBypass(0))
{
distU = nonZeroDistU;
psyEnergyU = nonZeroPsyEnergyU;
@@ -2774,7 +2774,7 @@
cu->m_pic->getPicYuvRec()->getCrAddr(cu->getAddr(), zorder),
cu->m_pic->getPicYuvRec()->getCStride());
}
- if (cu->isLosslessCoded(0))
+ if (cu->getCUTransquantBypass(0))
{
distV = nonZeroDistV;
psyEnergyV = nonZeroPsyEnergyV;
More information about the x265-devel
mailing list