I have a tv card that outputs only YUV422 (packed), but both
mplayer CVS-021029-16:03-2.95.4:
mplayer -tv on:driver=v4l:norm=NTSC:width=640:height=480:outfmt=yuy2)
and xawtv 3.72:
xawtv -geometry 640x480 -v 2
seem to display it incorrectly (everything is pink and green).
Incidentally, my X server is running in 16bpp RGB565 mode and the
xawtv output shows YUV422 being selected as the output palette and an
attempt to convert the image:
v4l: getimage
ioctl: VIDIOCMCAPTURE(0,fmt=7,size=640x480): ok
ioctl: VIDIOCSYNC(0): ok
gd: convert
Since both programs seem to behave the same, I figure it might be a problem
on my end.
The video4linux driver has the following code:
int lgv_5480tvr_ioctl (struct video_device *dev,
unsigned int cmd,
void *arg)
{
switch (cmd) {
case VIDIOCSPICT: {
struct video_picture v;
if (copy_from_user(&v, arg, sizeof(v)))
return -EFAULT;
if (v.palette != VIDEO_PALETTE_YUV422) {
return -EINVAL;
}
...
return 0;
}
case VIDIOCMCAPTURE: {
struct video_mmap v;
if (copy_from_user(&v, arg, sizeof(v)))
return -EFAULT;
if (v.format != VIDEO_PALETTE_YUV422) {
return -EINVAL;
}
...
return 0;
}
...
}
This is the code I use to correctly convert to RGB24:
{
int i, j, y, cr, cb, r, g, b;
unsigned char *p1, *p2;
int pitch_bytes;
char *p;
FILE *fp;
fp = fopen ("screen-cap.ppm", "w");
fprintf (fp, "P6\n# CREATOR: app (YUV_422)\n%d %d\n255",
capW, capH);
p = video_data; /* raw captured data */
pitch_bytes = capW * 2;
p1 = p;
for (j = 0; j < capH; j++) {
cr = cb = 0;
p2 = p1;
for (i = 0; i < capW; i++) {
if (i & 1)
cr = *p2++;
else
cb = *p2++;
y = *p2++;
/* YCrCb to RGB conversion formula from
* "Video Demystified" by Keith Jack.
* (ISBN 1-878707-09-4).
*/
b = 1.164 * (y - 16) + 2.018 * (cb -
128);
g = 1.164 * (y - 16) - 0.813 * (cr - 128) - 0.391 * (cb -
128);
r = 1.164 * (y - 16) + 1.596 * (cr - 128);
#define LIMIT(x) ((x) = ((x) < 0) ? 0 : ((x) > 255) ? 255 : (x))
LIMIT (r);
LIMIT (g);
LIMIT (b);
putc (r, fp);
putc (g, fp);
putc (b, fp);
}
p1 += pitch_bytes;
}
fclose (fp);
}
Do I actually have YUV422 (packed) or is it some other wierd YUV422
thing??
--
video4linux-list mailing list
Unsubscribe mailto:[EMAIL PROTECTED]?subject=unsubscribe
https://listman.redhat.com/mailman/listinfo/video4linux-list