[SCM] libav/experimental: Fix yuv2rgb C functions to work for widths divisible by 4 but not by 8

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:01:18 UTC 2013


The following commit has been merged in the experimental branch:
commit 1a18eaf7606a486346cb1a2a9267a0c1970b8e28
Author: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
Date:   Fri Jun 8 07:49:59 2007 +0000

    Fix yuv2rgb C functions to work for widths divisible by 4 but not by 8
    
    Originally committed as revision 23508 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c
index 009219a..6bd88fd 100644
--- a/libswscale/yuv2rgb.c
+++ b/libswscale/yuv2rgb.c
@@ -276,7 +276,7 @@ static int func_name(SwsContext *c, uint8_t* src[], int srcStride[], int srcSlic
             int av_unused U, V;\
             int Y;\
 
-#define EPILOG(dst_delta)\
+#define EPILOG1(dst_delta)\
             pu += 4;\
             pv += 4;\
             py_1 += 8;\
@@ -284,10 +284,20 @@ static int func_name(SwsContext *c, uint8_t* src[], int srcStride[], int srcSlic
             dst_1 += dst_delta;\
             dst_2 += dst_delta;\
         }\
+        if (c->dstW & 4) {\
+            int av_unused U, V;\
+            int Y;\
+
+#define EPILOG2()\
+        }\
     }\
     return srcSliceH;\
 }
 
+#define EPILOG(dst_delta)\
+    EPILOG1(dst_delta)\
+    EPILOG2()
+
 PROLOG(yuv2rgb_c_32, uint32_t)
     RGB(0);
     DST1(0);
@@ -304,7 +314,15 @@ PROLOG(yuv2rgb_c_32, uint32_t)
     RGB(3);
     DST2(3);
     DST1(3);
-EPILOG(8)
+EPILOG1(8)
+    RGB(0);
+    DST1(0);
+    DST2(0);
+
+    RGB(1);
+    DST2(1);
+    DST1(1);
+EPILOG2()
 
 PROLOG(yuv2rgb_c_24_rgb, uint8_t)
     RGB(0);
@@ -322,7 +340,15 @@ PROLOG(yuv2rgb_c_24_rgb, uint8_t)
     RGB(3);
     DST2RGB(3);
     DST1RGB(3);
-EPILOG(24)
+EPILOG1(24)
+    RGB(0);
+    DST1RGB(0);
+    DST2RGB(0);
+
+    RGB(1);
+    DST2RGB(1);
+    DST1RGB(1);
+EPILOG2()
 
 // only trivial mods from yuv2rgb_c_24_rgb
 PROLOG(yuv2rgb_c_24_bgr, uint8_t)
@@ -341,7 +367,15 @@ PROLOG(yuv2rgb_c_24_bgr, uint8_t)
     RGB(3);
     DST2BGR(3);
     DST1BGR(3);
-EPILOG(24)
+EPILOG1(24)
+    RGB(0);
+    DST1BGR(0);
+    DST2BGR(0);
+
+    RGB(1);
+    DST2BGR(1);
+    DST1BGR(1);
+EPILOG2()
 
 // This is exactly the same code as yuv2rgb_c_32 except for the types of
 // r, g, b, dst_1, dst_2

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list