yes I can make that a member of Analysis I will make the change and send the updated patch
On Mon, Jun 13, 2016 at 12:28 PM, Deepthi Nandakumar < [email protected]> wrote: > Kavitha, > > Is there a need to introduce another global variable - can't we just keep > a local one here, or one in Analysis? > > Deepthi > > On Thu, Jun 9, 2016 at 12:07 PM, <[email protected]> wrote: > >> # HG changeset patch >> # User Kavitha Sampath <[email protected]> >> # Date 1463588688 25200 >> # Wed May 18 09:24:48 2016 -0700 >> # Node ID 4baa78c17dca00c3d2f8a1c4d5e0ae87d7463f05 >> # Parent 0af296185f7ae3e05493ecf164046ddfec085bb3 >> rd: determine CU complexity to skip analysis of higher depths >> >> Complexity check is performed for RD level 2 of 4K videos >> >> diff -r 0af296185f7a -r 4baa78c17dca source/common/constants.cpp >> --- a/source/common/constants.cpp Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/common/constants.cpp Wed May 18 09:24:48 2016 -0700 >> @@ -161,6 +161,7 @@ >> 65535 >> }; >> >> +bool g_is4k = false; >> int g_ctuSizeConfigured = 0; >> uint32_t g_maxLog2CUSize = MAX_LOG2_CU_SIZE; >> uint32_t g_maxCUSize = MAX_CU_SIZE; >> diff -r 0af296185f7a -r 4baa78c17dca source/common/constants.h >> --- a/source/common/constants.h Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/common/constants.h Wed May 18 09:24:48 2016 -0700 >> @@ -31,6 +31,7 @@ >> // private namespace >> >> extern int g_ctuSizeConfigured; >> +extern bool g_is4k; >> >> void initZscanToRaster(uint32_t maxFullDepth, uint32_t depth, uint32_t >> startVal, uint32_t*& curIdx); >> void initRasterToZscan(uint32_t maxFullDepth); >> diff -r 0af296185f7a -r 4baa78c17dca source/common/param.cpp >> --- a/source/common/param.cpp Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/common/param.cpp Wed May 18 09:24:48 2016 -0700 >> @@ -1265,6 +1265,9 @@ >> initZscanToRaster(g_unitSizeDepth, 1, 0, tmp); >> initRasterToZscan(g_unitSizeDepth); >> } >> + if (param->sourceWidth >= 3840) >> + g_is4k = true; >> + >> return 0; >> } >> >> diff -r 0af296185f7a -r 4baa78c17dca source/encoder/analysis.cpp >> --- a/source/encoder/analysis.cpp Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/encoder/analysis.cpp Wed May 18 09:24:48 2016 -0700 >> @@ -944,8 +944,13 @@ >> if (md.bestMode && m_param->bEnableRecursionSkip) >> { >> skipRecursion = md.bestMode->cu.isSkipped(0); >> - if (mightSplit && depth && depth >= minDepth && !skipRecursion) >> - skipRecursion = recursionDepthCheck(parentCTU, cuGeom, >> *md.bestMode); >> + if (mightSplit && depth >= minDepth && !skipRecursion) >> + { >> + if (depth) >> + skipRecursion = recursionDepthCheck(parentCTU, cuGeom, >> *md.bestMode); >> + if (g_is4k && !skipRecursion && m_param->rdLevel == 2 && >> md.fencYuv.m_size != MAX_CU_SIZE) >> + skipRecursion = complexityCheckCU(*md.bestMode); >> + } >> } >> >> /* Step 2. Evaluate each of the 4 split sub-blocks in series */ >> @@ -2593,6 +2598,30 @@ >> return false; >> } >> >> +bool Analysis::complexityCheckCU(const Mode& bestMode) >> +{ >> + uint32_t mean = 0; >> + uint32_t homo = 0; >> + uint32_t cuSize = bestMode.fencYuv->m_size; >> + for (uint32_t y = 0; y < cuSize; y++) { >> + for (uint32_t x = 0; x < cuSize; x++) { >> + mean += (bestMode.fencYuv->m_buf[0][y * cuSize + x]); >> + } >> + } >> + mean = mean / (cuSize * cuSize); >> + for (uint32_t y = 0 ; y < cuSize; y++){ >> + for (uint32_t x = 0 ; x < cuSize; x++){ >> + homo += abs(int(bestMode.fencYuv->m_buf[0][y * cuSize + x] - >> mean)); >> + } >> + } >> + homo = homo / (cuSize * cuSize); >> + >> + if (homo < (.1 * mean)) >> + return true; >> + >> + return false; >> +} >> + >> int Analysis::calculateQpforCuSize(const CUData& ctu, const CUGeom& >> cuGeom, double baseQp) >> { >> FrameData& curEncData = *m_frame->m_encData; >> diff -r 0af296185f7a -r 4baa78c17dca source/encoder/analysis.h >> --- a/source/encoder/analysis.h Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/encoder/analysis.h Wed May 18 09:24:48 2016 -0700 >> @@ -160,6 +160,7 @@ >> /* work-avoidance heuristics for RD levels < 5 */ >> uint32_t topSkipMinDepth(const CUData& parentCTU, const CUGeom& >> cuGeom); >> bool recursionDepthCheck(const CUData& parentCTU, const CUGeom& >> cuGeom, const Mode& bestMode); >> + bool complexityCheckCU(const Mode& bestMode); >> >> /* generate residual and recon pixels for an entire CTU recursively >> (RD0) */ >> void encodeResidue(const CUData& parentCTU, const CUGeom& cuGeom); >> _______________________________________________ >> x265-devel mailing list >> [email protected] >> https://mailman.videolan.org/listinfo/x265-devel >> > > > > -- > Deepthi Nandakumar > Engineering Manager, x265 > Multicoreware, Inc > > _______________________________________________ > x265-devel mailing list > [email protected] > https://mailman.videolan.org/listinfo/x265-devel > > -- Regards, Kavitha
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
