<div dir="ltr">:) hmm.<div>Let me try to find work around same.</div><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Aug 5, 2016 at 8:48 PM,  <span dir="ltr"><<a href="mailto:x265-devel-request@videolan.org" target="_blank">x265-devel-request@videolan.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Send x265-devel mailing list submissions to<br>
        <a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/<wbr>listinfo/x265-devel</a><br>
or, via email, send a message with subject or body 'help' to<br>
        <a href="mailto:x265-devel-request@videolan.org">x265-devel-request@videolan.<wbr>org</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:x265-devel-owner@videolan.org">x265-devel-owner@videolan.org</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of x265-devel digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
   1. [PATCH] max num bmv parameterized (<a href="mailto:nvijay.anand@trispacetech.com">nvijay.anand@trispacetech.com</a><wbr>)<br>
   2. Re: [PATCH] max num bmv parameterized (chen)<br>
<br>
<br>
------------------------------<wbr>------------------------------<wbr>----------<br>
<br>
Message: 1<br>
Date: Fri, 05 Aug 2016 17:02:53 +0530<br>
From: <a href="mailto:nvijay.anand@trispacetech.com">nvijay.anand@trispacetech.com</a><br>
To: <a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
Cc: <a href="mailto:nvijay.anand@trispacetech.com">nvijay.anand@trispacetech.com</a><br>
Subject: [x265] [PATCH] max num bmv parameterized<br>
Message-ID: <f46e843a27cbaa4a1c79.<wbr>1470396773@vanand-PC><br>
Content-Type: text/plain; charset="us-ascii"<br>
<br>
# HG changeset patch<br>
# User N Vijay Anand <<a href="mailto:nvijay.anand@trispacetech.com">nvijay.anand@trispacetech.com</a><wbr>><br>
# Date 1470396737 -19800<br>
#      Fri Aug 05 17:02:17 2016 +0530<br>
# Node ID f46e843a27cbaa4a1c79f1a43d41a0<wbr>4d63f601c4<br>
# Parent  72f16a34946f5f03da875c67a75124<wbr>dfec1b4ecb<br>
max num bmv parameterized<br>
<br>
diff -r 72f16a34946f -r f46e843a27cb source/encoder/motion.cpp<br>
--- a/source/encoder/motion.cpp Sat Jul 30 09:48:59 2016 +0530<br>
+++ b/source/encoder/motion.cpp Fri Aug 05 17:02:17 2016 +0530<br>
@@ -100,17 +100,17 @@<br>
<br>
 }<br>
<br>
-#define MAX_NUM_BESTVECTORS     (4)<br>
+#define MAX_NUM_BESTVECTORS     (16)<br>
<br>
-inline void PushToBMVStack(MV  *bStack, MV & bv, int *bCostStack, int bcost)<br>
+inline void PushToBMVStack(MV  *bStack, MV & bv, int *bCostStack, int bcost, int maxNumBmv)<br>
 {<br>
-    for (int i=0; i<MAX_NUM_BESTVECTORS; i++)<br>
+    for (int i=0; i<maxNumBmv; i++)<br>
     {<br>
         if((bCostStack[i] == bcost) && (bv == bStack[i]))<br>
             break;<br>
-        if((bCostStack[i] > bcost) && (bv != bStack[i]))<br>
+        if((bCostStack[i] >= bcost) && (bv != bStack[i]))<br>
         {<br>
-            for (int j=MAX_NUM_BESTVECTORS-1; j>i; j--)<br>
+            for (int j=maxNumBmv-1; j>i; j--)<br>
             {<br>
                 bStack[j] = bStack[j-1];<br>
                 bCostStack[j] = bCostStack[j-1];<br>
@@ -247,7 +247,7 @@<br>
             bmv = tmv; \<br>
             bPointNr = point; \<br>
             bDistance = dist; \<br>
-            PushToBMVStack(bmvStack, tmv, bmvCostStack, cost); \<br>
+            PushToBMVStack(bmvStack, tmv, bmvCostStack, cost, maxNumBmv); \<br>
         } \<br>
     } while (0)<br>
<br>
@@ -257,7 +257,7 @@<br>
         int cost = sad(fenc, FENC_STRIDE, fref + (mx) + (my) * stride, stride); \<br>
         cost += mvcost(MV(mx, my) << 2); \<br>
         COPY2_IF_LT(bcost, cost, bmv, MV(mx, my)); \<br>
-        PushToBMVStack(bmvStack, MV(mx,my), bmvCostStack, cost); \<br>
+        PushToBMVStack(bmvStack, MV(mx,my), bmvCostStack, cost, maxNumBmv); \<br>
     } while (0)<br>
<br>
 #define COST_MV_X3_DIR(m0x, m0y, m1x, m1y, m2x, m2y, costs) \<br>
@@ -271,9 +271,9 @@<br>
         (costs)[0] += mvcost((bmv + MV(m0x, m0y)) << 2); \<br>
         (costs)[1] += mvcost((bmv + MV(m1x, m1y)) << 2); \<br>
         (costs)[2] += mvcost((bmv + MV(m2x, m2y)) << 2); \<br>
-        PushToBMVStack(bmvStack, bmv+MV(m0x,m0y), bmvCostStack, (costs)[0]); \<br>
-        PushToBMVStack(bmvStack, bmv+MV(m1x,m1y), bmvCostStack, (costs)[1]); \<br>
-        PushToBMVStack(bmvStack, bmv+MV(m2x,m2y), bmvCostStack, (costs)[2]); \<br>
+        PushToBMVStack(bmvStack, bmv+MV(m0x,m0y), bmvCostStack, (costs)[0], maxNumBmv); \<br>
+        PushToBMVStack(bmvStack, bmv+MV(m1x,m1y), bmvCostStack, (costs)[1], maxNumBmv); \<br>
+        PushToBMVStack(bmvStack, bmv+MV(m2x,m2y), bmvCostStack, (costs)[2], maxNumBmv); \<br>
     }<br>
<br>
 #define COST_MV_PT_DIST_X4(m0x, m0y, p0, d0, m1x, m1y, p1, d1, m2x, m2y, p2, d2, m3x, m3y, p3, d3) \<br>
@@ -289,13 +289,13 @@<br>
         (costs)[2] += mvcost(MV(m2x, m2y) << 2); \<br>
         (costs)[3] += mvcost(MV(m3x, m3y) << 2); \<br>
         COPY4_IF_LT(bcost, costs[0], bmv, MV(m0x, m0y), bPointNr, p0, bDistance, d0); \<br>
-        PushToBMVStack(bmvStack, MV(m0x,m0y), bmvCostStack, (costs)[0]); \<br>
+        PushToBMVStack(bmvStack, MV(m0x,m0y), bmvCostStack, (costs)[0], maxNumBmv); \<br>
         COPY4_IF_LT(bcost, costs[1], bmv, MV(m1x, m1y), bPointNr, p1, bDistance, d1); \<br>
-        PushToBMVStack(bmvStack, MV(m1x,m1y), bmvCostStack, (costs)[1]); \<br>
+        PushToBMVStack(bmvStack, MV(m1x,m1y), bmvCostStack, (costs)[1], maxNumBmv); \<br>
         COPY4_IF_LT(bcost, costs[2], bmv, MV(m2x, m2y), bPointNr, p2, bDistance, d2); \<br>
-        PushToBMVStack(bmvStack, MV(m2x,m2y), bmvCostStack, (costs)[2]); \<br>
+        PushToBMVStack(bmvStack, MV(m2x,m2y), bmvCostStack, (costs)[2], maxNumBmv); \<br>
         COPY4_IF_LT(bcost, costs[3], bmv, MV(m3x, m3y), bPointNr, p3, bDistance, d3); \<br>
-        PushToBMVStack(bmvStack, MV(m3x,m3y), bmvCostStack, (costs)[3]); \<br>
+        PushToBMVStack(bmvStack, MV(m3x,m3y), bmvCostStack, (costs)[3], maxNumBmv); \<br>
     }<br>
<br>
 #define COST_MV_X4(m0x, m0y, m1x, m1y, m2x, m2y, m3x, m3y) \<br>
@@ -312,13 +312,13 @@<br>
         costs[2] += mvcost((omv + MV(m2x, m2y)) << 2); \<br>
         costs[3] += mvcost((omv + MV(m3x, m3y)) << 2); \<br>
         COPY2_IF_LT(bcost, costs[0], bmv, omv + MV(m0x, m0y)); \<br>
-        PushToBMVStack(bmvStack, omv+MV(m0x,m0y), bmvCostStack, (costs)[0]); \<br>
+        PushToBMVStack(bmvStack, omv+MV(m0x,m0y), bmvCostStack, costs[0], maxNumBmv); \<br>
         COPY2_IF_LT(bcost, costs[1], bmv, omv + MV(m1x, m1y)); \<br>
-        PushToBMVStack(bmvStack, omv+MV(m1x,m1y), bmvCostStack, (costs)[1]); \<br>
+        PushToBMVStack(bmvStack, omv+MV(m1x,m1y), bmvCostStack, costs[1], maxNumBmv); \<br>
         COPY2_IF_LT(bcost, costs[2], bmv, omv + MV(m2x, m2y)); \<br>
-        PushToBMVStack(bmvStack, omv+MV(m2x,m2y), bmvCostStack, (costs)[2]); \<br>
+        PushToBMVStack(bmvStack, omv+MV(m2x,m2y), bmvCostStack, costs[2], maxNumBmv); \<br>
         COPY2_IF_LT(bcost, costs[3], bmv, omv + MV(m3x, m3y)); \<br>
-        PushToBMVStack(bmvStack, omv+MV(m3x,m3y), bmvCostStack, (costs)[3]); \<br>
+        PushToBMVStack(bmvStack, omv+MV(m3x,m3y), bmvCostStack, costs[3], maxNumBmv); \<br>
     }<br>
<br>
 #define COST_MV_X4_DIR(m0x, m0y, m1x, m1y, m2x, m2y, m3x, m3y, costs) \<br>
@@ -334,10 +334,10 @@<br>
         (costs)[1] += mvcost((bmv + MV(m1x, m1y)) << 2); \<br>
         (costs)[2] += mvcost((bmv + MV(m2x, m2y)) << 2); \<br>
         (costs)[3] += mvcost((bmv + MV(m3x, m3y)) << 2); \<br>
-        PushToBMVStack(bmvStack, bmv+MV(m0x,m0y), bmvCostStack, (costs)[0]); \<br>
-        PushToBMVStack(bmvStack, bmv+MV(m1x,m1y), bmvCostStack, (costs)[1]); \<br>
-        PushToBMVStack(bmvStack, bmv+MV(m2x,m2y), bmvCostStack, (costs)[2]); \<br>
-        PushToBMVStack(bmvStack, bmv+MV(m3x,m3y), bmvCostStack, (costs)[3]); \<br>
+        PushToBMVStack(bmvStack, bmv+MV(m0x,m0y), bmvCostStack, (costs)[0], maxNumBmv); \<br>
+        PushToBMVStack(bmvStack, bmv+MV(m1x,m1y), bmvCostStack, (costs)[1], maxNumBmv); \<br>
+        PushToBMVStack(bmvStack, bmv+MV(m2x,m2y), bmvCostStack, (costs)[2], maxNumBmv); \<br>
+        PushToBMVStack(bmvStack, bmv+MV(m3x,m3y), bmvCostStack, (costs)[3], maxNumBmv); \<br>
     }<br>
<br>
 #define DIA1_ITER(mx, my) \<br>
@@ -379,6 +379,7 @@<br>
                                        int &            bcost,<br>
                                        MV              *bmvStack,<br>
                                        int             *bmvCostStack,<br>
+                                       int              maxNumBmv,<br>
                                        int &            bPointNr,<br>
                                        int &            bDistance,<br>
                                        int              earlyExitIters,<br>
@@ -657,9 +658,19 @@<br>
<br>
     /* re-measure full pel rounded MVP with SAD as search start point */<br>
     MV bmv = pmv.roundToFPel();<br>
-    MV bmvStack[4] = {bmv, bmv, bmv, bmv};<br>
-    int bmvCostStack[4] = {bprecost, 0x7fffffff, 0x7fffffff, 0x7fffffff};<br>
-    int bcost = bprecost;<br>
+    MV bmvStack[MAX_NUM_BESTVECTORS];<br>
+    int bmvCostStack[MAX_NUM_<wbr>BESTVECTORS];<br>
+    int bcost = bprecost;<br>
+    const int maxNumBmv = 1 << searchMethod;<br>
+<br>
+    bmvStack[0] = bmv;<br>
+    bmvCostStack[0] = bprecost;<br>
+    for (int i=1 ; i < maxNumBmv; i++)<br>
+    {<br>
+        bmvStack[i] = bmv;<br>
+        bmvCostStack[i] = 0x7fffffff;<br>
+    }<br>
+<br>
     if (pmv.isSubpel())<br>
     {<br>
         bcost = sad(fenc, FENC_STRIDE, fref + bmv.x + bmv.y * stride, stride) + mvcost(bmv << 2);<br>
@@ -934,7 +945,7 @@<br>
     do \<br>
     {  \<br>
         COPY2_IF_LT(bcost, costs[k], dir, x * 16 + (y & 15)); \<br>
-        PushToBMVStack(bmvStack, bmv+MV(x*i,y*i), bmvCostStack, costs[k]); \<br>
+        PushToBMVStack(bmvStack, omv+MV(x*i,y*i), bmvCostStack, costs[k], maxNumBmv); \<br>
     } while (0)<br>
<br>
                 SADS(0, +0, -4, +0, +4, -2, -3, +2, -3);<br>
@@ -996,7 +1007,7 @@<br>
         int bDistance = 0;<br>
<br>
         const int EarlyExitIters = 3;<br>
-        StarPatternSearch(ref, mvmin, mvmax, bmv, bcost, bmvStack, bmvCostStack, bPointNr, bDistance, EarlyExitIters, merange);<br>
+        StarPatternSearch(ref, mvmin, mvmax, bmv, bcost, bmvStack, bmvCostStack, maxNumBmv, bPointNr, bDistance, EarlyExitIters, merange);<br>
<br>
         if (bDistance == 1)<br>
         {<br>
@@ -1048,19 +1059,19 @@<br>
                                stride, costs);<br>
                         costs[0] += mvcost(tmv << 2);<br>
                         COPY2_IF_LT(bcost, costs[0], bmv, tmv);<br>
-                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[0]);<br>
+                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[0], maxNumBmv);<br>
                         tmv.x += RasterDistance;<br>
                         costs[1] += mvcost(tmv << 2);<br>
                         COPY2_IF_LT(bcost, costs[1], bmv, tmv);<br>
-                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[1]);<br>
+                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[1], maxNumBmv);<br>
                         tmv.x += RasterDistance;<br>
                         costs[2] += mvcost(tmv << 2);<br>
                         COPY2_IF_LT(bcost, costs[2], bmv, tmv);<br>
-                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[2]);<br>
+                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[2], maxNumBmv);<br>
                         tmv.x += RasterDistance;<br>
                         costs[3] += mvcost(tmv << 3);<br>
                         COPY2_IF_LT(bcost, costs[3], bmv, tmv);<br>
-                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[3]);<br>
+                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[3], maxNumBmv);<br>
                     }<br>
                     else<br>
                         COST_MV(tmv.x, tmv.y);<br>
@@ -1074,7 +1085,7 @@<br>
             bDistance = 0;<br>
             bPointNr = 0;<br>
             const int MaxIters = 32;<br>
-            StarPatternSearch(ref, mvmin, mvmax, bmv, bcost, bmvStack, bmvCostStack, bPointNr, bDistance, MaxIters, merange);<br>
+            StarPatternSearch(ref, mvmin, mvmax, bmv, bcost, bmvStack, bmvCostStack, maxNumBmv, bPointNr, bDistance, MaxIters, merange);<br>
<br>
             if (bDistance == 1)<br>
             {<br>
@@ -1124,19 +1135,19 @@<br>
                            stride, costs);<br>
                     costs[0] += mvcost(tmv << 2);<br>
                     COPY2_IF_LT(bcost, costs[0], bmv, tmv);<br>
-                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[0]);<br>
+                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[0], maxNumBmv);<br>
                     tmv.x++;<br>
                     costs[1] += mvcost(tmv << 2);<br>
                     COPY2_IF_LT(bcost, costs[1], bmv, tmv);<br>
-                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[1]);<br>
+                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[1], maxNumBmv);<br>
                     tmv.x++;<br>
                     costs[2] += mvcost(tmv << 2);<br>
                     COPY2_IF_LT(bcost, costs[2], bmv, tmv);<br>
-                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[2]);<br>
+                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[2], maxNumBmv);<br>
                     tmv.x++;<br>
                     costs[3] += mvcost(tmv << 2);<br>
                     COPY2_IF_LT(bcost, costs[3], bmv, tmv);<br>
-                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[3]);<br>
+                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[3], maxNumBmv);<br>
                 }<br>
                 else<br>
                     COST_MV(tmv.x, tmv.y);<br>
@@ -1155,12 +1166,12 @@<br>
     {<br>
         bmv = bestpre;<br>
         bcost = bprecost;<br>
-        PushToBMVStack(bmvStack, bmv, bmvCostStack, bcost);<br>
+        PushToBMVStack(bmvStack, bmv, bmvCostStack, bcost, maxNumBmv);<br>
     }<br>
     else<br>
     {<br>
         bmv = bmv.toQPel(); // promote search bmv to qpel<br>
-        for (int i=0; i<4; i++)<br>
+        for (int i=0; i<maxNumBmv; i++)<br>
         {<br>
           bmvStack[i] = bmvStack[i].toQPel();<br>
         }<br>
@@ -1177,7 +1188,7 @@<br>
     else if (ref->isLowres)<br>
     {<br>
         int bdir = 0;<br>
-        for (int nBmv=0; nBmv<MAX_NUM_BESTVECTORS; nBmv++)<br>
+        for (int nBmv=0; nBmv<maxNumBmv; nBmv++)<br>
         {<br>
           bdir = 0;<br>
           bmv =  bmvStack[nBmv];<br>
@@ -1208,7 +1219,7 @@<br>
<br>
         bmv = bmvStack[0];<br>
         bcost = bmvCostStack[0];<br>
-        for (int i=1; i<MAX_NUM_BESTVECTORS; i++)<br>
+        for (int i=1; i<maxNumBmv; i++)<br>
         {<br>
           if (bmvCostStack[i]<bcost)<br>
           {<br>
@@ -1221,9 +1232,10 @@<br>
     {<br>
         pixelcmp_t hpelcomp;<br>
<br>
-        for (int nBmv=0; nBmv<MAX_NUM_BESTVECTORS; nBmv++)<br>
+        for (int nBmv=0; nBmv<maxNumBmv; nBmv++)<br>
         {<br>
           bmv =  bmvStack[nBmv];<br>
+          bcost = bmvCostStack[nBmv];<br>
<br>
           if (wl.hpel_satd)<br>
           {<br>
@@ -1275,7 +1287,7 @@<br>
<br>
         bmv = bmvStack[0];<br>
         bcost = bmvCostStack[0];<br>
-        for (int i=1; i<MAX_NUM_BESTVECTORS; i++)<br>
+        for (int i=1; i<maxNumBmv; i++)<br>
         {<br>
           if (bmvCostStack[i]<bcost)<br>
           {<br>
@@ -1287,6 +1299,7 @@<br>
<br>
     x265_emms();<br>
     outQMv = bmv;<br>
+<br>
     return bcost;<br>
 }<br>
<br>
diff -r 72f16a34946f -r f46e843a27cb source/encoder/motion.h<br>
--- a/source/encoder/motion.h   Sat Jul 30 09:48:59 2016 +0530<br>
+++ b/source/encoder/motion.h   Fri Aug 05 17:02:17 2016 +0530<br>
@@ -103,6 +103,7 @@<br>
                                   int &            bcost,<br>
                                   MV              *bmvStack,<br>
                                   int             *bCostStack,<br>
+                                  int              maxNumBmv,<br>
                                   int &            bPointNr,<br>
                                   int &            bDistance,<br>
                                   int              earlyExitIters,<br>
<br>
<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Fri, 5 Aug 2016 23:17:41 +0800 (CST)<br>
From: chen  <<a href="mailto:chenm003@163.com">chenm003@163.com</a>><br>
To: "Development for x265" <<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a>><br>
Subject: Re: [x265] [PATCH] max num bmv parameterized<br>
Message-ID: <<a href="mailto:9faeab1.119e.1565b4805ef.Coremail.chenm003@163.com">9faeab1.119e.1565b4805ef.<wbr>Coremail.chenm003@163.com</a>><br>
Content-Type: text/plain; charset="gbk"<br>
<br>
<br>
At 2016-08-05 19:32:53,<a href="mailto:nvijay.anand@trispacetech.com">nvijay.anand@<wbr>trispacetech.com</a> wrote:<br>
># HG changeset patch<br>
># User N Vijay Anand <<a href="mailto:nvijay.anand@trispacetech.com">nvijay.anand@trispacetech.com</a><wbr>><br>
># Date 1470396737 -19800<br>
>#      Fri Aug 05 17:02:17 2016 +0530<br>
># Node ID f46e843a27cbaa4a1c79f1a43d41a0<wbr>4d63f601c4<br>
># Parent  72f16a34946f5f03da875c67a75124<wbr>dfec1b4ecb<br>
>max num bmv parameterized<br>
><br>
>diff -r 72f16a34946f -r f46e843a27cb source/encoder/motion.cpp<br>
>--- a/source/encoder/motion.cpp        Sat Jul 30 09:48:59 2016 +0530<br>
>+++ b/source/encoder/motion.cpp        Fri Aug 05 17:02:17 2016 +0530<br>
>@@ -100,17 +100,17 @@<br>
><br>
> }<br>
><br>
>-#define MAX_NUM_BESTVECTORS     (4)<br>
>+#define MAX_NUM_BESTVECTORS     (16)<br>
in you new patch, you never use this constant anymore. I guess Pradeep want to keep this because pass maxNumBmv throughput function need extra instructions to set up parameters registers.<br>
<br>
><br>
>-inline void PushToBMVStack(MV  *bStack, MV & bv, int *bCostStack, int bcost)<br>
>+inline void PushToBMVStack(MV  *bStack, MV & bv, int *bCostStack, int bcost, int maxNumBmv)<br>
> {<br>
>-    for (int i=0; i<MAX_NUM_BESTVECTORS; i++)<br>
>+    for (int i=0; i<maxNumBmv; i++)<br>
>     {<br>
>         if((bCostStack[i] == bcost) && (bv == bStack[i]))<br>
>             break;<br>
>-        if((bCostStack[i] > bcost) && (bv != bStack[i]))<br>
>+        if((bCostStack[i] >= bcost) && (bv != bStack[i]))<br>
>         {<br>
>-            for (int j=MAX_NUM_BESTVECTORS-1; j>i; j--)<br>
>+            for (int j=maxNumBmv-1; j>i; j--)<br>
>             {<br>
>                 bStack[j] = bStack[j-1];<br>
>                 bCostStack[j] = bCostStack[j-1];<br>
>@@ -247,7 +247,7 @@<br>
>             bmv = tmv; \<br>
>             bPointNr = point; \<br>
>             bDistance = dist; \<br>
>-            PushToBMVStack(bmvStack, tmv, bmvCostStack, cost); \<br>
>+            PushToBMVStack(bmvStack, tmv, bmvCostStack, cost, maxNumBmv); \<br>
>         } \<br>
>     } while (0)<br>
><br>
>@@ -257,7 +257,7 @@<br>
>         int cost = sad(fenc, FENC_STRIDE, fref + (mx) + (my) * stride, stride); \<br>
>         cost += mvcost(MV(mx, my) << 2); \<br>
>         COPY2_IF_LT(bcost, cost, bmv, MV(mx, my)); \<br>
>-        PushToBMVStack(bmvStack, MV(mx,my), bmvCostStack, cost); \<br>
>+        PushToBMVStack(bmvStack, MV(mx,my), bmvCostStack, cost, maxNumBmv); \<br>
>     } while (0)<br>
><br>
> #define COST_MV_X3_DIR(m0x, m0y, m1x, m1y, m2x, m2y, costs) \<br>
>@@ -271,9 +271,9 @@<br>
>         (costs)[0] += mvcost((bmv + MV(m0x, m0y)) << 2); \<br>
>         (costs)[1] += mvcost((bmv + MV(m1x, m1y)) << 2); \<br>
>         (costs)[2] += mvcost((bmv + MV(m2x, m2y)) << 2); \<br>
>-        PushToBMVStack(bmvStack, bmv+MV(m0x,m0y), bmvCostStack, (costs)[0]); \<br>
>-        PushToBMVStack(bmvStack, bmv+MV(m1x,m1y), bmvCostStack, (costs)[1]); \<br>
>-        PushToBMVStack(bmvStack, bmv+MV(m2x,m2y), bmvCostStack, (costs)[2]); \<br>
>+        PushToBMVStack(bmvStack, bmv+MV(m0x,m0y), bmvCostStack, (costs)[0], maxNumBmv); \<br>
>+        PushToBMVStack(bmvStack, bmv+MV(m1x,m1y), bmvCostStack, (costs)[1], maxNumBmv); \<br>
>+        PushToBMVStack(bmvStack, bmv+MV(m2x,m2y), bmvCostStack, (costs)[2], maxNumBmv); \<br>
>     }<br>
><br>
> #define COST_MV_PT_DIST_X4(m0x, m0y, p0, d0, m1x, m1y, p1, d1, m2x, m2y, p2, d2, m3x, m3y, p3, d3) \<br>
>@@ -289,13 +289,13 @@<br>
>         (costs)[2] += mvcost(MV(m2x, m2y) << 2); \<br>
>         (costs)[3] += mvcost(MV(m3x, m3y) << 2); \<br>
>         COPY4_IF_LT(bcost, costs[0], bmv, MV(m0x, m0y), bPointNr, p0, bDistance, d0); \<br>
>-        PushToBMVStack(bmvStack, MV(m0x,m0y), bmvCostStack, (costs)[0]); \<br>
>+        PushToBMVStack(bmvStack, MV(m0x,m0y), bmvCostStack, (costs)[0], maxNumBmv); \<br>
>         COPY4_IF_LT(bcost, costs[1], bmv, MV(m1x, m1y), bPointNr, p1, bDistance, d1); \<br>
>-        PushToBMVStack(bmvStack, MV(m1x,m1y), bmvCostStack, (costs)[1]); \<br>
>+        PushToBMVStack(bmvStack, MV(m1x,m1y), bmvCostStack, (costs)[1], maxNumBmv); \<br>
>         COPY4_IF_LT(bcost, costs[2], bmv, MV(m2x, m2y), bPointNr, p2, bDistance, d2); \<br>
>-        PushToBMVStack(bmvStack, MV(m2x,m2y), bmvCostStack, (costs)[2]); \<br>
>+        PushToBMVStack(bmvStack, MV(m2x,m2y), bmvCostStack, (costs)[2], maxNumBmv); \<br>
>         COPY4_IF_LT(bcost, costs[3], bmv, MV(m3x, m3y), bPointNr, p3, bDistance, d3); \<br>
>-        PushToBMVStack(bmvStack, MV(m3x,m3y), bmvCostStack, (costs)[3]); \<br>
>+        PushToBMVStack(bmvStack, MV(m3x,m3y), bmvCostStack, (costs)[3], maxNumBmv); \<br>
>     }<br>
><br>
> #define COST_MV_X4(m0x, m0y, m1x, m1y, m2x, m2y, m3x, m3y) \<br>
>@@ -312,13 +312,13 @@<br>
>         costs[2] += mvcost((omv + MV(m2x, m2y)) << 2); \<br>
>         costs[3] += mvcost((omv + MV(m3x, m3y)) << 2); \<br>
>         COPY2_IF_LT(bcost, costs[0], bmv, omv + MV(m0x, m0y)); \<br>
>-        PushToBMVStack(bmvStack, omv+MV(m0x,m0y), bmvCostStack, (costs)[0]); \<br>
>+        PushToBMVStack(bmvStack, omv+MV(m0x,m0y), bmvCostStack, costs[0], maxNumBmv); \<br>
>         COPY2_IF_LT(bcost, costs[1], bmv, omv + MV(m1x, m1y)); \<br>
>-        PushToBMVStack(bmvStack, omv+MV(m1x,m1y), bmvCostStack, (costs)[1]); \<br>
>+        PushToBMVStack(bmvStack, omv+MV(m1x,m1y), bmvCostStack, costs[1], maxNumBmv); \<br>
>         COPY2_IF_LT(bcost, costs[2], bmv, omv + MV(m2x, m2y)); \<br>
>-        PushToBMVStack(bmvStack, omv+MV(m2x,m2y), bmvCostStack, (costs)[2]); \<br>
>+        PushToBMVStack(bmvStack, omv+MV(m2x,m2y), bmvCostStack, costs[2], maxNumBmv); \<br>
>         COPY2_IF_LT(bcost, costs[3], bmv, omv + MV(m3x, m3y)); \<br>
>-        PushToBMVStack(bmvStack, omv+MV(m3x,m3y), bmvCostStack, (costs)[3]); \<br>
>+        PushToBMVStack(bmvStack, omv+MV(m3x,m3y), bmvCostStack, costs[3], maxNumBmv); \<br>
>     }<br>
><br>
> #define COST_MV_X4_DIR(m0x, m0y, m1x, m1y, m2x, m2y, m3x, m3y, costs) \<br>
>@@ -334,10 +334,10 @@<br>
>         (costs)[1] += mvcost((bmv + MV(m1x, m1y)) << 2); \<br>
>         (costs)[2] += mvcost((bmv + MV(m2x, m2y)) << 2); \<br>
>         (costs)[3] += mvcost((bmv + MV(m3x, m3y)) << 2); \<br>
>-        PushToBMVStack(bmvStack, bmv+MV(m0x,m0y), bmvCostStack, (costs)[0]); \<br>
>-        PushToBMVStack(bmvStack, bmv+MV(m1x,m1y), bmvCostStack, (costs)[1]); \<br>
>-        PushToBMVStack(bmvStack, bmv+MV(m2x,m2y), bmvCostStack, (costs)[2]); \<br>
>-        PushToBMVStack(bmvStack, bmv+MV(m3x,m3y), bmvCostStack, (costs)[3]); \<br>
>+        PushToBMVStack(bmvStack, bmv+MV(m0x,m0y), bmvCostStack, (costs)[0], maxNumBmv); \<br>
>+        PushToBMVStack(bmvStack, bmv+MV(m1x,m1y), bmvCostStack, (costs)[1], maxNumBmv); \<br>
>+        PushToBMVStack(bmvStack, bmv+MV(m2x,m2y), bmvCostStack, (costs)[2], maxNumBmv); \<br>
>+        PushToBMVStack(bmvStack, bmv+MV(m3x,m3y), bmvCostStack, (costs)[3], maxNumBmv); \<br>
>     }<br>
><br>
> #define DIA1_ITER(mx, my) \<br>
>@@ -379,6 +379,7 @@<br>
>                                        int &            bcost,<br>
>                                        MV              *bmvStack,<br>
>                                        int             *bmvCostStack,<br>
>+                                       int              maxNumBmv,<br>
>                                        int &            bPointNr,<br>
>                                        int &            bDistance,<br>
>                                        int              earlyExitIters,<br>
>@@ -657,9 +658,19 @@<br>
><br>
>     /* re-measure full pel rounded MVP with SAD as search start point */<br>
>     MV bmv = pmv.roundToFPel();<br>
>-    MV bmvStack[4] = {bmv, bmv, bmv, bmv};<br>
>-    int bmvCostStack[4] = {bprecost, 0x7fffffff, 0x7fffffff, 0x7fffffff};<br>
>-    int bcost = bprecost;<br>
>+    MV bmvStack[MAX_NUM_BESTVECTORS];<br>
>+    int bmvCostStack[MAX_NUM_<wbr>BESTVECTORS];<br>
>+    int bcost = bprecost;<br>
>+    const int maxNumBmv = 1 << searchMethod;<br>
>+<br>
>+    bmvStack[0] = bmv;<br>
>+    bmvCostStack[0] = bprecost;<br>
>+    for (int i=1 ; i < maxNumBmv; i++)<br>
>+    {<br>
>+        bmvStack[i] = bmv;<br>
>+        bmvCostStack[i] = 0x7fffffff;<br>
>+    }<br>
>+<br>
>     if (pmv.isSubpel())<br>
>     {<br>
>         bcost = sad(fenc, FENC_STRIDE, fref + bmv.x + bmv.y * stride, stride) + mvcost(bmv << 2);<br>
>@@ -934,7 +945,7 @@<br>
>     do \<br>
>     {  \<br>
>         COPY2_IF_LT(bcost, costs[k], dir, x * 16 + (y & 15)); \<br>
>-        PushToBMVStack(bmvStack, bmv+MV(x*i,y*i), bmvCostStack, costs[k]); \<br>
>+        PushToBMVStack(bmvStack, omv+MV(x*i,y*i), bmvCostStack, costs[k], maxNumBmv); \<br>
>     } while (0)<br>
><br>
>                 SADS(0, +0, -4, +0, +4, -2, -3, +2, -3);<br>
>@@ -996,7 +1007,7 @@<br>
>         int bDistance = 0;<br>
><br>
>         const int EarlyExitIters = 3;<br>
>-        StarPatternSearch(ref, mvmin, mvmax, bmv, bcost, bmvStack, bmvCostStack, bPointNr, bDistance, EarlyExitIters, merange);<br>
>+        StarPatternSearch(ref, mvmin, mvmax, bmv, bcost, bmvStack, bmvCostStack, maxNumBmv, bPointNr, bDistance, EarlyExitIters, merange);<br>
><br>
>         if (bDistance == 1)<br>
>         {<br>
>@@ -1048,19 +1059,19 @@<br>
>                                stride, costs);<br>
>                         costs[0] += mvcost(tmv << 2);<br>
>                         COPY2_IF_LT(bcost, costs[0], bmv, tmv);<br>
>-                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[0]);<br>
>+                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[0], maxNumBmv);<br>
>                         tmv.x += RasterDistance;<br>
>                         costs[1] += mvcost(tmv << 2);<br>
>                         COPY2_IF_LT(bcost, costs[1], bmv, tmv);<br>
>-                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[1]);<br>
>+                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[1], maxNumBmv);<br>
>                         tmv.x += RasterDistance;<br>
>                         costs[2] += mvcost(tmv << 2);<br>
>                         COPY2_IF_LT(bcost, costs[2], bmv, tmv);<br>
>-                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[2]);<br>
>+                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[2], maxNumBmv);<br>
>                         tmv.x += RasterDistance;<br>
>                         costs[3] += mvcost(tmv << 3);<br>
>                         COPY2_IF_LT(bcost, costs[3], bmv, tmv);<br>
>-                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[3]);<br>
>+                        PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[3], maxNumBmv);<br>
>                     }<br>
>                     else<br>
>                         COST_MV(tmv.x, tmv.y);<br>
>@@ -1074,7 +1085,7 @@<br>
>             bDistance = 0;<br>
>             bPointNr = 0;<br>
>             const int MaxIters = 32;<br>
>-            StarPatternSearch(ref, mvmin, mvmax, bmv, bcost, bmvStack, bmvCostStack, bPointNr, bDistance, MaxIters, merange);<br>
>+            StarPatternSearch(ref, mvmin, mvmax, bmv, bcost, bmvStack, bmvCostStack, maxNumBmv, bPointNr, bDistance, MaxIters, merange);<br>
><br>
>             if (bDistance == 1)<br>
>             {<br>
>@@ -1124,19 +1135,19 @@<br>
>                            stride, costs);<br>
>                     costs[0] += mvcost(tmv << 2);<br>
>                     COPY2_IF_LT(bcost, costs[0], bmv, tmv);<br>
>-                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[0]);<br>
>+                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[0], maxNumBmv);<br>
>                     tmv.x++;<br>
>                     costs[1] += mvcost(tmv << 2);<br>
>                     COPY2_IF_LT(bcost, costs[1], bmv, tmv);<br>
>-                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[1]);<br>
>+                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[1], maxNumBmv);<br>
>                     tmv.x++;<br>
>                     costs[2] += mvcost(tmv << 2);<br>
>                     COPY2_IF_LT(bcost, costs[2], bmv, tmv);<br>
>-                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[2]);<br>
>+                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[2], maxNumBmv);<br>
>                     tmv.x++;<br>
>                     costs[3] += mvcost(tmv << 2);<br>
>                     COPY2_IF_LT(bcost, costs[3], bmv, tmv);<br>
>-                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[3]);<br>
>+                    PushToBMVStack(bmvStack, tmv, bmvCostStack, (costs)[3], maxNumBmv);<br>
>                 }<br>
>                 else<br>
>                     COST_MV(tmv.x, tmv.y);<br>
>@@ -1155,12 +1166,12 @@<br>
>     {<br>
>         bmv = bestpre;<br>
>         bcost = bprecost;<br>
>-        PushToBMVStack(bmvStack, bmv, bmvCostStack, bcost);<br>
>+        PushToBMVStack(bmvStack, bmv, bmvCostStack, bcost, maxNumBmv);<br>
>     }<br>
>     else<br>
>     {<br>
>         bmv = bmv.toQPel(); // promote search bmv to qpel<br>
>-        for (int i=0; i<4; i++)<br>
>+        for (int i=0; i<maxNumBmv; i++)<br>
>         {<br>
>           bmvStack[i] = bmvStack[i].toQPel();<br>
>         }<br>
>@@ -1177,7 +1188,7 @@<br>
>     else if (ref->isLowres)<br>
>     {<br>
>         int bdir = 0;<br>
>-        for (int nBmv=0; nBmv<MAX_NUM_BESTVECTORS; nBmv++)<br>
>+        for (int nBmv=0; nBmv<maxNumBmv; nBmv++)<br>
>         {<br>
>           bdir = 0;<br>
>           bmv =  bmvStack[nBmv];<br>
>@@ -1208,7 +1219,7 @@<br>
><br>
>         bmv = bmvStack[0];<br>
>         bcost = bmvCostStack[0];<br>
>-        for (int i=1; i<MAX_NUM_BESTVECTORS; i++)<br>
>+        for (int i=1; i<maxNumBmv; i++)<br>
>         {<br>
>           if (bmvCostStack[i]<bcost)<br>
>           {<br>
>@@ -1221,9 +1232,10 @@<br>
>     {<br>
>         pixelcmp_t hpelcomp;<br>
><br>
>-        for (int nBmv=0; nBmv<MAX_NUM_BESTVECTORS; nBmv++)<br>
>+        for (int nBmv=0; nBmv<maxNumBmv; nBmv++)<br>
>         {<br>
>           bmv =  bmvStack[nBmv];<br>
>+          bcost = bmvCostStack[nBmv];<br>
><br>
>           if (wl.hpel_satd)<br>
>           {<br>
>@@ -1275,7 +1287,7 @@<br>
><br>
>         bmv = bmvStack[0];<br>
>         bcost = bmvCostStack[0];<br>
>-        for (int i=1; i<MAX_NUM_BESTVECTORS; i++)<br>
>+        for (int i=1; i<maxNumBmv; i++)<br>
>         {<br>
>           if (bmvCostStack[i]<bcost)<br>
>           {<br>
>@@ -1287,6 +1299,7 @@<br>
><br>
>     x265_emms();<br>
>     outQMv = bmv;<br>
>+<br>
>     return bcost;<br>
> }<br>
><br>
>diff -r 72f16a34946f -r f46e843a27cb source/encoder/motion.h<br>
>--- a/source/encoder/motion.h  Sat Jul 30 09:48:59 2016 +0530<br>
>+++ b/source/encoder/motion.h  Fri Aug 05 17:02:17 2016 +0530<br>
>@@ -103,6 +103,7 @@<br>
>                                   int &            bcost,<br>
>                                   MV              *bmvStack,<br>
>                                   int             *bCostStack,<br>
>+                                  int              maxNumBmv,<br>
>                                   int &            bPointNr,<br>
>                                   int &            bDistance,<br>
>                                   int              earlyExitIters,<br>
>_____________________________<wbr>__________________<br>
>x265-devel mailing list<br>
><a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
><a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/<wbr>listinfo/x265-devel</a><br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://mailman.videolan.org/pipermail/x265-devel/attachments/20160805/dc331651/attachment.html" rel="noreferrer" target="_blank">http://mailman.videolan.org/<wbr>pipermail/x265-devel/<wbr>attachments/20160805/dc331651/<wbr>attachment.html</a>><br>
<br>
------------------------------<br>
<br>
Subject: Digest Footer<br>
<br>
______________________________<wbr>_________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/<wbr>listinfo/x265-devel</a><br>
<br>
<br>
------------------------------<br>
<br>
End of x265-devel Digest, Vol 39, Issue 4<br>
******************************<wbr>***********<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>Principal Architect and Director,</div><div>TriSpace Technologies Pvt Ltd.,</div><div><span style="font-size:12.8000001907349px">Bangalore</span><br></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8px">CONFIDENTIALITY NOTE : The information in this e-mail is confidential and privileged; it is intended for use solely by the individual or entity named as the recipient hereof. Disclosure, copying, distribution, or use of the contents of this e-mail by persons other than the intended recipient is strictly prohibited and may violate applicable laws. If you have received this e-mail in error, please delete the original message and notify us by return email or collect call immediately. Thank you. TriSpace Technologies Pvt. Ltd.</span><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8px"><br></span></div></div></div></div></div></div></div>
</div></div></div>