# HG changeset patch # User Santhoshini Sekar <santhosh...@multicorewareinc.com> # Date 1410848612 -19800 # Tue Sep 16 11:53:32 2014 +0530 # Node ID 74b5192133a548c492b8b2cb34dde8242107900e # Parent 7e29b10982d2eb7fd79f581d99996f04184522ba analysis: add CU specific details to encodeCU()
diff -r 7e29b10982d2 -r 74b5192133a5 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 11:53:32 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 74b5192133a5 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 11:53:32 2014 +0530 @@ -484,11 +484,11 @@ void Entropy::encodeCTU(TComDataCU* cu) { bool bEncodeDQP = cu->m_slice->m_pps->bUseDQP; - encodeCU(cu, 0, 0, false, bEncodeDQP); + encodeCU(cu, 0, 0, bEncodeDQP, cu->m_CULocalData ); } /* 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 74b5192133a5 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 11:53:32 2014 +0530 @@ -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 74b5192133a5 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 11:53:32 2014 +0530 @@ -470,6 +470,7 @@ } } + m_tld.cuCoder.loadCTUData(cu); // final coding (bitstream generation) for this CU m_entropyCoder.encodeCTU(cu); @@ -689,6 +690,7 @@ // 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 _______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel