[x265] [PATCH] Add option hme-range to modify search range for HME levels L0, L1 and L2
Aruna Matheswaran
aruna at multicorewareinc.com
Sun Dec 1 18:22:55 CET 2019
On Fri, Nov 29, 2019 at 10:06 PM Pooja Venkatesan <
pooja at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Pooja Venkatesan <pooja at 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 at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
--
Regards,
*Aruna Matheswaran,*
Video Codec Engineer,
Media & AI analytics BU,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20191201/23fe4316/attachment-0001.html>
More information about the x265-devel
mailing list