This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository legacy-imlib2.

View the commit online.

commit 41a651731997e9b0da43daa1451ccc89bc795747
Author: Kim Woelders <k...@woelders.dk>
AuthorDate: Sun May 7 13:21:21 2023 +0200

    scaling: Unifdef OLD_SCALE_DOWN
    
    And adjust some comments.
---
 src/lib/scale.c | 510 ++------------------------------------------------------
 1 file changed, 16 insertions(+), 494 deletions(-)

diff --git a/src/lib/scale.c b/src/lib/scale.c
index a2dbbad..83f5a1c 100644
--- a/src/lib/scale.c
+++ b/src/lib/scale.c
@@ -338,9 +338,10 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
    yapoints = isi->yapoints;
 
    end = dxx + dw;
-   /* scaling up both ways */
    if (isi->xup_yup == 3)
      {
+        /* Scaling up both ways */
+
         /* go through every scanline in the output buffer */
         for (y = 0; y < dh; y++)
           {
@@ -434,17 +435,15 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
                }
           }
      }
-   /* if we're scaling down vertically */
    else if (isi->xup_yup == 1)
-#ifndef OLD_SCALE_DOWN
      {
-        /*\ 'Correct' version, with math units prepared for MMXification \ */
+        /* Scaling down vertically */
+
         int                 Cy, j;
         uint32_t           *pix;
         int                 r, g, b, a, rr, gg, bb, aa;
         int                 yap;
 
-        /* go through every scanline in the output buffer */
         for (y = 0; y < dh; y++)
           {
              Cy = YAP >> 16;
@@ -520,114 +519,15 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
                }
           }
      }
-#else
-     {
-        /* go through every scanline in the output buffer */
-        for (y = 0; y < dh; y++)
-          {
-             int                 yap;
-
-             /* calculate the source line we'll scan from */
-             dptr = dest + dx + ((y + dy) * dow);
-             sptr = ypoints[dyy + y];
-
-             yap = (ypoints[dyy + y + 1] - ypoints[dyy + y]) / sow;
-             if (yap > 1)
-               {
-                  for (x = dxx; x < end; x++)
-                    {
-                       int                 r = 0, g = 0, b = 0, a = 0;
-                       int                 rr = 0, gg = 0, bb = 0, aa = 0;
-                       uint32_t           *pix;
-
-                       if (XAP > 0)
-                         {
-                            pix = sptr + xpoints[x];
-                            for (j = 0; j < yap; j++)
-                              {
-                                 r += R_VAL(pix);
-                                 g += G_VAL(pix);
-                                 b += B_VAL(pix);
-                                 a += A_VAL(pix);
-                                 rr += R_VAL(pix + 1);
-                                 gg += G_VAL(pix + 1);
-                                 bb += B_VAL(pix + 1);
-                                 aa += A_VAL(pix + 1);
-                                 pix += sow;
-                              }
-                            r = r * INV_XAP / yap;
-                            g = g * INV_XAP / yap;
-                            b = b * INV_XAP / yap;
-                            a = a * INV_XAP / yap;
-                            r = (r + ((rr * XAP) / yap)) >> 8;
-                            g = (g + ((gg * XAP) / yap)) >> 8;
-                            b = (b + ((bb * XAP) / yap)) >> 8;
-                            a = (a + ((aa * XAP) / yap)) >> 8;
-                            *dptr++ = PIXEL_ARGB(a, r, g, b);
-                         }
-                       else
-                         {
-                            pix = sptr + xpoints[x];
-                            for (j = 0; j < yap; j++)
-                              {
-                                 r += R_VAL(pix);
-                                 g += G_VAL(pix);
-                                 b += B_VAL(pix);
-                                 a += A_VAL(pix);
-                                 pix += sow;
-                              }
-                            r /= yap;
-                            g /= yap;
-                            b /= yap;
-                            a /= yap;
-                            *dptr++ = PIXEL_ARGB(a, r, g, b);
-                         }
-                    }
-               }
-             else
-               {
-                  for (x = dxx; x < end; x++)
-                    {
-                       int                 r = 0, g = 0, b = 0, a = 0;
-                       int                 count;
-                       uint32_t           *pix;
-
-                       if (XAP > 0)
-                         {
-                            pix = ypoints[dyy + y] + xpoints[x];
-                            r = R_VAL(pix) * INV_XAP;
-                            g = G_VAL(pix) * INV_XAP;
-                            b = B_VAL(pix) * INV_XAP;
-                            a = A_VAL(pix) * INV_XAP;
-                            pix++;
-                            r += R_VAL(pix) * XAP;
-                            g += G_VAL(pix) * XAP;
-                            b += B_VAL(pix) * XAP;
-                            a += A_VAL(pix) * XAP;
-                            r >>= 8;
-                            g >>= 8;
-                            b >>= 8;
-                            a >>= 8;
-                            *dptr++ = PIXEL_ARGB(a, r, g, b);
-                         }
-                       else
-                          *dptr++ = sptr[xpoints[x]];
-                    }
-               }
-          }
-     }
-#endif
-   /* if we're scaling down horizontally */
    else if (isi->xup_yup == 2)
-#ifndef OLD_SCALE_DOWN
      {
-        /*\ 'Correct' version, with math units prepared for MMXification \ */
+        /* Scaling down horizontally */
+
         int                 Cx, j;
         uint32_t           *pix;
         int                 r, g, b, a, rr, gg, bb, aa;
         int                 xap;
 
-        /* go through every scanline in the output buffer */
         for (y = 0; y < dh; y++)
           {
              dptr = dest + dx + ((y + dy) * dow);
@@ -703,113 +603,10 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
                }
           }
      }
-#else
-     {
-        /* go through every scanline in the output buffer */
-        for (y = 0; y < dh; y++)
-          {
-             /* calculate the source line we'll scan from */
-             dptr = dest + dx + ((y + dy) * dow);
-             sptr = ypoints[dyy + y];
-             if (YAP > 0)
-               {
-                  for (x = dxx; x < end; x++)
-                    {
-                       int                 r = 0, g = 0, b = 0, a = 0;
-                       int                 rr = 0, gg = 0, bb = 0, aa = 0;
-                       int                 xap;
-                       uint32_t           *pix;
-
-                       xap = xpoints[x + 1] - xpoints[x];
-                       if (xap > 1)
-                         {
-                            pix = ypoints[dyy + y] + xpoints[x];
-                            for (i = 0; i < xap; i++)
-                              {
-                                 r += R_VAL(pix + i);
-                                 g += G_VAL(pix + i);
-                                 b += B_VAL(pix + i);
-                                 a += A_VAL(pix + i);
-                              }
-                            r = r * INV_YAP / xap;
-                            g = g * INV_YAP / xap;
-                            b = b * INV_YAP / xap;
-                            a = a * INV_YAP / xap;
-                            pix = ypoints[dyy + y] + xpoints[x] + sow;
-                            for (i = 0; i < xap; i++)
-                              {
-                                 rr += R_VAL(pix + i);
-                                 gg += G_VAL(pix + i);
-                                 bb += B_VAL(pix + i);
-                                 aa += A_VAL(pix + i);
-                              }
-                            r = (r + ((rr * YAP) / xap)) >> 8;
-                            g = (g + ((gg * YAP) / xap)) >> 8;
-                            b = (b + ((bb * YAP) / xap)) >> 8;
-                            a = (a + ((aa * YAP) / xap)) >> 8;
-                            *dptr++ = PIXEL_ARGB(a, r, g, b);
-                         }
-                       else
-                         {
-                            pix = ypoints[dyy + y] + xpoints[x];
-                            r = R_VAL(pix) * INV_YAP;
-                            g = G_VAL(pix) * INV_YAP;
-                            b = B_VAL(pix) * INV_YAP;
-                            a = A_VAL(pix) * INV_YAP;
-                            pix += sow;
-                            r += R_VAL(pix) * YAP;
-                            g += G_VAL(pix) * YAP;
-                            b += B_VAL(pix) * YAP;
-                            a += A_VAL(pix) * YAP;
-                            r >>= 8;
-                            g >>= 8;
-                            b >>= 8;
-                            a >>= 8;
-                            *dptr++ = PIXEL_ARGB(a, r, g, b);
-                         }
-                    }
-               }
-             else
-               {
-                  for (x = dxx; x < end; x++)
-                    {
-                       int                 r = 0, g = 0, b = 0, a = 0;
-                       int                 xap;
-                       uint32_t           *pix;
-
-                       xap = xpoints[x + 1] - xpoints[x];
-                       if (xap > 1)
-                         {
-                            pix = ypoints[dyy + y] + xpoints[x];
-                            for (i = 0; i < xap; i++)
-                              {
-                                 r += R_VAL(pix + i);
-                                 g += G_VAL(pix + i);
-                                 b += B_VAL(pix + i);
-                                 a += A_VAL(pix + i);
-                              }
-                            r /= xap;
-                            g /= xap;
-                            b /= xap;
-                            a /= xap;
-                            *dptr++ = PIXEL_ARGB(a, r, g, b);
-                         }
-                       else
-                          *dptr++ = sptr[xpoints[x]];
-                    }
-               }
-          }
-     }
-#endif
-   /* if we're scaling down horizontally & vertically */
    else
-#ifndef OLD_SCALE_DOWN
      {
-        /*\ 'Correct' version, with math units prepared for MMXification:
-         * |*|  The operation 'b = (b * c) >> 16' translates to pmulhw,
-         * |*|  so the operation 'b = (b * c) >> d' would translate to
-         * |*|  psllw (16 - d), %mmb; pmulh %mmc, %mmb
-         * \ */
+        /* Scaling down horizontally & vertically */
+
         int                 Cx, Cy, i, j;
         uint32_t           *pix;
         int                 a, r, g, b, ax, rx, gx, bx;
@@ -923,54 +720,6 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
                }
           }
      }
-#else
-     {
-        int                 count;
-        uint32_t           *pix;
-        int                 a, r, g, b;
-
-        /* go through every scanline in the output buffer */
-        for (y = 0; y < dh; y++)
-          {
-             int                 yap =
-                (ypoints[dyy + y + 1] - ypoints[dyy + y]) / sow;
-             /* calculate the source line we'll scan from */
-             dptr = dest + dx + ((y + dy) * dow);
-             sptr = ypoints[dyy + y];
-             for (x = dxx; x < end; x++)
-               {
-                  int                 xap = xpoints[x + 1] - xpoints[x];
-
-                  if ((xap > 1) || (yap > 1))
-                    {
-                       r = 0;
-                       g = 0;
-                       b = 0;
-                       pix = ypoints[dyy + y] + xpoints[x];
-                       for (j = yap; --j >= 0;)
-                         {
-                            for (i = xap; --i >= 0;)
-                              {
-                                 r += R_VAL(pix + i);
-                                 g += G_VAL(pix + i);
-                                 b += B_VAL(pix + i);
-                                 a += A_VAL(pix + i);
-                              }
-                            pix += sow;
-                         }
-                       count = xap * yap;
-                       R_VAL(dptr) = r / count;
-                       G_VAL(dptr) = g / count;
-                       B_VAL(dptr) = b / count;
-                       A_VAL(dptr) = a / count;
-                       dptr++;
-                    }
-                  else
-                     *dptr++ = sptr[xpoints[x]];
-               }
-          }
-     }
-#endif
 }
 
 /* scale by area sampling - IGNORE the ALPHA byte*/
@@ -999,9 +748,10 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
    yapoints = isi->yapoints;
 
    end = dxx + dw;
-   /* scaling up both ways */
    if (isi->xup_yup == 3)
      {
+        /* Scaling up both ways */
+
         /* go through every scanline in the output buffer */
         for (y = 0; y < dh; y++)
           {
@@ -1084,17 +834,15 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
                }
           }
      }
-   /* if we're scaling down vertically */
    else if (isi->xup_yup == 1)
-#ifndef OLD_SCALE_DOWN
      {
-        /*\ 'Correct' version, with math units prepared for MMXification \ */
+        /* Scaling down vertically */
+
         int                 Cy, j;
         uint32_t           *pix;
         int                 r, g, b, rr, gg, bb;
         int                 yap;
 
-        /* go through every scanline in the output buffer */
         for (y = 0; y < dh; y++)
           {
              Cy = YAP >> 16;
@@ -1159,104 +907,15 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
                }
           }
      }
-#else
-     {
-        /* go through every scanline in the output buffer */
-        for (y = 0; y < dh; y++)
-          {
-             int                 yap;
-
-             /* calculate the source line we'll scan from */
-             dptr = dest + dx + ((y + dy) * dow);
-             sptr = ypoints[dyy + y];
-
-             yap = (ypoints[dyy + y + 1] - ypoints[dyy + y]) / sow;
-             if (yap > 1)
-               {
-                  for (x = dxx; x < end; x++)
-                    {
-                       int                 r = 0, g = 0, b = 0;
-                       int                 rr = 0, gg = 0, bb = 0;
-                       uint32_t           *pix;
-
-                       if (XAP > 0)
-                         {
-                            pix = sptr + xpoints[x];
-                            for (j = 0; j < yap; j++)
-                              {
-                                 r += R_VAL(pix);
-                                 g += G_VAL(pix);
-                                 b += B_VAL(pix);
-                                 rr += R_VAL(pix + 1);
-                                 gg += G_VAL(pix + 1);
-                                 bb += B_VAL(pix + 1);
-                                 pix += sow;
-                              }
-                            r = r * INV_XAP / yap;
-                            g = g * INV_XAP / yap;
-                            b = b * INV_XAP / yap;
-                            r = (r + ((rr * XAP) / yap)) >> 8;
-                            g = (g + ((gg * XAP) / yap)) >> 8;
-                            b = (b + ((bb * XAP) / yap)) >> 8;
-                            *dptr++ = PIXEL_ARGB(0xff, r, g, b);
-                         }
-                       else
-                         {
-                            pix = sptr + xpoints[x];
-                            for (j = 0; j < yap; j++)
-                              {
-                                 r += R_VAL(pix);
-                                 g += G_VAL(pix);
-                                 b += B_VAL(pix);
-                                 pix += sow;
-                              }
-                            r /= yap;
-                            g /= yap;
-                            b /= yap;
-                            *dptr++ = PIXEL_ARGB(0xff, r, g, b);
-                         }
-                    }
-               }
-             else
-               {
-                  for (x = dxx; x < end; x++)
-                    {
-                       int                 r = 0, g = 0, b = 0;
-                       uint32_t           *pix;
-
-                       if (XAP > 0)
-                         {
-                            pix = ypoints[dyy + y] + xpoints[x];
-                            r = R_VAL(pix) * INV_XAP;
-                            g = G_VAL(pix) * INV_XAP;
-                            b = B_VAL(pix) * INV_XAP;
-                            pix++;
-                            r += R_VAL(pix) * XAP;
-                            g += G_VAL(pix) * XAP;
-                            b += B_VAL(pix) * XAP;
-                            r >>= 8;
-                            g >>= 8;
-                            b >>= 8;
-                            *dptr++ = PIXEL_ARGB(0xff, r, g, b);
-                         }
-                       else
-                          *dptr++ = sptr[xpoints[x]];
-                    }
-               }
-          }
-     }
-#endif
-   /* if we're scaling down horizontally */
    else if (isi->xup_yup == 2)
-#ifndef OLD_SCALE_DOWN
      {
-        /*\ 'Correct' version, with math units prepared for MMXification \ */
+        /* Scaling down horizontally */
+
         int                 Cx, j;
         uint32_t           *pix;
         int                 r, g, b, rr, gg, bb;
         int                 xap;
 
-        /* go through every scanline in the output buffer */
         for (y = 0; y < dh; y++)
           {
              dptr = dest + dx + ((y + dy) * dow);
@@ -1321,101 +980,10 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
                }
           }
      }
-#else
-     {
-        /* go through every scanline in the output buffer */
-        for (y = 0; y < dh; y++)
-          {
-             /* calculate the source line we'll scan from */
-             dptr = dest + dx + ((y + dy) * dow);
-             sptr = ypoints[dyy + y];
-             if (YAP > 0)
-               {
-                  for (x = dxx; x < end; x++)
-                    {
-                       int                 r = 0, g = 0, b = 0;
-                       int                 rr = 0, gg = 0, bb = 0;
-                       int                 xap;
-                       uint32_t           *pix;
-
-                       xap = xpoints[x + 1] - xpoints[x];
-                       if (xap > 1)
-                         {
-                            pix = ypoints[dyy + y] + xpoints[x];
-                            for (i = 0; i < xap; i++)
-                              {
-                                 r += R_VAL(pix + i);
-                                 g += G_VAL(pix + i);
-                                 b += B_VAL(pix + i);
-                              }
-                            r = r * INV_YAP / xap;
-                            g = g * INV_YAP / xap;
-                            b = b * INV_YAP / xap;
-                            pix = ypoints[dyy + y] + xpoints[x] + sow;
-                            for (i = 0; i < xap; i++)
-                              {
-                                 rr += R_VAL(pix + i);
-                                 gg += G_VAL(pix + i);
-                                 bb += B_VAL(pix + i);
-                              }
-                            r = (r + ((rr * YAP) / xap)) >> 8;
-                            g = (g + ((gg * YAP) / xap)) >> 8;
-                            b = (b + ((bb * YAP) / xap)) >> 8;
-                            *dptr++ = PIXEL_ARGB(0xff, r, g, b);
-                         }
-                       else
-                         {
-                            pix = ypoints[dyy + y] + xpoints[x];
-                            r = R_VAL(pix) * INV_YAP;
-                            g = G_VAL(pix) * INV_YAP;
-                            b = B_VAL(pix) * INV_YAP;
-                            pix += sow;
-                            r += R_VAL(pix) * YAP;
-                            g += G_VAL(pix) * YAP;
-                            b += B_VAL(pix) * YAP;
-                            r >>= 8;
-                            g >>= 8;
-                            b >>= 8;
-                            *dptr++ = PIXEL_ARGB(0xff, r, g, b);
-                         }
-                    }
-               }
-             else
-               {
-                  for (x = dxx; x < end; x++)
-                    {
-                       int                 r = 0, g = 0, b = 0;
-                       int                 xap;
-                       uint32_t           *pix;
-
-                       xap = xpoints[x + 1] - xpoints[x];
-                       if (xap > 1)
-                         {
-                            pix = ypoints[dyy + y] + xpoints[x];
-                            for (i = 0; i < xap; i++)
-                              {
-                                 r += R_VAL(pix + i);
-                                 g += G_VAL(pix + i);
-                                 b += B_VAL(pix + i);
-                              }
-                            r /= xap;
-                            g /= xap;
-                            b /= xap;
-                            *dptr++ = PIXEL_ARGB(0xff, r, g, b);
-                         }
-                       else
-                          *dptr++ = sptr[xpoints[x]];
-                    }
-               }
-          }
-     }
-#endif
-   /* fully optimized (i think) - only change of algorithm can help */
-   /* if we're scaling down horizontally & vertically */
    else
-#ifndef OLD_SCALE_DOWN
      {
-        /*\ 'Correct' version, with math units prepared for MMXification \ */
+        /* Scaling down horizontally & vertically */
+
         int                 Cx, Cy, i, j;
         uint32_t           *pix;
         int                 r, g, b, rx, gx, bx;
@@ -1516,50 +1084,4 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
                }
           }
      }
-#else
-     {
-        int                 count;
-        uint32_t           *pix;
-        int                 r, g, b;
-
-        /* go through every scanline in the output buffer */
-        for (y = 0; y < dh; y++)
-          {
-             int                 yap =
-                (ypoints[dyy + y + 1] - ypoints[dyy + y]) / sow;
-             /* calculate the source line we'll scan from */
-             dptr = dest + dx + ((y + dy) * dow);
-             sptr = ypoints[dyy + y];
-             for (x = dxx; x < end; x++)
-               {
-                  int                 xap = xpoints[x + 1] - xpoints[x];
-
-                  if ((xap > 1) || (yap > 1))
-                    {
-                       r = 0;
-                       g = 0;
-                       b = 0;
-                       pix = sptr + xpoints[x];
-                       for (j = yap; --j >= 0;)
-                         {
-                            for (i = xap; --i >= 0;)
-                              {
-                                 r += R_VAL(pix + i);
-                                 g += G_VAL(pix + i);
-                                 b += B_VAL(pix + i);
-                              }
-                            pix += sow;
-                         }
-                       count = xap * yap;
-                       R_VAL(dptr) = r / count;
-                       G_VAL(dptr) = g / count;
-                       B_VAL(dptr) = b / count;
-                       dptr++;
-                    }
-                  else
-                     *dptr++ = sptr[xpoints[x]];
-               }
-          }
-     }
-#endif
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to