diff -uNrB vgrabbj-0.9.6/ccvt_c.c vgrabbj-0.9.6.patched/ccvt_c.c
--- vgrabbj-0.9.6/ccvt_c.c	2004-01-01 19:57:37.000000000 +0100
+++ vgrabbj-0.9.6.patched/ccvt_c.c	2005-09-23 17:41:21.000000000 +0200
@@ -345,6 +345,103 @@
 }
 
 
+/* This is a really simplistic approach. Speedups are welcomed. */
+/* Derived this from the above yuyv converter                   */
+/* Format: UYVY UYVY UYVY UYVY...                               */
+static void ccvt_uyvy(int width, int height, unsigned char *src, unsigned char *dst, int push)
+{
+	int line, col, linewidth;
+	int y, yy;
+	int u, v;
+	int vr, ug, vg, ub;
+	int r, g, b;
+	unsigned char *py, *pu, *pv;
+
+	linewidth = width - (width >> 1);
+	py = src + 1;
+	pu = src;
+	pv = src + 2;
+
+	y = *py;
+	yy = y << 8;
+	u = *pu - 128;
+	ug =   88 * u;
+	ub =  454 * u;
+	v = *pv - 128;
+	vg =  183 * v;
+	vr =  359 * v;
+
+	for (line = 0; line < height; line++) {
+		for (col = 0; col < width; col++) {
+			r = LIMIT(yy +      vr);
+			g = LIMIT(yy - ug - vg);
+			b = LIMIT(yy + ub     );
+			switch(push) {
+			case PUSH_RGB24:
+				*dst++ = r;
+				*dst++ = g;
+				*dst++ = b;
+				break;
+
+			case PUSH_BGR24:
+				*dst++ = b;
+				*dst++ = g;
+				*dst++ = r;
+				break;
+			
+			case PUSH_RGB32:
+				*dst++ = r;
+				*dst++ = g;
+				*dst++ = b;
+				*dst++ = 0;
+				break;
+
+			case PUSH_BGR32:
+				*dst++ = b;
+				*dst++ = g;
+				*dst++ = r;
+				*dst++ = 0;
+				break;
+			}
+			
+			py += 2;
+			y = *py;
+			yy = y << 8;
+			if ( (col & 1) == 1) {
+			  pu += 4; // skip yvy every second y
+			  pv += 4; // skip yuy every second y
+			}
+			u = *pu - 128;
+			ug =   88 * u;
+			ub =  454 * u;
+			v = *pv - 128;
+			vg =  183 * v;
+			vr =  359 * v;
+		} // ..for col 
+	} /* ..for line */
+}
+
+void ccvt_uyvy_rgb24(int width, int height, void *src, void *dst)
+{
+	ccvt_uyvy(width, height, (unsigned char *)src, (unsigned char *)dst, PUSH_RGB24);
+}
+
+void ccvt_uyvy_bgr24(int width, int height, void *src, void *dst)
+{
+	ccvt_uyvy(width, height, (unsigned char *)src, (unsigned char *)dst, PUSH_BGR24);
+}
+
+void ccvt_uyvy_rgb32(int width, int height, void *src, void *dst)
+{
+	ccvt_uyvy(width, height, (unsigned char *)src, (unsigned char *)dst, PUSH_RGB32);
+}
+
+void ccvt_uyvy_bgr32(int width, int height, void *src, void *dst)
+{
+	ccvt_uyvy(width, height, (unsigned char *)src, (unsigned char *)dst, PUSH_BGR32);
+}
+
+
 void ccvt_420i_420p(int width, int height, void *src, void *dsty, void *dstu, void *dstv)
 {
 	short *s, *dy, *du, *dv;
@@ -405,3 +502,41 @@
 	} /* ..for line */
 }
 
+void ccvt_420i_uyvy(int width, int height, void *src, void *dst)
+{
+	int line, col, linewidth;
+	unsigned char *py, *pu, *pv, *d;
+
+	linewidth = width + (width >> 1);
+	py = (unsigned char *)src;
+	pu = src + 4;
+	pv = pu + linewidth;
+	d = (unsigned char *)dst;
+
+	for (line = 0; line < height; line++) {
+		for (col = 0; col < width; col += 4) {
+			/* four pixels in one go */
+			*d++ = *pu++;
+			*d++ = *py++;
+			*d++ = *pv++;
+			*d++ = *py++;
+			
+			*d++ = *pu++;
+			*d++ = *py++;
+			*d++ = *pv++;
+			*d++ = *py++;
+
+			py += 2;
+			pu += 4;
+			pv += 4;
+		} /* ..for col */
+		if (line & 1) { // odd line: go to next band
+			pu += linewidth;
+			pv += linewidth;
+		}
+		else { // rewind u/v pointers
+			pu -= linewidth;
+			pv -= linewidth;
+		}
+	} /* ..for line */
+}
diff -uNrB vgrabbj-0.9.6/ccvt.h vgrabbj-0.9.6.patched/ccvt.h
--- vgrabbj-0.9.6/ccvt.h	2001-07-22 19:16:33.000000000 +0200
+++ vgrabbj-0.9.6.patched/ccvt.h	2005-09-23 17:41:21.000000000 +0200
@@ -48,6 +48,8 @@
            YUYV YUYV YUYV ...   N lines
            The U/V data is subsampled by 2 in horizontal direction only.
 
+   uyvy = UYVY UYVY UYVY ...   N lines
+
    bgr24 = 3 bytes per pixel, in the order Blue Green Red (whoever came up
            with that idea...)
    rgb24 = 3 bytes per pixel, in the order Red Green Blue (which is sensible)
@@ -76,6 +78,12 @@
 void ccvt_yuyv_rgb24(int width, int height, void *src, void *dst);
 void ccvt_yuyv_bgr24(int width, int height, void *src, void *dst);
 
+/* 4:2:2 UYVY interlaced to RGB/BGR */
+void ccvt_uyvy_rgb32(int width, int height, void *src, void *dst);
+void ccvt_uyvy_bgr32(int width, int height, void *src, void *dst);
+void ccvt_uyvy_rgb24(int width, int height, void *src, void *dst);
+void ccvt_uyvy_bgr24(int width, int height, void *src, void *dst);
+
 /* 4:2:0 YUV planar to RGB/BGR     */
 //void ccvt_420p_rgb32(int width, int height, void *srcy, void *srcu, void *srcv, void *dst);
 //void ccvt_420p_bgr32(int width, int height, void *srcy, void *srcu, void *srcv, void *dst);
@@ -89,6 +97,7 @@
 /* Go from 420i to other yuv formats */
 void ccvt_420i_420p(int width, int height, void *src, void *dsty, void *dstu, void *dstv);
 void ccvt_420i_yuyv(int width, int height, void *src, void *dst);
+void ccvt_420i_uyvy(int width, int height, void *src, void *dst);
 
 #ifdef __cplusplus
 }
diff -uNrB vgrabbj-0.9.6/v_config.c vgrabbj-0.9.6.patched/v_config.c
--- vgrabbj-0.9.6/v_config.c	2004-01-01 19:57:37.000000000 +0100
+++ vgrabbj-0.9.6.patched/v_config.c	2005-09-23 17:41:21.000000000 +0200
@@ -96,7 +96,7 @@
 	  "Example: %s -l 5 -f /usr/local/image.jpg\n"
 	  "         Would write a single jpeg-image to image.jpg approx. every five seconds\n"
 	  "\n"
-	  "The video stream has to be one of RGB24, RGB32, YUV420, YUV420P or YUYV.\n",
+	  "The video stream has to be one of RGB24, RGB32, YUV420, YUV420P, YUYV or UYVY.\n",
 	  basename(pname), VERSION, basename(pname), MIN_QUALITY, MAX_QUALITY, 
 	  DEFAULT_QUALITY, DEFAULT_WIDTH, DEFAULT_HEIGHT,
 	  DEFAULT_OUTPUT, DEFAULT_VIDEO_DEV, 
@@ -407,13 +407,15 @@
   case VIDEO_PALETTE_YUYV:
   case VIDEO_PALETTE_YUV422: /* equal to YUYV with my cam */
   case VIDEO_PALETTE_RGB32:
+  case VIDEO_PALETTE_UYVY:
     break;
   default:
     if ( (vconf->vpic.palette=try_palette(vconf, VIDEO_PALETTE_RGB24, vconf->dev))  ||
 	 (vconf->vpic.palette=try_palette(vconf, VIDEO_PALETTE_RGB32, vconf->dev))  ||
 	 (vconf->vpic.palette=try_palette(vconf, VIDEO_PALETTE_YUYV, vconf->dev))   ||
 	 (vconf->vpic.palette=try_palette(vconf, VIDEO_PALETTE_YUV420, vconf->dev)) ||
-	 (vconf->vpic.palette=try_palette(vconf, VIDEO_PALETTE_YUV420P, vconf->dev)) )
+	 (vconf->vpic.palette=try_palette(vconf, VIDEO_PALETTE_YUV420P, vconf->dev))||
+	 (vconf->vpic.palette=try_palette(vconf, VIDEO_PALETTE_UYVY, vconf->dev)) )
       ;
     else
       v_error(vconf, LOG_CRIT, "Unable to set supported video-palette");
diff -uNrB vgrabbj-0.9.6/vgrabbj.1 vgrabbj-0.9.6.patched/vgrabbj.1
--- vgrabbj-0.9.6/vgrabbj.1	2004-01-03 18:40:14.000000000 +0100
+++ vgrabbj-0.9.6.patched/vgrabbj.1	2005-09-23 17:41:21.000000000 +0200
@@ -31,7 +31,7 @@
 .\" respectively.
 \fBvgrabbj\fP is a program that will grab images from any v4l-capable 
 device which supports one of the rgb24, rgb32, yuv420, yuv420p, yuyv, 
-or yuv422 palettes and saves the image as a .jpg, .png, or .pnm file. 
+uyvy, or yuv422 palettes and saves the image as a .jpg, .png, or .pnm file. 
 .PP
 Optional, it can timestamp the resulting image, and/or upload it to 
 a ftp-server. Additionally, a daemon-mode is available to do the 
diff -uNrB vgrabbj-0.9.6/vgrabbj.c vgrabbj-0.9.6.patched/vgrabbj.c
--- vgrabbj-0.9.6/vgrabbj.c	2004-01-01 19:57:37.000000000 +0100
+++ vgrabbj-0.9.6.patched/vgrabbj.c	2005-09-23 17:41:21.000000000 +0200
@@ -321,6 +321,11 @@
       
     ccvt_yuyv_bgr24(vconf->win.width, vconf->win.height, vconf->buffer, vconf->o_buffer);
     break;
+  case VIDEO_PALETTE_UYVY:
+    v_error(vconf, LOG_INFO, "Got UYVY, converting...");
+
+    ccvt_uyvy_bgr24(vconf->win.width, vconf->win.height, vconf->buffer, vconf->o_buffer);
+    break;
   default:
     v_error(vconf, LOG_CRIT, "Should not happen - Unknown input image format");
     break;
diff -uNrB vgrabbj-0.9.6/vgrabbj.conf.5 vgrabbj-0.9.6.patched/vgrabbj.conf.5
--- vgrabbj-0.9.6/vgrabbj.conf.5	2004-01-03 18:56:04.000000000 +0100
+++ vgrabbj-0.9.6.patched/vgrabbj.conf.5	2005-09-23 17:41:21.000000000 +0200
@@ -161,7 +161,7 @@
  6  VIDEO_PALETTE_RGB555    555 15bit RGB
  7 *VIDEO_PALETTE_YUV422    YUV422 capture
  8 *VIDEO_PALETTE_YUYV
- 9  VIDEO_PALETTE_UYVY
+ 9 *VIDEO_PALETTE_UYVY
  10*VIDEO_PALETTE_YUV420
  10 VIDEO_PALETTE_YUV411    YUV411 capture
  11 VIDEO_PALETTE_RAW       RAW capture (BT848)
diff -uNrB vgrabbj-0.9.6/v_plist.h vgrabbj-0.9.6.patched/v_plist.h
--- vgrabbj-0.9.6/v_plist.h	2002-10-19 13:38:41.000000000 +0200
+++ vgrabbj-0.9.6.patched/v_plist.h	2005-09-23 17:41:21.000000000 +0200
@@ -31,7 +31,7 @@
   { VIDEO_PALETTE_RGB555, "RGB555",  0, 1 },
   { VIDEO_PALETTE_YUV422, "YUV422",  2, 1 },
   { VIDEO_PALETTE_YUYV,   "YUYV",    2, 1 },
-  { VIDEO_PALETTE_UYVY,   "UYVY",    0, 1 },
+  { VIDEO_PALETTE_UYVY,   "UYVY",    2, 1 },
   { VIDEO_PALETTE_YUV420, "YUV420",  3, 2 },
   { VIDEO_PALETTE_YUV411, "YUV411",  0, 1 },
   { VIDEO_PALETTE_RAW,    "RAW",     0, 1 },
