Index: libswscale/yuv2rgb.c
===================================================================
--- libswscale/yuv2rgb.c	(revision 32669)
+++ libswscale/yuv2rgb.c	(working copy)
@@ -104,25 +104,19 @@
                      int srcSliceH, uint8_t* dst[], int dstStride[]) \
 {\
     int y;\
+    int vshift = c->srcFormat == PIX_FMT_YUV420P;\
 \
-    if (!alpha && c->srcFormat == PIX_FMT_YUV422P) {\
-        srcStride[1] *= 2;\
-        srcStride[2] *= 2;\
-    }\
-    for (y=0; y<srcSliceH; y+=2) {\
+    for (y=0; y<srcSliceH; y++) {\
         dst_type *dst_1 = (dst_type*)(dst[0] + (y+srcSliceY  )*dstStride[0]);\
-        dst_type *dst_2 = (dst_type*)(dst[0] + (y+srcSliceY+1)*dstStride[0]);\
         dst_type av_unused *r, *b;\
         dst_type *g;\
         const uint8_t *py_1 = src[0] + y*srcStride[0];\
-        const uint8_t *py_2 = py_1 + srcStride[0];\
-        const uint8_t *pu = src[1] + (y>>1)*srcStride[1];\
-        const uint8_t *pv = src[2] + (y>>1)*srcStride[2];\
-        const uint8_t av_unused *pa_1, *pa_2;\
+        const uint8_t *pu = src[1] + (y>>vshift)*srcStride[1];\
+        const uint8_t *pv = src[2] + (y>>vshift)*srcStride[2];\
+        const uint8_t av_unused *pa_1;\
         unsigned int h_size = c->dstW>>3;\
         if (alpha) {\
             pa_1 = src[3] + y*srcStride[3];\
-            pa_2 = pa_1 + srcStride[3];\
         }\
         while (h_size--) {\
             int av_unused U, V;\
@@ -132,9 +126,7 @@
             pu += 4;\
             pv += 4;\
             py_1 += 8;\
-            py_2 += 8;\
             dst_1 += dst_delta;\
-            dst_2 += dst_delta;\
         }\
         if (c->dstW & 4) {\
             int av_unused Y, U, V;\
@@ -152,134 +144,102 @@
 YUV2RGBFUNC(yuv2rgb_c_48, uint8_t, 0)
     LOADCHROMA(0);
     PUTRGB48(dst_1,py_1,0);
-    PUTRGB48(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB48(dst_2,py_2,1);
     PUTRGB48(dst_1,py_1,1);
 
     LOADCHROMA(2);
     PUTRGB48(dst_1,py_1,2);
-    PUTRGB48(dst_2,py_2,2);
 
     LOADCHROMA(3);
-    PUTRGB48(dst_2,py_2,3);
     PUTRGB48(dst_1,py_1,3);
 ENDYUV2RGBLINE(48)
     LOADCHROMA(0);
     PUTRGB48(dst_1,py_1,0);
-    PUTRGB48(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB48(dst_2,py_2,1);
     PUTRGB48(dst_1,py_1,1);
 ENDYUV2RGBFUNC()
 
 YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0)
     LOADCHROMA(0);
     PUTRGB(dst_1,py_1,0);
-    PUTRGB(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB(dst_2,py_2,1);
     PUTRGB(dst_1,py_1,1);
 
     LOADCHROMA(2);
     PUTRGB(dst_1,py_1,2);
-    PUTRGB(dst_2,py_2,2);
 
     LOADCHROMA(3);
-    PUTRGB(dst_2,py_2,3);
     PUTRGB(dst_1,py_1,3);
 ENDYUV2RGBLINE(8)
     LOADCHROMA(0);
     PUTRGB(dst_1,py_1,0);
-    PUTRGB(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB(dst_2,py_2,1);
     PUTRGB(dst_1,py_1,1);
 ENDYUV2RGBFUNC()
 
 YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1)
     LOADCHROMA(0);
     PUTRGBA(dst_1,py_1,pa_1,0,24);
-    PUTRGBA(dst_2,py_2,pa_2,0,24);
 
     LOADCHROMA(1);
-    PUTRGBA(dst_2,py_2,pa_1,1,24);
-    PUTRGBA(dst_1,py_1,pa_2,1,24);
+    PUTRGBA(dst_1,py_1,pa_1,1,24);
 
     LOADCHROMA(2);
     PUTRGBA(dst_1,py_1,pa_1,2,24);
-    PUTRGBA(dst_2,py_2,pa_2,2,24);
 
     LOADCHROMA(3);
-    PUTRGBA(dst_2,py_2,pa_1,3,24);
-    PUTRGBA(dst_1,py_1,pa_2,3,24);
+    PUTRGBA(dst_1,py_1,pa_1,3,24);
     pa_1 += 8;\
-    pa_2 += 8;\
 ENDYUV2RGBLINE(8)
     LOADCHROMA(0);
     PUTRGBA(dst_1,py_1,pa_1,0,24);
-    PUTRGBA(dst_2,py_2,pa_2,0,24);
 
     LOADCHROMA(1);
-    PUTRGBA(dst_2,py_2,pa_1,1,24);
-    PUTRGBA(dst_1,py_1,pa_2,1,24);
+    PUTRGBA(dst_1,py_1,pa_1,1,24);
 ENDYUV2RGBFUNC()
 
 YUV2RGBFUNC(yuva2argb_c, uint32_t, 1)
     LOADCHROMA(0);
     PUTRGBA(dst_1,py_1,pa_1,0,0);
-    PUTRGBA(dst_2,py_2,pa_2,0,0);
 
     LOADCHROMA(1);
-    PUTRGBA(dst_2,py_2,pa_2,1,0);
     PUTRGBA(dst_1,py_1,pa_1,1,0);
 
     LOADCHROMA(2);
     PUTRGBA(dst_1,py_1,pa_1,2,0);
-    PUTRGBA(dst_2,py_2,pa_2,2,0);
 
     LOADCHROMA(3);
-    PUTRGBA(dst_2,py_2,pa_2,3,0);
     PUTRGBA(dst_1,py_1,pa_1,3,0);
     pa_1 += 8;\
-    pa_2 += 8;\
 ENDYUV2RGBLINE(8)
     LOADCHROMA(0);
     PUTRGBA(dst_1,py_1,pa_1,0,0);
-    PUTRGBA(dst_2,py_2,pa_2,0,0);
 
     LOADCHROMA(1);
-    PUTRGBA(dst_2,py_2,pa_2,1,0);
     PUTRGBA(dst_1,py_1,pa_1,1,0);
 ENDYUV2RGBFUNC()
 
 YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0)
     LOADCHROMA(0);
     PUTRGB24(dst_1,py_1,0);
-    PUTRGB24(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB24(dst_2,py_2,1);
     PUTRGB24(dst_1,py_1,1);
 
     LOADCHROMA(2);
     PUTRGB24(dst_1,py_1,2);
-    PUTRGB24(dst_2,py_2,2);
 
     LOADCHROMA(3);
-    PUTRGB24(dst_2,py_2,3);
     PUTRGB24(dst_1,py_1,3);
 ENDYUV2RGBLINE(24)
     LOADCHROMA(0);
     PUTRGB24(dst_1,py_1,0);
-    PUTRGB24(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB24(dst_2,py_2,1);
     PUTRGB24(dst_1,py_1,1);
 ENDYUV2RGBFUNC()
 
@@ -287,72 +247,58 @@
 YUV2RGBFUNC(yuv2rgb_c_24_bgr, uint8_t, 0)
     LOADCHROMA(0);
     PUTBGR24(dst_1,py_1,0);
-    PUTBGR24(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTBGR24(dst_2,py_2,1);
     PUTBGR24(dst_1,py_1,1);
 
     LOADCHROMA(2);
     PUTBGR24(dst_1,py_1,2);
-    PUTBGR24(dst_2,py_2,2);
 
     LOADCHROMA(3);
-    PUTBGR24(dst_2,py_2,3);
     PUTBGR24(dst_1,py_1,3);
 ENDYUV2RGBLINE(24)
     LOADCHROMA(0);
     PUTBGR24(dst_1,py_1,0);
-    PUTBGR24(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTBGR24(dst_2,py_2,1);
     PUTBGR24(dst_1,py_1,1);
 ENDYUV2RGBFUNC()
 
 // This is exactly the same code as yuv2rgb_c_32 except for the types of
-// r, g, b, dst_1, dst_2
+// r, g, b, dst_1
 YUV2RGBFUNC(yuv2rgb_c_16, uint16_t, 0)
     LOADCHROMA(0);
     PUTRGB(dst_1,py_1,0);
-    PUTRGB(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB(dst_2,py_2,1);
     PUTRGB(dst_1,py_1,1);
 
     LOADCHROMA(2);
     PUTRGB(dst_1,py_1,2);
-    PUTRGB(dst_2,py_2,2);
 
     LOADCHROMA(3);
-    PUTRGB(dst_2,py_2,3);
     PUTRGB(dst_1,py_1,3);
 CLOSEYUV2RGBFUNC(8)
 
 #if 0 // Currently unused
 // This is exactly the same code as yuv2rgb_c_32 except for the types of
-// r, g, b, dst_1, dst_2
+// r, g, b, dst_1
 YUV2RGBFUNC(yuv2rgb_c_8, uint8_t, 0)
     LOADCHROMA(0);
     PUTRGB(dst_1,py_1,0);
-    PUTRGB(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB(dst_2,py_2,1);
     PUTRGB(dst_1,py_1,1);
 
     LOADCHROMA(2);
     PUTRGB(dst_1,py_1,2);
-    PUTRGB(dst_2,py_2,2);
 
     LOADCHROMA(3);
-    PUTRGB(dst_2,py_2,3);
     PUTRGB(dst_1,py_1,3);
 CLOSEYUV2RGBFUNC(8)
 #endif
 
-// r, g, b, dst_1, dst_2
+// r, g, b, dst_1
 YUV2RGBFUNC(yuv2rgb_c_12_ordered_dither, uint16_t, 0)
     const uint8_t *d16 = dither_4x4_16[y&3];
 #define PUTRGB12(dst,src,i,o)                                   \
@@ -363,22 +309,18 @@
 
     LOADCHROMA(0);
     PUTRGB12(dst_1,py_1,0,0);
-    PUTRGB12(dst_2,py_2,0,0+8);
 
     LOADCHROMA(1);
-    PUTRGB12(dst_2,py_2,1,2+8);
     PUTRGB12(dst_1,py_1,1,2);
 
     LOADCHROMA(2);
     PUTRGB12(dst_1,py_1,2,4);
-    PUTRGB12(dst_2,py_2,2,4+8);
 
     LOADCHROMA(3);
-    PUTRGB12(dst_2,py_2,3,6+8);
     PUTRGB12(dst_1,py_1,3,6);
 CLOSEYUV2RGBFUNC(8)
 
-// r, g, b, dst_1, dst_2
+// r, g, b, dst_1
 YUV2RGBFUNC(yuv2rgb_c_8_ordered_dither, uint8_t, 0)
     const uint8_t *d32 = dither_8x8_32[y&7];
     const uint8_t *d64 = dither_8x8_73[y&7];
@@ -390,18 +332,14 @@
 
     LOADCHROMA(0);
     PUTRGB8(dst_1,py_1,0,0);
-    PUTRGB8(dst_2,py_2,0,0+8);
 
     LOADCHROMA(1);
-    PUTRGB8(dst_2,py_2,1,2+8);
     PUTRGB8(dst_1,py_1,1,2);
 
     LOADCHROMA(2);
     PUTRGB8(dst_1,py_1,2,4);
-    PUTRGB8(dst_2,py_2,2,4+8);
 
     LOADCHROMA(3);
-    PUTRGB8(dst_2,py_2,3,6+8);
     PUTRGB8(dst_1,py_1,3,6);
 CLOSEYUV2RGBFUNC(8)
 
@@ -449,39 +387,31 @@
 
     LOADCHROMA(0);
     PUTRGB4D(dst_1,py_1,0,0);
-    PUTRGB4D(dst_2,py_2,0,0+8);
 
     LOADCHROMA(1);
-    PUTRGB4D(dst_2,py_2,1,2+8);
     PUTRGB4D(dst_1,py_1,1,2);
 
     LOADCHROMA(2);
     PUTRGB4D(dst_1,py_1,2,4);
-    PUTRGB4D(dst_2,py_2,2,4+8);
 
     LOADCHROMA(3);
-    PUTRGB4D(dst_2,py_2,3,6+8);
     PUTRGB4D(dst_1,py_1,3,6);
 CLOSEYUV2RGBFUNC(4)
 
 #if 0 // Currently unused
 // This is exactly the same code as yuv2rgb_c_32 except for the types of
-// r, g, b, dst_1, dst_2
+// r, g, b, dst_1
 YUV2RGBFUNC(yuv2rgb_c_4b, uint8_t, 0)
     LOADCHROMA(0);
     PUTRGB(dst_1,py_1,0);
-    PUTRGB(dst_2,py_2,0);
 
     LOADCHROMA(1);
-    PUTRGB(dst_2,py_2,1);
     PUTRGB(dst_1,py_1,1);
 
     LOADCHROMA(2);
     PUTRGB(dst_1,py_1,2);
-    PUTRGB(dst_2,py_2,2);
 
     LOADCHROMA(3);
-    PUTRGB(dst_2,py_2,3);
     PUTRGB(dst_1,py_1,3);
 CLOSEYUV2RGBFUNC(8)
 #endif
@@ -498,24 +428,20 @@
 
     LOADCHROMA(0);
     PUTRGB4DB(dst_1,py_1,0,0);
-    PUTRGB4DB(dst_2,py_2,0,0+8);
 
     LOADCHROMA(1);
-    PUTRGB4DB(dst_2,py_2,1,2+8);
     PUTRGB4DB(dst_1,py_1,1,2);
 
     LOADCHROMA(2);
     PUTRGB4DB(dst_1,py_1,2,4);
-    PUTRGB4DB(dst_2,py_2,2,4+8);
 
     LOADCHROMA(3);
-    PUTRGB4DB(dst_2,py_2,3,6+8);
     PUTRGB4DB(dst_1,py_1,3,6);
 CLOSEYUV2RGBFUNC(8)
 
 YUV2RGBFUNC(yuv2rgb_c_1_ordered_dither, uint8_t, 0)
         const uint8_t *d128 = dither_8x8_220[y&7];
-        char out_1 = 0, out_2 = 0;
+        char out_1 = 0;
         g= c->table_gU[128] + c->table_gV[128];
 
 #define PUTRGB1(out,src,i,o)    \
@@ -525,26 +451,21 @@
     out+= out + g[Y+d128[1+o]];
 
     PUTRGB1(out_1,py_1,0,0);
-    PUTRGB1(out_2,py_2,0,0+8);
 
-    PUTRGB1(out_2,py_2,1,2+8);
     PUTRGB1(out_1,py_1,1,2);
 
     PUTRGB1(out_1,py_1,2,4);
-    PUTRGB1(out_2,py_2,2,4+8);
 
-    PUTRGB1(out_2,py_2,3,6+8);
     PUTRGB1(out_1,py_1,3,6);
 
     dst_1[0]= out_1;
-    dst_2[0]= out_2;
 CLOSEYUV2RGBFUNC(1)
 
 SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c)
 {
     SwsFunc t = NULL;
 #if HAVE_MMX
-     t = ff_yuv2rgb_init_mmx(c);
+    t = ff_yuv2rgb_init_mmx(c);
 #endif
 #if HAVE_VIS
     t = ff_yuv2rgb_init_vis(c);
Index: libswscale/x86/yuv2rgb_template.c
===================================================================
--- libswscale/x86/yuv2rgb_template.c	(revision 32669)
+++ libswscale/x86/yuv2rgb_template.c	(working copy)
@@ -50,17 +50,14 @@
     if (h_size * depth > FFABS(dstStride[0]))                        \
         h_size -= 8;                                                 \
                                                                      \
-    if (c->srcFormat == PIX_FMT_YUV422P) {                           \
-        srcStride[1] *= 2;                                           \
-        srcStride[2] *= 2;                                           \
-    }                                                                \
+    vshift = c->srcFormat == PIX_FMT_YUV420P;                        \
                                                                      \
     __asm__ volatile ("pxor %mm4, %mm4\n\t");                        \
     for (y = 0; y < srcSliceH; y++) {                                \
         uint8_t *image    = dst[0] + (y + srcSliceY) * dstStride[0]; \
         const uint8_t *py = src[0] +               y * srcStride[0]; \
-        const uint8_t *pu = src[1] +        (y >> 1) * srcStride[1]; \
-        const uint8_t *pv = src[2] +        (y >> 1) * srcStride[2]; \
+        const uint8_t *pu = src[1] +   (y >> vshift) * srcStride[1]; \
+        const uint8_t *pv = src[2] +   (y >> vshift) * srcStride[2]; \
         x86_reg index = -h_size / 2;                                 \
 
 #define YUV2RGB_INITIAL_LOAD          \
@@ -193,7 +190,7 @@
                                        int srcSliceY, int srcSliceH,
                                        uint8_t *dst[], int dstStride[])
 {
-    int y, h_size;
+    int y, h_size, vshift;
 
     YUV2RGB_LOOP(2)
 
@@ -221,7 +218,7 @@
                                        int srcSliceY, int srcSliceH,
                                        uint8_t *dst[], int dstStride[])
 {
-    int y, h_size;
+    int y, h_size, vshift;
 
     YUV2RGB_LOOP(2)
 
@@ -310,7 +307,7 @@
                                        int srcSliceY, int srcSliceH,
                                        uint8_t *dst[], int dstStride[])
 {
-    int y, h_size;
+    int y, h_size, vshift;
 
     YUV2RGB_LOOP(3)
 
@@ -328,7 +325,7 @@
                                        int srcSliceY, int srcSliceH,
                                        uint8_t *dst[], int dstStride[])
 {
-    int y, h_size;
+    int y, h_size, vshift;
 
     YUV2RGB_LOOP(3)
 
@@ -371,7 +368,7 @@
                                        int srcSliceY, int srcSliceH,
                                        uint8_t *dst[], int dstStride[])
 {
-    int y, h_size;
+    int y, h_size, vshift;
 
     YUV2RGB_LOOP(4)
 
@@ -392,7 +389,7 @@
                                         uint8_t *dst[], int dstStride[])
 {
 #if HAVE_7REGS
-    int y, h_size;
+    int y, h_size, vshift;
 
     YUV2RGB_LOOP(4)
 
@@ -414,7 +411,7 @@
                                        int srcSliceY, int srcSliceH,
                                        uint8_t *dst[], int dstStride[])
 {
-    int y, h_size;
+    int y, h_size, vshift;
 
     YUV2RGB_LOOP(4)
 
@@ -435,7 +432,7 @@
                                         uint8_t *dst[], int dstStride[])
 {
 #if HAVE_7REGS
-    int y, h_size;
+    int y, h_size, vshift;
 
     YUV2RGB_LOOP(4)
 
