Thanks, looks good. On Tue, Sep 16, 2014 at 9:45 AM, <santhosh...@multicorewareinc.com> wrote:
> # HG changeset patch > # User Santhoshini Sekar <santhosh...@multicorewareinc.com> > # Date 1410840429 -19800 > # Tue Sep 16 09:37:09 2014 +0530 > # Node ID 50505472d3e33b775c70f2f373e1c15d17e47e66 > # Parent 7e29b10982d2eb7fd79f581d99996f04184522ba > analysis: add CU specific details to encodeCU() > > diff -r 7e29b10982d2 -r 50505472d3e3 source/encoder/analysis.cpp > --- a/source/encoder/analysis.cpp Thu Sep 11 19:24:28 2014 +0530 > +++ b/source/encoder/analysis.cpp Tue Sep 16 09:37:09 2014 +0530 > @@ -301,7 +301,6 @@ > { > if (cu->m_slice->m_pps->bUseDQP) > m_bEncodeDQP = true; > - loadCTUData(cu); > > // initialize CU data > m_bestCU[0]->initCU(cu->m_pic, cu->getAddr()); > diff -r 7e29b10982d2 -r 50505472d3e3 source/encoder/entropy.cpp > --- a/source/encoder/entropy.cpp Thu Sep 11 19:24:28 2014 +0530 > +++ b/source/encoder/entropy.cpp Tue Sep 16 09:37:09 2014 +0530 > @@ -481,14 +481,14 @@ > } > } > > -void Entropy::encodeCTU(TComDataCU* cu) > +void Entropy::encodeCTU(TComDataCU* cu, CU* cuData) > { > bool bEncodeDQP = cu->m_slice->m_pps->bUseDQP; > - encodeCU(cu, 0, 0, false, bEncodeDQP); > + encodeCU(cu, 0, 0, bEncodeDQP, cuData); > } > > /* encode a CU block recursively */ > -void Entropy::encodeCU(TComDataCU* cu, uint32_t absPartIdx, uint32_t > depth, bool bInsidePicture, bool& bEncodeDQP) > +void Entropy::encodeCU(TComDataCU* cu, uint32_t absPartIdx, uint32_t > depth, bool& bEncodeDQP, CU* cuData) > { > Frame* pic = cu->m_pic; > Slice* slice = cu->m_slice; > @@ -496,30 +496,24 @@ > if (depth <= slice->m_pps->maxCuDQPDepth && slice->m_pps->bUseDQP) > bEncodeDQP = true; > > - if (!bInsidePicture) > + int cuSplitFlag = !(cuData->flags & CU::LEAF); > + int cuUnsplitFlag = !(cuData->flags & CU::SPLIT_MANDATORY); > + > + if (!cuUnsplitFlag) > { > - uint32_t xmax = slice->m_sps->picWidthInLumaSamples - > cu->getCUPelX(); > - uint32_t ymax = slice->m_sps->picHeightInLumaSamples - > cu->getCUPelY(); > - uint32_t cuSize = g_maxCUSize >> depth; > - > - bInsidePicture = (g_zscanToPelX[absPartIdx] + cuSize <= xmax && > - g_zscanToPelY[absPartIdx] + cuSize <= ymax); > - > - if (!bInsidePicture) > + uint32_t qNumParts = (pic->getNumPartInCU() >> (depth << 1)) >> 2; > + for (uint32_t partUnitIdx = 0; partUnitIdx < 4; partUnitIdx++, > absPartIdx += qNumParts) > { > - uint32_t qNumParts = (pic->getNumPartInCU() >> (depth << 1)) > >> 2; > - for (uint32_t partUnitIdx = 0; partUnitIdx < 4; > partUnitIdx++, absPartIdx += qNumParts) > - { > - if (g_zscanToPelX[absPartIdx] < xmax && > g_zscanToPelY[absPartIdx] < ymax) > - encodeCU(cu, absPartIdx, depth + 1, bInsidePicture, > bEncodeDQP); > - } > - > - return; > + CU *childCU = cu->m_CULocalData + cuData->childIdx + > partUnitIdx; > + int cuPresentFlagChild = !(childCU->flags & CU::PRESENT); > + if (!cuPresentFlagChild) > + encodeCU(cu, absPartIdx, depth + 1, bEncodeDQP, childCU); > } > + return; > } > > // We need to split, so don't try these modes. > - if (bInsidePicture && depth < g_maxCUDepth) > + if (cuSplitFlag) > codeSplitFlag(cu, absPartIdx, depth); > > if (depth < cu->getDepth(absPartIdx) && depth < g_maxCUDepth) > @@ -527,7 +521,10 @@ > uint32_t qNumParts = (pic->getNumPartInCU() >> (depth << 1)) >> 2; > > for (uint32_t partUnitIdx = 0; partUnitIdx < 4; partUnitIdx++, > absPartIdx += qNumParts) > - encodeCU(cu, absPartIdx, depth + 1, bInsidePicture, > bEncodeDQP); > + { > + CU *childCU = cu->m_CULocalData + cuData->childIdx + > partUnitIdx; > + encodeCU(cu, absPartIdx, depth + 1, bEncodeDQP, childCU); > + } > return; > } > > diff -r 7e29b10982d2 -r 50505472d3e3 source/encoder/entropy.h > --- a/source/encoder/entropy.h Thu Sep 11 19:24:28 2014 +0530 > +++ b/source/encoder/entropy.h Tue Sep 16 09:37:09 2014 +0530 > @@ -148,7 +148,7 @@ > void codeShortTermRefPicSet(RPS* rps); > void finishSlice() { encodeBinTrm(1); finish(); > dynamic_cast<Bitstream*>(m_bitIf)->writeByteAlignment(); } > > - void encodeCTU(TComDataCU* cu); > + void encodeCTU(TComDataCU* cu, CU *cuData); > void codeSaoOffset(SaoLcuParam* saoLcuParam, uint32_t compIdx); > void codeSaoUnitInterleaving(int compIdx, bool saoFlag, int rx, int > ry, SaoLcuParam* saoLcuParam, int cuAddrInSlice, int cuAddrUpInSlice, int > allowMergeLeft, int allowMergeUp); > void codeSaoMerge(uint32_t code) { encodeBin(code, > m_contextState[OFF_SAO_MERGE_FLAG_CTX]); } > @@ -193,7 +193,7 @@ > void encodeBinsEP(uint32_t binValues, int numBins); > void encodeBinTrm(uint32_t binValue); > > - void encodeCU(TComDataCU* cu, uint32_t absPartIdx, uint32_t depth, > bool bInsidePicture, bool& bEncodeDQP); > + void encodeCU(TComDataCU* cu, uint32_t absPartIdx, uint32_t depth, > bool& bEncodeDQP, CU *cuData); > void finishCU(TComDataCU* cu, uint32_t absPartIdx, uint32_t depth); > > void writeOut(); > diff -r 7e29b10982d2 -r 50505472d3e3 source/encoder/frameencoder.cpp > --- a/source/encoder/frameencoder.cpp Thu Sep 11 19:24:28 2014 +0530 > +++ b/source/encoder/frameencoder.cpp Tue Sep 16 09:37:09 2014 +0530 > @@ -470,8 +470,9 @@ > } > } > > + m_tld.cuCoder.loadCTUData(cu); > // final coding (bitstream generation) for this CU > - m_entropyCoder.encodeCTU(cu); > + m_entropyCoder.encodeCTU(cu, cu->m_CULocalData); > > if (m_param->bEnableWavefront) > { > @@ -689,12 +690,13 @@ > // load current best state from go-on entropy coder > curRow.rdEntropyCoders[0][CI_CURR_BEST].load(rowCoder); > > + tld.cuCoder.loadCTUData(cu); > tld.cuCoder.m_quant.setQPforQuant(cu); > tld.cuCoder.compressCU(cu); // Does all the CU analysis > > /* advance top-level row coder to include the context of this CTU. > * if SAO is disabled, rowCoder writes the final CTU bitstream */ > - rowCoder.encodeCTU(cu); > + rowCoder.encodeCTU(cu, cu->m_CULocalData); > > if (m_param->bEnableWavefront && col == 1) > // Save CABAC state for next row > _______________________________________________ > 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