[x265] [PATCH] rd level: use cu coeff array while computing coefficients instead of temp buffer
deepthidevaki at multicorewareinc.com
deepthidevaki at multicorewareinc.com
Mon Dec 16 10:37:10 CET 2013
# HG changeset patch
# User Deepthi Devaki <deepthidevaki at multicorewareinc.com>
# Date 1387185624 -19800
# Node ID f20e5ab835cd7071d9ebeabff50f6b9fef4d3e39
# Parent 9bb16a023918c342b907d106b4a3d59ec2473bc1
rd level: use cu coeff array while computing coefficients instead of temp buffer
diff -r 9bb16a023918 -r f20e5ab835cd source/Lib/TLibEncoder/TEncSearch.cpp
--- a/source/Lib/TLibEncoder/TEncSearch.cpp Mon Dec 16 14:33:57 2013 +0530
+++ b/source/Lib/TLibEncoder/TEncSearch.cpp Mon Dec 16 14:50:24 2013 +0530
@@ -3266,9 +3266,7 @@
if (cu->getPredictionMode(0) == MODE_INTER)
{
residualTransformQuantInter(cu, 0, 0, resiYuv, cu->getDepth(0), true);
- xSetResidualQTData(cu, 0, 0, NULL, cu->getDepth(0), false);
uint32_t width = cu->getWidth(0);
- xSetResidualQTData(cu, 0, 0, resiYuv, cu->getDepth(0), true);
reconYuv->addClip(predYuv, resiYuv, 0, width);
if (cu->getMergeFlag(0) && cu->getPartitionSize(0) == SIZE_2Nx2N && cu->getQtRootCbf(0) == 0)
@@ -3322,10 +3320,10 @@
if (bCheckFull)
{
const uint32_t numCoeffPerAbsPartIdxIncrement = cu->getSlice()->getSPS()->getMaxCUWidth() * cu->getSlice()->getSPS()->getMaxCUHeight() >> (cu->getSlice()->getSPS()->getMaxCUDepth() << 1);
- const uint32_t qtlayer = cu->getSlice()->getSPS()->getQuadtreeTULog2MaxSize() - trSizeLog2;
- TCoeff *coeffCurY = m_qtTempCoeffY[qtlayer] + (numCoeffPerAbsPartIdxIncrement * absPartIdx);
- TCoeff *coeffCurU = m_qtTempCoeffCb[qtlayer] + (numCoeffPerAbsPartIdxIncrement * absPartIdx >> 2);
- TCoeff *coeffCurV = m_qtTempCoeffCr[qtlayer] + (numCoeffPerAbsPartIdxIncrement * absPartIdx >> 2);
+
+ TCoeff *coeffCurY = cu->getCoeffY() + (numCoeffPerAbsPartIdxIncrement * absPartIdx);
+ TCoeff *coeffCurU = cu->getCoeffCb() + (numCoeffPerAbsPartIdxIncrement * absPartIdx >> 2);
+ TCoeff *coeffCurV = cu->getCoeffCr() + (numCoeffPerAbsPartIdxIncrement * absPartIdx >> 2);
int trWidth = 0, trHeight = 0, trWidthC = 0, trHeightC = 0;
uint32_t absTUPartIdxC = absPartIdx;
@@ -3370,64 +3368,55 @@
if (absSumY)
{
- int16_t *curResiY = m_qtTempTComYuv[qtlayer].getLumaAddr(absTUPartIdx);
+ int16_t *curResiY = resiYuv->getLumaAddr(absTUPartIdx);
m_trQuant->setQPforQuant(cu->getQP(0), TEXT_LUMA, cu->getSlice()->getSPS()->getQpBDOffsetY(), 0);
int scalingListType = 3 + g_eTTable[(int)TEXT_LUMA];
assert(scalingListType < 6);
- assert(m_qtTempTComYuv[qtlayer].m_width == MAX_CU_SIZE);
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiY, MAX_CU_SIZE, coeffCurY, trWidth, trHeight, scalingListType, false, lastPosY); //this is for inter mode only
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiY, resiYuv->m_width, coeffCurY, trWidth, trHeight, scalingListType, false, lastPosY); //this is for inter mode only
}
else
{
- int16_t *ptr = m_qtTempTComYuv[qtlayer].getLumaAddr(absTUPartIdx);
- assert(m_qtTempTComYuv[qtlayer].m_width == MAX_CU_SIZE);
-
+ int16_t *ptr = resiYuv->getLumaAddr(absTUPartIdx);
assert(trWidth == trHeight);
- primitives.blockfill_s[(int)g_convertToBit[trWidth]](ptr, MAX_CU_SIZE, 0);
+ primitives.blockfill_s[(int)g_convertToBit[trWidth]](ptr, resiYuv->m_width, 0);
}
if (bCodeChroma)
{
if (absSumU)
{
- int16_t *pcResiCurrU = m_qtTempTComYuv[qtlayer].getCbAddr(absTUPartIdxC);
+ int16_t *pcResiCurrU = resiYuv->getCbAddr(absTUPartIdxC);
int curChromaQpOffset = cu->getSlice()->getPPS()->getChromaCbQpOffset() + cu->getSlice()->getSliceQpDeltaCb();
m_trQuant->setQPforQuant(cu->getQP(0), TEXT_CHROMA, cu->getSlice()->getSPS()->getQpBDOffsetC(), curChromaQpOffset);
int scalingListType = 3 + g_eTTable[(int)TEXT_CHROMA_U];
assert(scalingListType < 6);
- assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, pcResiCurrU, MAX_CU_SIZE / 2, coeffCurU, trWidthC, trHeightC, scalingListType, false, lastPosU);
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, pcResiCurrU, resiYuv->m_cwidth, coeffCurU, trWidthC, trHeightC, scalingListType, false, lastPosU);
}
else
{
- int16_t *ptr = m_qtTempTComYuv[qtlayer].getCbAddr(absTUPartIdxC);
- assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
-
+ int16_t *ptr = resiYuv->getCbAddr(absTUPartIdxC);
assert(trWidthC == trHeightC);
- primitives.blockfill_s[(int)g_convertToBit[trWidthC]](ptr, MAX_CU_SIZE / 2, 0);
+ primitives.blockfill_s[(int)g_convertToBit[trWidthC]](ptr, resiYuv->m_cwidth, 0);
}
if (absSumV)
{
- int16_t *curResiV = m_qtTempTComYuv[qtlayer].getCrAddr(absTUPartIdxC);
+ int16_t *curResiV = resiYuv->getCrAddr(absTUPartIdxC);
int curChromaQpOffset = cu->getSlice()->getPPS()->getChromaCrQpOffset() + cu->getSlice()->getSliceQpDeltaCr();
m_trQuant->setQPforQuant(cu->getQP(0), TEXT_CHROMA, cu->getSlice()->getSPS()->getQpBDOffsetC(), curChromaQpOffset);
int scalingListType = 3 + g_eTTable[(int)TEXT_CHROMA_V];
assert(scalingListType < 6);
- assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiV, MAX_CU_SIZE / 2, coeffCurV, trWidthC, trHeightC, scalingListType, false, lastPosV);
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiV, resiYuv->m_cwidth, coeffCurV, trWidthC, trHeightC, scalingListType, false, lastPosV);
}
else
{
- int16_t *ptr = m_qtTempTComYuv[qtlayer].getCrAddr(absTUPartIdxC);
- assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
-
+ int16_t *ptr = resiYuv->getCrAddr(absTUPartIdxC);
assert(trWidthC == trHeightC);
- primitives.blockfill_s[(int)g_convertToBit[trWidthC]](ptr, MAX_CU_SIZE / 2, 0);
+ primitives.blockfill_s[(int)g_convertToBit[trWidthC]](ptr, resiYuv->m_cwidth, 0);
}
}
cu->setCbfSubParts(absSumY ? setCbf : 0, TEXT_LUMA, absPartIdx, depth);
diff -r 9bb16a023918 -r f20e5ab835cd source/encoder/compress.cpp
--- a/source/encoder/compress.cpp Mon Dec 16 14:33:57 2013 +0530
+++ b/source/encoder/compress.cpp Mon Dec 16 14:50:24 2013 +0530
@@ -927,7 +927,6 @@
//Residual encoding
m_search->residualTransformQuantInter(cu, 0, 0, m_tmpResiYuv[depth], cu->getDepth(0), true);
- m_search->xSetResidualQTData(cu, 0, 0, NULL, cu->getDepth(0), false);
if (lcu->getMergeFlag(absPartIdx) && cu->getPartitionSize(0) == SIZE_2Nx2N && !cu->getQtRootCbf(0))
{
@@ -937,7 +936,6 @@
else
{
cu->copyCodedToPic(depth);
- m_search->xSetResidualQTData(cu, 0, 0, m_tmpResiYuv[depth], cu->getDepth(0), true);
//Generate Recon
Pel* pred = m_bestPredYuv[0]->getLumaAddr(absPartIdx);
More information about the x265-devel
mailing list