On Mon, May 26, 2014 at 3:02 PM, <sumala...@multicorewareinc.com> wrote:
> # HG changeset patch > # User Sumalatha Polureddy<sumala...@multicorewareinc.com> > # Date 1401087565 -19800 > # Node ID cbe5cc0e48b4122518ca732a1b32de16ba25c467 > # Parent 5134e76aa729b6fece18701fdc00390c2f2ffb32 > psyrd: use psyrdcost for selecting best mode across depth > > diff -r 5134e76aa729 -r cbe5cc0e48b4 source/Lib/TLibCommon/TComDataCU.cpp > --- a/source/Lib/TLibCommon/TComDataCU.cpp Thu May 22 21:46:21 2014 > -0500 > +++ b/source/Lib/TLibCommon/TComDataCU.cpp Mon May 26 12:29:25 2014 > +0530 > @@ -218,6 +218,7 @@ > m_sa8dCost = MAX_INT64; > m_totalDistortion = 0; > m_totalBits = 0; > + m_psyCost = 0; > m_numPartitions = pic->getNumPartInCU(); > char* qp = pic->getCU(getAddr())->getQP(); > m_baseQp = pic->getCU(getAddr())->m_baseQp; > @@ -309,6 +310,7 @@ > m_sa8dCost = MAX_INT64; > m_totalDistortion = 0; > m_totalBits = 0; > + m_psyCost = 0; > > uint8_t cuSize = g_maxCUSize >> depth; > > @@ -345,6 +347,7 @@ > m_sa8dCost = MAX_INT64; > m_totalDistortion = 0; > m_totalBits = 0; > + m_psyCost = 0; > > uint8_t cuSize = g_maxCUSize >> depth; > > @@ -393,6 +396,7 @@ > m_sa8dCost = MAX_INT64; > m_totalDistortion = 0; > m_totalBits = 0; > + m_psyCost = 0; > m_numPartitions = cu->getTotalNumPart() >> 2; > > for (int i = 0; i < 4; i++) > @@ -457,6 +461,7 @@ > m_sa8dCost = MAX_INT64; > m_totalDistortion = 0; > m_totalBits = 0; > + m_psyCost = 0; > m_numPartitions = cu->getTotalNumPart() >> 2; > > for (int i = 0; i < 4; i++) > @@ -520,6 +525,7 @@ > m_sa8dCost = MAX_INT64; > m_totalDistortion = 0; > m_totalBits = 0; > + m_psyCost = 0; > m_numPartitions = cu->getTotalNumPart() >> 2; > > TComDataCU* rpcCU = m_pic->getCU(m_cuAddr); > @@ -550,6 +556,7 @@ > > m_totalDistortion += cu->m_totalDistortion; > m_totalBits += cu->m_totalBits; > + m_psyCost += cu->m_psyCost; > > uint32_t offset = cu->getTotalNumPart() * partUnitIdx; > uint32_t numPartition = cu->getTotalNumPart(); > @@ -610,6 +617,7 @@ > rpcCU->m_totalCost = m_totalCost; > rpcCU->m_totalDistortion = m_totalDistortion; > rpcCU->m_totalBits = m_totalBits; > + rpcCU->m_psyCost = m_psyCost; > > int sizeInBool = sizeof(bool) * m_numPartitions; > int sizeInChar = sizeof(char) * m_numPartitions; > @@ -695,6 +703,7 @@ > cu->m_totalCost = m_totalCost; > cu->m_totalDistortion = m_totalDistortion; > cu->m_totalBits = m_totalBits; > + cu->m_psyCost = m_psyCost; > > int sizeInBool = sizeof(bool) * qNumPart; > int sizeInChar = sizeof(char) * qNumPart; > diff -r 5134e76aa729 -r cbe5cc0e48b4 source/Lib/TLibCommon/TComDataCU.h > --- a/source/Lib/TLibCommon/TComDataCU.h Thu May 22 21:46:21 2014 > -0500 > +++ b/source/Lib/TLibCommon/TComDataCU.h Mon May 26 12:29:25 2014 > +0530 > @@ -168,6 +168,7 @@ > uint64_t m_totalCost; ///< sum of partition RD costs > uint32_t m_totalDistortion; ///< sum of partition distortion > uint32_t m_totalBits; ///< sum of partition signal bits > + uint32_t m_psyCost; > uint64_t m_avgCost[4]; // stores the avg cost of CU's in > frame for each depth > uint32_t m_count[4]; > uint64_t m_sa8dCost; > diff -r 5134e76aa729 -r cbe5cc0e48b4 source/Lib/TLibEncoder/TEncCu.cpp > --- a/source/Lib/TLibEncoder/TEncCu.cpp Thu May 22 21:46:21 2014 -0500 > +++ b/source/Lib/TLibEncoder/TEncCu.cpp Mon May 26 12:29:25 2014 +0530 > @@ -601,7 +601,14 @@ > m_entropyCoder->resetBits(); > m_entropyCoder->encodeSplitFlag(outBestCU, 0, depth); > outBestCU->m_totalBits += > m_entropyCoder->getNumberOfWrittenBits(); // split bits > - outBestCU->m_totalCost = > m_rdCost->calcRdCost(outBestCU->m_totalDistortion, outBestCU->m_totalBits); > + if (m_rdCost->psyRdEnabled()) > + { > + outBestCU->m_totalCost = > m_rdCost->calcPsyRdCost(outBestCU->m_totalDistortion, > outBestCU->m_totalBits, outBestCU->m_psyCost); > If our objective is to catch unintended comparisons between psyCost and regular RD cost, you should save the above cost (with psyRd enabled) into m_psyCost. + } > + else > + { > + outBestCU->m_totalCost = > m_rdCost->calcRdCost(outBestCU->m_totalDistortion, outBestCU->m_totalBits); > + } > } > > outTempCU->initEstData(depth); > @@ -648,7 +655,14 @@ > m_entropyCoder->encodeSplitFlag(outTempCU, 0, depth); > outTempCU->m_totalBits += > m_entropyCoder->getNumberOfWrittenBits(); // split bits > } > - outTempCU->m_totalCost = > m_rdCost->calcRdCost(outTempCU->m_totalDistortion, outTempCU->m_totalBits); > + if (m_rdCost->psyRdEnabled()) > + { > + outTempCU->m_totalCost = > m_rdCost->calcPsyRdCost(outTempCU->m_totalDistortion, > outTempCU->m_totalBits, outTempCU->m_psyCost); > + } > + else > + { > + outTempCU->m_totalCost = > m_rdCost->calcRdCost(outTempCU->m_totalDistortion, outTempCU->m_totalBits); > + } > > if ((g_maxCUSize >> depth) == slice->getPPS()->getMinCuDQPSize() > && slice->getPPS()->getUseDQP()) > { > @@ -923,7 +937,14 @@ > m_entropyCoder->resetBits(); > m_entropyCoder->encodeSplitFlag(outBestCU, 0, depth); > outBestCU->m_totalBits += > m_entropyCoder->getNumberOfWrittenBits(); // split bits > - outBestCU->m_totalCost = > m_rdCost->calcRdCost(outBestCU->m_totalDistortion, outBestCU->m_totalBits); > + if (m_rdCost->psyRdEnabled()) > + { > + outBestCU->m_totalCost = > m_rdCost->calcPsyRdCost(outBestCU->m_totalDistortion, > outBestCU->m_totalBits, outBestCU->m_psyCost); > + } > + else > + { > + outBestCU->m_totalCost = > m_rdCost->calcRdCost(outBestCU->m_totalDistortion, outBestCU->m_totalBits); > + } > > // Early CU determination > if (outBestCU->isSkipped(0)) > @@ -982,7 +1003,14 @@ > m_entropyCoder->encodeSplitFlag(outTempCU, 0, depth); > outTempCU->m_totalBits += > m_entropyCoder->getNumberOfWrittenBits(); // split bits > } > - outTempCU->m_totalCost = > m_rdCost->calcRdCost(outTempCU->m_totalDistortion, outTempCU->m_totalBits); > + if(m_rdCost->psyRdEnabled()) > + { > + outTempCU->m_totalCost = > m_rdCost->calcPsyRdCost(outTempCU->m_totalDistortion, > outTempCU->m_totalBits, outTempCU->m_psyCost); > + } > + else > + { > + outTempCU->m_totalCost = > m_rdCost->calcRdCost(outTempCU->m_totalDistortion, outTempCU->m_totalBits); > + } > > if ((g_maxCUSize >> depth) == slice->getPPS()->getMinCuDQPSize() > && slice->getPPS()->getUseDQP()) > { > @@ -1391,6 +1419,7 @@ > int part = g_convertToBit[outTempCU->getCUSize(0)]; > uint32_t psyRdCost = m_rdCost->psyCost(part, > m_origYuv[depth]->getLumaAddr(), m_origYuv[depth]->getStride(), > > m_tmpRecoYuv[depth]->getLumaAddr(), m_tmpRecoYuv[depth]->getStride()); > + outTempCU->m_psyCost = psyRdCost; > outTempCU->m_totalCost = > m_rdCost->calcPsyRdCost(outTempCU->m_totalDistortion, > outTempCU->m_totalBits, psyRdCost); > } > else > @@ -1438,6 +1467,7 @@ > int part = g_convertToBit[outTempCU->getCUSize(0)]; > uint32_t psyRdCost = m_rdCost->psyCost(part, > m_origYuv[depth]->getLumaAddr(), m_origYuv[depth]->getStride(), > > m_tmpRecoYuv[depth]->getLumaAddr(), m_tmpRecoYuv[depth]->getStride()); > + outTempCU->m_psyCost = psyRdCost; > outTempCU->m_totalCost = > m_rdCost->calcPsyRdCost(outTempCU->m_totalDistortion, > outTempCU->m_totalBits, psyRdCost); > } > else > diff -r 5134e76aa729 -r cbe5cc0e48b4 source/Lib/TLibEncoder/TEncSearch.cpp > --- a/source/Lib/TLibEncoder/TEncSearch.cpp Thu May 22 21:46:21 2014 > -0500 > +++ b/source/Lib/TLibEncoder/TEncSearch.cpp Mon May 26 12:29:25 2014 > +0530 > @@ -2698,6 +2698,7 @@ > int size = g_convertToBit[cu->getCUSize(0)]; > uint32_t psyRdCost = m_rdCost->psyCost(size, > fencYuv->getLumaAddr(), fencYuv->getStride(), > > outReconYuv->getLumaAddr(), outReconYuv->getStride()); > + cu->m_psyCost = psyRdCost; > cu->m_totalCost = > m_rdCost->calcPsyRdCost(cu->m_totalDistortion, cu->m_totalBits, psyRdCost); > } > else > @@ -2789,6 +2790,7 @@ > int size = g_convertToBit[cu->getCUSize(0)]; > uint32_t psyRdCost = m_rdCost->psyCost(size, > fencYuv->getLumaAddr(), fencYuv->getStride(), > > outReconYuv->getLumaAddr(), outReconYuv->getStride()); > + cu->m_psyCost = psyRdCost; > bcost = m_rdCost->calcPsyRdCost(bdist, bestBits, psyRdCost); > } > else > _______________________________________________ > x265-devel mailing list > x265-devel@videolan.org > https://mailman.videolan.org/listinfo/x265-devel >
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel