OK, that wasn't so clever...
The rest of the patch is attached... :)
/August.
--
Bj|rn Augustsson DCE/DFS Sysadmin IT Systems & Services
Chalmers tekniska h|gskola Chalmers University of Technology
"Damn spooky analog crap." -- John Carmack.
--- /dev/null 2003-01-11 23:38:27.000000000 +0100
+++ xc/programs/Xserver/hw/xfree86/common/xvconv.c 2003-02-24 03:17:20.000000000
+0100
@@ -0,0 +1,79 @@
+/* $XFree86: $ */
+
+/*
+** File:
+**
+** xvconv.c --- Xv color conversion routine.
+**
+** Author:
+**
+** Bjorn Augustsson <[EMAIL PROTECTED]>
+**
+** Revisions:
+**
+** 11.feb.2003 august
+** - centralize XXXXCopyMungedData from many drivers
+**
+*/
+
+#include "Xmd.h" /* For CARDXX */
+#include "Xarch.h" /* For endianness macros */
+#include "xvconv.h"
+
+void
+YV12toUYVY(
+ const unsigned char *src1,
+ const unsigned char *src2,
+ const unsigned char *src3,
+ unsigned char *dst1,
+ int srcPitch,
+ int srcPitch2,
+ int dstPitch,
+ int h,
+ int w
+){
+ CARD32 *dst;
+ const CARD8 *s1, *s2, *s3;
+ int i, j;
+
+ w >>= 1;
+
+ for(j = 0; j < h; j++) {
+ dst = (CARD32*)dst1;
+ s1 = src1; s2 = src2; s3 = src3;
+ i = w;
+ while(i > 4) {
+#if X_BYTE_ORDER == X_BIG_ENDIAN
+ dst[0] = (s1[0] << 24) | (s1[1] << 8) | (s3[0] << 16) | s2[0];
+ dst[1] = (s1[2] << 24) | (s1[3] << 8) | (s3[1] << 16) | s2[1];
+ dst[2] = (s1[4] << 24) | (s1[5] << 8) | (s3[2] << 16) | s2[2];
+ dst[3] = (s1[6] << 24) | (s1[7] << 8) | (s3[3] << 16) | s2[3];
+#else
+ dst[0] = s1[0] | (s1[1] << 16) | (s3[0] << 8) | (s2[0] << 24);
+ dst[1] = s1[2] | (s1[3] << 16) | (s3[1] << 8) | (s2[1] << 24);
+ dst[2] = s1[4] | (s1[5] << 16) | (s3[2] << 8) | (s2[2] << 24);
+ dst[3] = s1[6] | (s1[7] << 16) | (s3[3] << 8) | (s2[3] << 24);
+#endif
+ dst += 4; s2 += 4; s3 += 4; s1 += 8;
+ i -= 4;
+ }
+
+ while(i--) {
+#if X_BYTE_ORDER == X_BIG_ENDIAN
+ dst[0] = (s1[0] << 24) | (s1[1] << 8) | (s3[0] << 16) | s2[0];
+#else
+ dst[0] = s1[0] | (s1[1] << 16) | (s3[0] << 8) | (s2[0] << 24);
+#endif
+ dst++; s2++; s3++;
+ s1 += 2;
+ }
+
+ dst1 += dstPitch;
+ src1 += srcPitch;
+ if(j & 1) {
+ src2 += srcPitch2;
+ src3 += srcPitch2;
+ }
+ }
+}
+
--- /dev/null 2003-01-11 23:38:27.000000000 +0100
+++ xc/programs/Xserver/hw/xfree86/common/xvconv.h 2003-02-24 03:19:02.000000000
+0100
@@ -0,0 +1,20 @@
+/* $XFree86: $ */
+
+#ifndef _XVCONV_H
+#define _XVCONV_H
+
+
+void YV12toUYVY(
+ const unsigned char *src1,
+ const unsigned char *src2,
+ const unsigned char *src3,
+ unsigned char *dst1,
+ int srcPitch,
+ int srcPitch2,
+ int dstPitch,
+ int h,
+ int w);
+
+
+#endif /* _XVCONV_H */
+