swscale: Split h[yc]scale_fast() into their own functions.
authorRamiro Polla <ramiro.polla@gmail.com>
Thu, 2 Apr 2009 18:32:49 +0000 (18:32 +0000)
committerRamiro Polla <ramiro.polla@gmail.com>
Thu, 2 Apr 2009 18:32:49 +0000 (18:32 +0000)
Originally committed as revision 29128 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

libswscale/swscale_template.c

index 04e9d17..28b023e 100644 (file)
@@ -2243,6 +2243,22 @@ static inline void RENAME(hScale)(int16_t *dst, int dstW, uint8_t *src, int srcW
 #endif /* HAVE_ALTIVEC */
 #endif /* HAVE_MMX */
 }
+
+static inline void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
+                                        int dstWidth, uint8_t *src, int srcW,
+                                        int xInc)
+{
+    int i;
+    unsigned int xpos=0;
+    for (i=0;i<dstWidth;i++)
+    {
+        register unsigned int xx=xpos>>16;
+        register unsigned int xalpha=(xpos&0xFFFF)>>9;
+        dst[i]= (src[xx]<<7) + (src[xx+1] - src[xx])*xalpha;
+        xpos+=xInc;
+    }
+}
+
       // *** horizontal scale Y line to temp buffer
 static inline void RENAME(hyscale)(SwsContext *c, uint16_t *dst, long dstWidth, uint8_t *src, int srcW, int xInc,
                                    int flags, int canMMX2BeUsed, int16_t *hLumFilter,
@@ -2465,15 +2481,7 @@ FUNNY_Y_CODE
         } //if MMX2 can't be used
 #endif
 #else
-        int i;
-        unsigned int xpos=0;
-        for (i=0;i<dstWidth;i++)
-        {
-            register unsigned int xx=xpos>>16;
-            register unsigned int xalpha=(xpos&0xFFFF)>>9;
-            dst[i]= (src[xx]<<7) + (src[xx+1] - src[xx])*xalpha;
-            xpos+=xInc;
-        }
+        RENAME(hyscale_fast)(c, dst, dstWidth, src, srcW, xInc);
 #endif /* ARCH_X86 */
     }
 
@@ -2491,6 +2499,26 @@ FUNNY_Y_CODE
     }
 }
 
+static inline void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst,
+                                        int dstWidth, uint8_t *src1,
+                                        uint8_t *src2, int srcW, int xInc)
+{
+    int i;
+    unsigned int xpos=0;
+    for (i=0;i<dstWidth;i++)
+    {
+        register unsigned int xx=xpos>>16;
+        register unsigned int xalpha=(xpos&0xFFFF)>>9;
+        dst[i]=(src1[xx]*(xalpha^127)+src1[xx+1]*xalpha);
+        dst[i+VOFW]=(src2[xx]*(xalpha^127)+src2[xx+1]*xalpha);
+        /* slower
+        dst[i]= (src1[xx]<<7) + (src1[xx+1] - src1[xx])*xalpha;
+        dst[i+VOFW]=(src2[xx]<<7) + (src2[xx+1] - src2[xx])*xalpha;
+        */
+        xpos+=xInc;
+    }
+}
+
 inline static void RENAME(hcscale)(SwsContext *c, uint16_t *dst, long dstWidth, uint8_t *src1, uint8_t *src2,
                                    int srcW, int xInc, int flags, int canMMX2BeUsed, int16_t *hChrFilter,
                                    int16_t *hChrFilterPos, int hChrFilterSize, void *funnyUVCode,
@@ -2754,20 +2782,7 @@ FUNNY_UV_CODE
         } //if MMX2 can't be used
 #endif
 #else
-        int i;
-        unsigned int xpos=0;
-        for (i=0;i<dstWidth;i++)
-        {
-            register unsigned int xx=xpos>>16;
-            register unsigned int xalpha=(xpos&0xFFFF)>>9;
-            dst[i]=(src1[xx]*(xalpha^127)+src1[xx+1]*xalpha);
-            dst[i+VOFW]=(src2[xx]*(xalpha^127)+src2[xx+1]*xalpha);
-            /* slower
-            dst[i]= (src1[xx]<<7) + (src1[xx+1] - src1[xx])*xalpha;
-            dst[i+VOFW]=(src2[xx]<<7) + (src2[xx+1] - src2[xx])*xalpha;
-            */
-            xpos+=xInc;
-        }
+        RENAME(hcscale_fast)(c, dst, dstWidth, src1, src2, srcW, xInc);
 #endif /* ARCH_X86 */
     }
     if(c->srcRange != c->dstRange && !(isRGB(c->dstFormat) || isBGR(c->dstFormat))){