On Fri, Nov 29, 2019 at 10:06 PM Pooja Venkatesan < po...@multicorewareinc.com> wrote:
> # HG changeset patch > # User Pooja Venkatesan <po...@multicorewareinc.com> > # Date 1568196486 -19800 > # Wed Sep 11 15:38:06 2019 +0530 > # Node ID c31884e780444d00ee7a25ccbb32a9b9fd52f47a > # Parent 4a29e0c5bfaf30aaed2c5224bcba1f464d68de83 > Add option hme-range to modify search range for HME levels L0, L1 and L2. > > diff -r 4a29e0c5bfaf -r c31884e78044 doc/reST/cli.rst > --- a/doc/reST/cli.rst Fri Nov 08 15:30:50 2019 +0530 > +++ b/doc/reST/cli.rst Wed Sep 11 15:38:06 2019 +0530 > @@ -1290,6 +1290,11 @@ > which will apply to all levels. Default is hex,umh,umh for > levels 0,1,2 respectively. > > +.. option:: --hme-range <integer>,<integer>,<integer> > + > + Search range for HME level 0, 1 and 2. > + Default search range is 16,32,48 for level 0,1,2 respectively. > + > Please specify the search range allowed at each level. > Spatial/intra options > ===================== > > diff -r 4a29e0c5bfaf -r c31884e78044 source/CMakeLists.txt > --- a/source/CMakeLists.txt Fri Nov 08 15:30:50 2019 +0530 > +++ b/source/CMakeLists.txt Wed Sep 11 15:38:06 2019 +0530 > @@ -29,7 +29,7 @@ > option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF) > mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD) > # X265_BUILD must be incremented each time the public API is changed > -set(X265_BUILD 183) > +set(X265_BUILD 184) > configure_file("${PROJECT_SOURCE_DIR}/x265.def.in" > "${PROJECT_BINARY_DIR}/x265.def") > configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in" > diff -r 4a29e0c5bfaf -r c31884e78044 source/common/param.cpp > --- a/source/common/param.cpp Fri Nov 08 15:30:50 2019 +0530 > +++ b/source/common/param.cpp Wed Sep 11 15:38:06 2019 +0530 > @@ -210,6 +210,9 @@ > param->bEnableHME = 0; > param->hmeSearchMethod[0] = X265_HEX_SEARCH; > param->hmeSearchMethod[1] = param->hmeSearchMethod[2] = > X265_UMH_SEARCH; > + param->hmeRange[0] = 16; > + param->hmeRange[1] = 32; > + param->hmeRange[2] = 48; > param->bSourceReferenceEstimation = 0; > param->limitTU = 0; > param->dynamicRd = 0; > @@ -1344,6 +1347,11 @@ > } > p->bEnableHME = true; > } > + OPT("hme-range") > + { > + sscanf(value, "%d,%d,%d", &p->hmeRange[0], &p->hmeRange[1], > &p->hmeRange[2]); > + p->bEnableHME = true; > + } > else > return X265_PARAM_BAD_NAME; > } > @@ -1734,6 +1742,9 @@ > "Invalid scenecut Window duration. Value must be between 0 and > 1000(inclusive)"); > CHECK(param->maxQpDelta < 0 || param->maxQpDelta > 10, > "Invalid maxQpDelta value. Value must be between 0 and 10 > (inclusive)"); > + for(int level=0; level < 3; level++) > Indentation issue here. > + CHECK(param->hmeRange[level] < 0 || param->hmeRange[level] >= > 32768, > + "Search Range for HME levels must be between 0 and 32768"); > #if !X86_64 > CHECK(param->searchMethod == X265_SEA && (param->sourceWidth > 840 || > param->sourceHeight > 480), > "SEA motion search does not support resolutions greater than 480p > in 32 bit build"); > @@ -2018,8 +2029,10 @@ > if(p->bEnableFrameDuplication) > s += sprintf(s, " dup-threshold=%d", p->dupThreshold); > BOOL(p->bEnableHME, "hme"); > - if (p->bEnableHME) > + if (p->bEnableHME){ > Indentation issue. > s += sprintf(s, " Level 0,1,2=%d,%d,%d", p->hmeSearchMethod[0], > p->hmeSearchMethod[1], p->hmeSearchMethod[2]); > + s += sprintf(s, " merange L0,L1,L2=%d,%d,%d", p->hmeRange[0], > p->hmeRange[1], p->hmeRange[2]); > + } > BOOL(p->bEnableWeightedPred, "weightp"); > BOOL(p->bEnableWeightedBiPred, "weightb"); > BOOL(p->bSourceReferenceEstimation, "analyze-src-pics"); > @@ -2320,7 +2333,10 @@ > if (src->bEnableHME) > { > for (int level = 0; level < 3; level++) > + { > dst->hmeSearchMethod[level] = src->hmeSearchMethod[level]; > + dst->hmeRange[level] = src->hmeRange[level]; > + } > } > dst->bEnableWeightedBiPred = src->bEnableWeightedBiPred; > dst->bEnableWeightedPred = src->bEnableWeightedPred; > diff -r 4a29e0c5bfaf -r c31884e78044 source/encoder/encoder.cpp > --- a/source/encoder/encoder.cpp Fri Nov 08 15:30:50 2019 +0530 > +++ b/source/encoder/encoder.cpp Wed Sep 11 15:38:06 2019 +0530 > @@ -4077,11 +4077,12 @@ > x265_log(p, X265_LOG_WARNING, "Source height < 540p is too > low for HME. Disabling HME.\n"); > p->bEnableHME = 0; > } > - if (m_param->bEnableHME && m_param->searchMethod != > m_param->hmeSearchMethod[2]) > - { > - m_param->searchMethod = m_param->hmeSearchMethod[2]; > - } > - } > + } > + > + if (m_param->bEnableHME && m_param->searchMethod != > m_param->hmeSearchMethod[2]) > + m_param->searchMethod = m_param->hmeSearchMethod[2]; > + if (m_param->bEnableHME && m_param->searchRange != > m_param->hmeRange[2]) > + m_param->searchRange = m_param->hmeRange[2]; > Could avoid redundant checks on m_param->bEnableHME. > if (p->bHistBasedSceneCut && !p->edgeTransitionThreshold) > { > diff -r 4a29e0c5bfaf -r c31884e78044 source/encoder/slicetype.cpp > --- a/source/encoder/slicetype.cpp Fri Nov 08 15:30:50 2019 +0530 > +++ b/source/encoder/slicetype.cpp Wed Sep 11 15:38:06 2019 +0530 > @@ -3240,12 +3240,13 @@ > } > } > > + int searchRange = m_lookahead.m_param->bEnableHME ? (hme ? > m_lookahead.m_param->hmeRange[0] : m_lookahead.m_param->hmeRange[1]) : > s_merange; > /* ME will never return a cost larger than the cost @MVP, so we > do not > * have to check that ME cost is more than the estimated merge > cost */ > if(!hme) > - fencCost = tld.me.motionEstimate(fref, mvmin, mvmax, mvp, 0, > NULL, s_merange, *fencMV, m_lookahead.m_param->maxSlices); > + fencCost = tld.me.motionEstimate(fref, mvmin, mvmax, mvp, 0, > NULL, searchRange, *fencMV, m_lookahead.m_param->maxSlices); > else > - fencCost = tld.me.motionEstimate(fref, mvmin, mvmax, mvp, 0, > NULL, s_merange, *fencMV, m_lookahead.m_param->maxSlices, > fref->lowerResPlane[0]); > + fencCost = tld.me.motionEstimate(fref, mvmin, mvmax, mvp, 0, > NULL, searchRange, *fencMV, m_lookahead.m_param->maxSlices, > fref->lowerResPlane[0]); > if (skipCost < 64 && skipCost < fencCost && bBidir) > { > fencCost = skipCost; > diff -r 4a29e0c5bfaf -r c31884e78044 source/x265.h > --- a/source/x265.h Fri Nov 08 15:30:50 2019 +0530 > +++ b/source/x265.h Wed Sep 11 15:38:06 2019 +0530 > @@ -1856,6 +1856,9 @@ > > /* Enables histogram based scenecut detection algorithm to detect > scenecuts. Default disabled */ > int bHistBasedSceneCut; > + > + /* Enable HME search ranges for L0, L1 and L2 respectively. */ > + int hmeRange[3]; > } x265_param; > > /* x265_param_alloc: > diff -r 4a29e0c5bfaf -r c31884e78044 source/x265cli.h > --- a/source/x265cli.h Fri Nov 08 15:30:50 2019 +0530 > +++ b/source/x265cli.h Wed Sep 11 15:38:06 2019 +0530 > @@ -351,6 +351,7 @@ > #endif > { "cll", no_argument, NULL, 0 }, > { "no-cll", no_argument, NULL, 0 }, > + { "hme-range", required_argument, NULL, 0 }, > { 0, 0, 0, 0 }, > { 0, 0, 0, 0 }, > { 0, 0, 0, 0 }, > @@ -479,6 +480,7 @@ > H1(" --[no-]temporal-mvp Enable temporal MV predictors. > Default %s\n", OPT(param->bEnableTemporalMvp)); > H1(" --[no-]hme Enable Hierarchical Motion > Estimation. Default %s\n", OPT(param->bEnableHME)); > H1(" --hme-search <string> Motion search-method for HME > L0,L1 and L2. Default(L0,L1,L2) is %d,%d,%d\n", param->hmeSearchMethod[0], > param->hmeSearchMethod[1], param->hmeSearchMethod[2]); > + H1(" --hme-range <int>,<int>,<int> Motion search-range for HME > L0,L1 and L2. Default(L0,L1,L2) is %d,%d,%d\n", param->hmeRange[0], > param->hmeRange[1], param->hmeRange[2]); > H0("\nSpatial / intra options:\n"); > H0(" --[no-]strong-intra-smoothing Enable strong intra smoothing > for 32x32 blocks. Default %s\n", OPT(param->bEnableStrongIntraSmoothing)); > H0(" --[no-]constrained-intra Constrained intra prediction > (use only intra coded reference pixels) Default %s\n", > OPT(param->bEnableConstrainedIntra)); > _______________________________________________ > x265-devel mailing list > x265-devel@videolan.org > https://mailman.videolan.org/listinfo/x265-devel > -- Regards, *Aruna Matheswaran,* Video Codec Engineer, Media & AI analytics BU,
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel