<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">I didn't know it was modeled after the
      spec to be a reference.  If that's the case then leave it off.<br>
      On 10/01/2014 01:10 PM, chen wrote:<br>
    </div>
    <blockquote
      cite="mid:7b40c4d4.6e4.148cd55f209.Coremail.chenm003@163.com"
      type="cite">
      <div
        style="line-height:1.7;color:#000000;font-size:14px;font-family:arial">
        <div>>-    bool modeHor       = (dirMode < 18);<br>
          >-    bool modeVer       = !modeHor;<br>
>-    int intraPredAngle = modeVer ? (int)dirMode - VER_IDX : modeHor ? -((int)dirMode - HOR_IDX) : 0;<br>
>+    int intraPredAngle = dirMode > 17 ? (int)dirMode - VER_IDX : -((int)dirMode - HOR_IDX);<br>
        </div>
        <div>for this example, origin code easy to know it is a horizon
          mode and easy to find in specification,</div>
        <div>In new code, we have to find where is the constant 17 and
          reason</div>
        <div>New code difficult match to HEVC specification, it means
          more jobs during port or understand.<br>
        </div>
        <div> </div>
        At 2014-10-02 01:54:15,dave <a class="moz-txt-link-rfc2396E" href="mailto:dtyx265@gmail.com"><dtyx265@gmail.com></a> wrote:<br>
        <blockquote id="isReplyContent" style="margin: 0px 0px 0px
          0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204,
          204); border-left-width: 1px; border-left-style: solid;">
          <div class="moz-cite-prefix">I know the C model is not a
            priority, I just felt like doing it.  Also, I don't think I
            really changed the core algorithms.  As my comment states,
            "A few small performance improvements".<br>
            <br>
            On 10/01/2014 08:32 AM, chen wrote:<br>
          </div>
          <blockquote
            cite="mid:51e043b2.696.148cc574dd0.Coremail.chenm003@163.com"
            type="cite">
            <div style="color: rgb(0, 0, 0); line-height: 1.7;
              font-family: arial; font-size: 14px;">
              <div>We don't worry about C model performance, it is for
                reference only.</div>
              <div>I like clear code, it easy to port to different
                platform with  algorithm re-design.</div>
              <pre>At 2014-10-01 09:43:15,<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:dtyx265@gmail.com">dtyx265@gmail.com</a> wrote:
># HG changeset patch
># User David T Yuen <a moz-do-not-send="true" class="moz-txt-link-rfc2396E" href="mailto:dtyx265@gmail.com"><dtyx265@gmail.com></a>
># Date 1412127675 25200
># Node ID 353ccf9c2b2adc37cfb1bc7124fcca131599e0ad
># Parent  5a6845566d1492d29af29ecc0cf75d644994735c
>A few small performance improvements for intrapred c code
>
>diff -r 5a6845566d14 -r 353ccf9c2b2a source/common/intrapred.cpp
>--- a/source/common/intrapred.cpp      Mon Sep 29 17:37:47 2014 -0500
>+++ b/source/common/intrapred.cpp      Tue Sep 30 18:41:15 2014 -0700
>@@ -35,10 +35,6 @@
>     for (w = 0; w < width; w++)
>     {
>         sum += above[w];
>-    }
>-
>-    for (w = 0; w < width; w++)
>-    {
>         sum += left[w];
>     }

>@@ -57,11 +53,10 @@
>         dst[x] = (pixel)((above[x] +  3 * dst[x] + 2) >> 2);
>     }

>-    dst += dststride;
>     for (int y = 1; y < size; y++)
>     {
>+        dst += dststride;
>         *dst = (pixel)((left[y] + 3 * *dst + 2) >> 2);
>-        dst += dststride;
>     }
> }

>@@ -134,13 +129,11 @@
> }

> template<int width>
>-void intra_pred_ang_c(pixel* dst, intptr_t dstStride, pixel *refLeft, pixel *refAbove, int dirMode, int bFilter)
>+void intra_pred_ang_c1(pixel* dst, intptr_t dstStride, pixel *refLeft, pixel *refAbove, int dirMode, int bFilter)
> {
>     // Map the mode index to main prediction direction and angle
>     int k, l;
>-    bool modeHor       = (dirMode < 18);
>-    bool modeVer       = !modeHor;
>-    int intraPredAngle = modeVer ? (int)dirMode - VER_IDX : modeHor ? -((int)dirMode - HOR_IDX) : 0;
>+    int intraPredAngle = dirMode > 17 ? (int)dirMode - VER_IDX : -((int)dirMode - HOR_IDX);
>     int absAng         = abs(intraPredAngle);
>     int signAng        = intraPredAngle < 0 ? -1 : 1;

>@@ -154,27 +147,12 @@

>     // Do angular predictions
>     {
>-        pixel* refMain;
>-        pixel* refSide;
>-
>-        // Initialise the Main and Left reference array.
>-        if (intraPredAngle < 0)
>+        pixel* refMain = refLeft;
>+        pixel* refSide = refAbove;
>+        if (dirMode > 17)
>         {
>-            refMain = (modeVer ? refAbove : refLeft); // + (width - 1);
>-            refSide = (modeVer ? refLeft : refAbove); // + (width - 1);
>-
>-            // Extend the Main reference to the left.
>-            int invAngleSum    = 128; // rounding for (shift by 8)
>-            for (k = -1; k > width * intraPredAngle >> 5; k--)
>-            {
>-                invAngleSum += invAngle;
>-                refMain[k] = refSide[invAngleSum >> 8];
>-            }
>-        }
>-        else
>-        {
>-            refMain = modeVer ? refAbove : refLeft;
>-            refSide = modeVer ? refLeft  : refAbove;
>+            refMain = refAbove;
>+            refSide = refLeft;
>         }

>         if (intraPredAngle == 0)
>@@ -197,6 +175,18 @@
>         }
>         else
>         {
>+            // Initialise the Main and Left reference array.
>+            if (intraPredAngle < 0)
>+            {
>+            // Extend the Main reference to the left.
>+                int invAngleSum    = 128; // rounding for (shift by 8)
>+                for (k = -1; k > width * intraPredAngle >> 5; k--)
>+                {
>+                    invAngleSum += invAngle;
>+                    refMain[k] = refSide[invAngleSum >> 8];
>+                }
>+            }
>+
>             int deltaPos = 0;
>             int deltaInt;
>             int deltaFract;
>@@ -227,18 +217,24 @@
>                 }
>             }
>         }
>+    }
>+}

>-        // Flip the block if this is the horizontal mode
>-        if (modeHor)
>+template<int width>
>+void intra_pred_ang_c(pixel* dst, intptr_t dstStride, pixel *refLeft, pixel *refAbove, int dirMode, int bFilter)
>+{
>+    int k, l;
>+    intra_pred_ang_c1<width>(dst, dstStride, refLeft, refAbove, dirMode, bFilter);
>+
>+    if (dirMode < 18)
>+    {
>+        for (k = 0; k < width - 1; k++)
>         {
>-            for (k = 0; k < width - 1; k++)
>+            for (l = k + 1; l < width; l++)
>             {
>-                for (l = k + 1; l < width; l++)
>-                {
>-                    pixel tmp              = dst[k * dstStride + l];
>-                    dst[k * dstStride + l] = dst[l * dstStride + k];
>-                    dst[l * dstStride + k] = tmp;
>-                }
>+                dst[l * dstStride + k] ^= dst[k * dstStride + l];
>+                dst[k * dstStride + l] ^= dst[l * dstStride + k];
>+                dst[l * dstStride + k] ^= dst[k * dstStride + l];
>             }
>         }
>     }
>@@ -250,28 +246,22 @@
>     const int size = 1 << log2Size;
>     for (int mode = 2; mode <= 34; mode++)
>     {
>-        pixel *left  = (g_intraFilterFlags[mode] & size ? left1  : left0);
>-        pixel *above = (g_intraFilterFlags[mode] & size ? above1 : above0);
>+        pixel *left;
>+        pixel *above;
>+
>+        if (g_intraFilterFlags[mode] & size)
>+        {
>+            left = left1;
>+            above = above1;
>+        }
>+        else
>+        {
>+            left = left0;
>+            above = above0;
>+        }
>         pixel *out = dest + ((mode - 2) << (log2Size * 2));

>-        intra_pred_ang_c<size>(out, size, left, above, mode, bLuma);
>-
>-        // Optimize code don't flip buffer
>-        bool modeHor = (mode < 18);
>-
>-        // transpose the block if this is a horizontal mode
>-        if (modeHor)
>-        {
>-            for (int k = 0; k < size - 1; k++)
>-            {
>-                for (int l = k + 1; l < size; l++)
>-                {
>-                    pixel tmp         = out[k * size + l];
>-                    out[k * size + l] = out[l * size + k];
>-                    out[l * size + k] = tmp;
>-                }
>-            }
>-        }
>+        intra_pred_ang_c1<size>(out, size, left, above, mode, bLuma);
>     }
> }
> }
>_______________________________________________
>x265-devel mailing list
><a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a>
><a moz-do-not-send="true" class="moz-txt-link-freetext" href="https://mailman.videolan.org/listinfo/x265-devel">https://mailman.videolan.org/listinfo/x265-devel</a>
</pre>
            </div>
            <br>
            <fieldset class="mimeAttachmentHeader"></fieldset>
            <br>
            <pre wrap="">_______________________________________________
x265-devel mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="https://mailman.videolan.org/listinfo/x265-devel">https://mailman.videolan.org/listinfo/x265-devel</a>
</pre>
          </blockquote>
          <br>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
x265-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a>
<a class="moz-txt-link-freetext" href="https://mailman.videolan.org/listinfo/x265-devel">https://mailman.videolan.org/listinfo/x265-devel</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>