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