On Tue, Nov 12, 2013 at 8:02 AM, Steve Borho <[email protected]> wrote:
> > > > On Mon, Nov 11, 2013 at 4:16 AM, <[email protected]>wrote: > >> # HG changeset patch >> # User Deepthi Devaki <[email protected]> >> # Date 1384164960 -19800 >> # Node ID c4fea7f56081b96877cc01aae0cb3bcd47169bb6 >> # Parent 8ca334701a92f895f0750c80f638189ce0d3cf97 >> no-rdo: cleanups. Remove unnecessary memsets, rearrange computations. >> > > Queued. > > My only problem with this patch is it's limited scope. Ideally this type > of cleanup would be done for all of the analysis functions in compress.cpp > and TEncSearch.cpp, etc. > Yes. There are many places where these kind of set/init/clear functions are called. Especially the following functions need to set only value of one part which will be used. 1. set*subparts() 2. TComCUMVfield - setAll*() > > >> >> diff -r 8ca334701a92 -r c4fea7f56081 source/Lib/TLibEncoder/TEncSearch.cpp >> --- a/source/Lib/TLibEncoder/TEncSearch.cpp Mon Nov 11 14:34:27 2013 >> +0530 >> +++ b/source/Lib/TLibEncoder/TEncSearch.cpp Mon Nov 11 15:46:00 2013 >> +0530 >> @@ -1610,7 +1610,7 @@ >> // Filtered and Unfiltered refAbove and refLeft pointing >> to above and left. >> above = aboveScale; >> left = leftScale; >> - aboveFiltered = aboveScale; >> + aboveFiltered = aboveScale; >> leftFiltered = leftScale; >> } >> >> @@ -2940,34 +2940,29 @@ >> if (zerocost < cost) >> { >> const uint32_t qpartnum = cu->getPic()->getNumPartInCU() >> >> (cu->getDepth(0) << 1); >> - ::memset(cu->getTransformIdx(), 0, qpartnum * sizeof(UChar)); >> ::memset(cu->getCbf(TEXT_LUMA), 0, qpartnum * sizeof(UChar)); >> ::memset(cu->getCbf(TEXT_CHROMA_U), 0, qpartnum * sizeof(UChar)); >> ::memset(cu->getCbf(TEXT_CHROMA_V), 0, qpartnum * sizeof(UChar)); >> - ::memset(cu->getCoeffY(), 0, width * height * sizeof(TCoeff)); >> - ::memset(cu->getCoeffCb(), 0, width * height * sizeof(TCoeff) >> >> 2); >> - ::memset(cu->getCoeffCr(), 0, width * height * sizeof(TCoeff) >> >> 2); >> - cu->setTransformSkipSubParts(0, 0, 0, 0, cu->getDepth(0)); >> if (cu->getMergeFlag(0) && cu->getPartitionSize(0) == SIZE_2Nx2N) >> { >> - cu->setSkipFlagSubParts(true, 0, cu->getDepth(0)); >> + cu->getSkipFlag()[0] = true; >> } >> bits = zerobits; >> - outBestResiYuv->clear(); >> generateRecon(cu, predYuv, outBestResiYuv, outReconYuv, true); >> + distortion = zerodistortion; >> } >> else >> { >> xSetResidualQTData(cu, 0, 0, outBestResiYuv, cu->getDepth(0), >> true); >> generateRecon(cu, predYuv, outBestResiYuv, outReconYuv, false); >> + >> + int part = partitionFromSizes(width, height); >> + distortion = primitives.sse_pp[part](fencYuv->getLumaAddr(), >> fencYuv->getStride(), outReconYuv->getLumaAddr(), outReconYuv->getStride()); >> + part = partitionFromSizes(width >> 1, height >> 1); >> + distortion += >> m_rdCost->scaleChromaDistCb(primitives.sse_pp[part](fencYuv->getCbAddr(), >> fencYuv->getCStride(), outReconYuv->getCbAddr(), >> outReconYuv->getCStride())); >> + distortion += >> m_rdCost->scaleChromaDistCr(primitives.sse_pp[part](fencYuv->getCrAddr(), >> fencYuv->getCStride(), outReconYuv->getCrAddr(), >> outReconYuv->getCStride())); >> } >> >> - int part = partitionFromSizes(width, height); >> - distortion = primitives.sse_pp[part](fencYuv->getLumaAddr(), >> fencYuv->getStride(), outReconYuv->getLumaAddr(), outReconYuv->getStride()); >> - part = partitionFromSizes(width >> 1, height >> 1); >> - distortion += >> m_rdCost->scaleChromaDistCb(primitives.sse_pp[part](fencYuv->getCbAddr(), >> fencYuv->getCStride(), outReconYuv->getCbAddr(), >> outReconYuv->getCStride())); >> - distortion += >> m_rdCost->scaleChromaDistCr(primitives.sse_pp[part](fencYuv->getCrAddr(), >> fencYuv->getCStride(), outReconYuv->getCrAddr(), >> outReconYuv->getCStride())); >> - >> cu->m_totalBits = bits; >> cu->m_totalDistortion = distortion; >> cu->m_totalCost = m_rdCost->calcRdCost(distortion, bits); >> @@ -2975,25 +2970,13 @@ >> >> uint32_t TEncSearch::estimateZerobits(TComDataCU* cu) >> { >> - if (cu->isIntra(0)) >> - { >> - return 0; >> - } >> - >> uint32_t zeroResiBits = 0; >> >> - uint32_t width = cu->getWidth(0); >> - uint32_t height = cu->getHeight(0); >> - >> const uint32_t qpartnum = cu->getPic()->getNumPartInCU() >> >> (cu->getDepth(0) << 1); >> - ::memset(cu->getTransformIdx(), 0, qpartnum * sizeof(UChar)); >> + >> ::memset(cu->getCbf(TEXT_LUMA), 0, qpartnum * sizeof(UChar)); >> ::memset(cu->getCbf(TEXT_CHROMA_U), 0, qpartnum * sizeof(UChar)); >> ::memset(cu->getCbf(TEXT_CHROMA_V), 0, qpartnum * sizeof(UChar)); >> - ::memset(cu->getCoeffY(), 0, width * height * sizeof(TCoeff)); >> - ::memset(cu->getCoeffCb(), 0, width * height * sizeof(TCoeff) >> 2); >> - ::memset(cu->getCoeffCr(), 0, width * height * sizeof(TCoeff) >> 2); >> - cu->setTransformSkipSubParts(0, 0, 0, 0, cu->getDepth(0)); >> >> >> m_rdGoOnSbacCoder->load(m_rdSbacCoders[cu->getDepth(0)][CI_CURR_BEST]); >> zeroResiBits = xSymbolBitsInter(cu); >> @@ -3035,11 +3018,6 @@ >> >> void TEncSearch::estimateBitsDist(TComDataCU* cu, TShortYUV* resiYuv, >> uint32_t& bits, uint32_t& distortion, bool curUseRDOQ) >> { >> - if (cu->isIntra(0)) >> - { >> - return; >> - } >> - >> bits = 0; >> distortion = 0; >> uint64_t cost = 0; >> _______________________________________________ >> x265-devel mailing list >> [email protected] >> https://mailman.videolan.org/listinfo/x265-devel >> > > > > -- > Steve Borho > > _______________________________________________ > x265-devel mailing list > [email protected] > https://mailman.videolan.org/listinfo/x265-devel > >
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
