changeset 23488:63bc8943a1ad

Fix yuv2rgb C functions to work for widths divisible by 4 but not by 8
author reimar
date Fri, 08 Jun 2007 07:49:59 +0000
parents 559c4f075bf1
children aeeb6df0c995
files libswscale/yuv2rgb.c
diffstat 1 files changed, 38 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/libswscale/yuv2rgb.c	Fri Jun 08 07:49:03 2007 +0000
+++ b/libswscale/yuv2rgb.c	Fri Jun 08 07:49:59 2007 +0000
@@ -276,7 +276,7 @@
             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 @@
             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 @@
     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 @@
     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 @@
     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