On Fri, Sep 12, 2014 at 6:05 PM, <santhosh...@multicorewareinc.com> wrote:
> # HG changeset patch > # User Santhoshini Sekar <santhosh...@multicorewareinc.com> > # Date 1410525310 -19800 > # Fri Sep 12 18:05:10 2014 +0530 > # Node ID bf4ebe5df0cab013e4462597b55bd505b2a6a71a > # Parent 7e29b10982d2eb7fd79f581d99996f04184522ba > analysis: add CU specific details to encodeCU() > > diff -r 7e29b10982d2 -r bf4ebe5df0ca source/encoder/analysis.cpp > --- a/source/encoder/analysis.cpp Thu Sep 11 19:24:28 2014 +0530 > +++ b/source/encoder/analysis.cpp Fri Sep 12 18:05:10 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 bf4ebe5df0ca source/encoder/entropy.cpp > --- a/source/encoder/entropy.cpp Thu Sep 11 19:24:28 2014 +0530 > +++ b/source/encoder/entropy.cpp Fri Sep 12 18:05:10 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,26 @@ > if (depth <= slice->m_pps->maxCuDQPDepth && slice->m_pps->bUseDQP) > bEncodeDQP = true; > > - if (!bInsidePicture) > + int cu_split_flag = !(cuData->flags & CU::LEAF); > + int cu_unsplit_flag = !(cuData->flags & CU::SPLIT_MANDATORY); > + > + uint32_t xmax = slice->m_sps->picWidthInLumaSamples - > cu->getCUPelX(); > + uint32_t ymax = slice->m_sps->picHeightInLumaSamples - > cu->getCUPelY(); > + > + if (!cu_unsplit_flag) > { > - 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; > + if (g_zscanToPelX[absPartIdx] < xmax && > g_zscanToPelY[absPartIdx] < ymax) > Most of the patch looks correct, but can't the above if-check also replaced by one of the childCU flags? > + encodeCU(cu, absPartIdx, depth + 1, bEncodeDQP, childCU); > } > + return; > } > > // We need to split, so don't try these modes. > - if (bInsidePicture && depth < g_maxCUDepth) > + if (cu_split_flag) > codeSplitFlag(cu, absPartIdx, depth); > > if (depth < cu->getDepth(absPartIdx) && depth < g_maxCUDepth) > @@ -527,7 +523,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 bf4ebe5df0ca source/encoder/entropy.h > --- a/source/encoder/entropy.h Thu Sep 11 19:24:28 2014 +0530 > +++ b/source/encoder/entropy.h Fri Sep 12 18:05:10 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 bf4ebe5df0ca source/encoder/frameencoder.cpp > --- a/source/encoder/frameencoder.cpp Thu Sep 11 19:24:28 2014 +0530 > +++ b/source/encoder/frameencoder.cpp Fri Sep 12 18:05:10 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