Package: luvcview
Version: 1:0.2.4-1
Severity: wishlist
Tags: patch
Now, luvcview supports only the video format of YUYV/yuv and MJPG/jpg.
The device of UVC might use other video formats.
For example, Macbook iSight is UYVY format.
I attach patch. This patch support UYVY format.
I tested on Macbook iSight only display.
Please apply this patch.
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.25-1-686-bigmem (SMP w/2 CPU cores)
Locale: LANG=ja_JP.UTF-8, LC_CTYPE=ja_JP.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages luvcview depends on:
ii libc6 2.7-11 GNU C Library: Shared libraries
ii libsdl1.2debian 1.2.13-2 Simple DirectMedia Layer
luvcview recommends no packages.
-- no debconf information
--
Nobuhiro Iwamatsu
--- ./luvcview.c 2008-05-17 19:43:58.000000000 +0900
+++ ./luvcview.c 2008-05-17 19:49:29.000000000 +0900
@@ -220,6 +220,7 @@
const char *videodevice = NULL;
const char *mode = NULL;
int format = V4L2_PIX_FMT_MJPEG;
+ int sdl_format = SDL_YUY2_OVERLAY;
int i;
int grabmethod = 1;
int width = 640;
@@ -266,6 +267,9 @@
if (strcasecmp(mode, "yuv") == 0 || strcasecmp(mode, "YUYV") == 0) {
format = V4L2_PIX_FMT_YUYV;
+ } else if (strcasecmp(mode, "uyvy") == 0 || strcasecmp(mode, "UYVY") == 0) {
+ format = V4L2_PIX_FMT_UYVY;
+ sdl_format = SDL_UYVY_OVERLAY;
} else if (strcasecmp(mode, "jpg") == 0 || strcasecmp(mode, "MJPG") == 0) {
format = V4L2_PIX_FMT_MJPEG;
} else {
@@ -344,7 +348,7 @@
printf("-d /dev/videoX use videoX device\n");
printf("-g use read method for grab instead mmap\n");
printf("-w disable SDL hardware accel.\n");
- printf("-f choose video format (YUYV/yuv and MJPG/jpg are valid, MJPG is default)\n");
+ printf("-f choose video format (YUYV/yuv, UYVY/uyvy and MJPG/jpg are valid, MJPG is default)\n");
printf("-i fps use specified frame interval\n");
printf("-s widthxheight use specified input size\n");
printf("-c enable raw frame capturing for the first frame\n");
@@ -448,7 +452,7 @@
overlay =
SDL_CreateYUVOverlay(videoIn->width, videoIn->height + 32,
- SDL_YUY2_OVERLAY, pscreen);
+ sdl_format, pscreen);
p = (unsigned char *) overlay->pixels[0];
drect.x = 0;
drect.y = 0;
--- ./v4l2uvc.c 2008-05-17 19:52:13.000000000 +0900
+++ ./v4l2uvc.c 2008-05-17 19:55:35.000000000 +0900
@@ -132,6 +132,7 @@
8) * 2);
break;
case V4L2_PIX_FMT_YUYV:
+ case V4L2_PIX_FMT_UYVY:
vd->framebuffer =
(unsigned char *) calloc(1, (size_t) vd->framesizeIn);
break;
@@ -367,7 +368,9 @@
requested_format_found = 1;
break;
}
- if(device_formats[i] == V4L2_PIX_FMT_MJPEG || device_formats[i] == V4L2_PIX_FMT_YUYV)
+ if(device_formats[i] == V4L2_PIX_FMT_MJPEG || device_formats[i] == V4L2_PIX_FMT_YUYV
+ || V4L2_PIX_FMT_UYVY == device_formats[i])
+
fallback_format = i;
}
if(requested_format_found) {
@@ -641,6 +644,7 @@
printf("bytes in used %d\n", vd->buf.bytesused);
break;
case V4L2_PIX_FMT_YUYV:
+ case V4L2_PIX_FMT_UYVY:
if (vd->buf.bytesused > vd->framesizeIn)
memcpy(vd->framebuffer, vd->mem[vd->buf.index],
(size_t) vd->framesizeIn);