# HG changeset patch # User lucabe # Date 1151497102 0 # Node ID 246df8e6aab78f0cb7126295b1346ad50e5ddb42 # Parent d65cd7c3573e065b6deb7625a17ed28d53a70597 Properly set the image depth diff -r d65cd7c3573e -r 246df8e6aab7 grab.c --- a/grab.c Wed Jun 28 10:51:56 2006 +0000 +++ b/grab.c Wed Jun 28 12:18:22 2006 +0000 @@ -62,7 +62,7 @@ int width, height; int video_fd, frame_size; int ret, frame_rate, frame_rate_base; - int desired_palette; + int desired_palette, desired_depth; struct video_tuner tuner; struct video_audio audio; struct video_picture pict; @@ -118,12 +118,16 @@ } desired_palette = -1; - if (st->codec->pix_fmt == PIX_FMT_YUV420P) { + desired_depth = -1; + if (ap->pix_fmt == PIX_FMT_YUV420P) { desired_palette = VIDEO_PALETTE_YUV420P; - } else if (st->codec->pix_fmt == PIX_FMT_YUV422) { + desired_depth = 12; + } else if (ap->pix_fmt == PIX_FMT_YUV422) { desired_palette = VIDEO_PALETTE_YUV422; - } else if (st->codec->pix_fmt == PIX_FMT_BGR24) { + desired_depth = 16; + } else if (ap->pix_fmt == PIX_FMT_BGR24) { desired_palette = VIDEO_PALETTE_RGB24; + desired_depth = 24; } /* set tv standard */ @@ -155,14 +159,18 @@ #endif /* try to choose a suitable video format */ pict.palette = desired_palette; + pict.depth= desired_depth; if (desired_palette == -1 || (ret = ioctl(video_fd, VIDIOCSPICT, &pict)) < 0) { pict.palette=VIDEO_PALETTE_YUV420P; + pict.depth=12; ret = ioctl(video_fd, VIDIOCSPICT, &pict); if (ret < 0) { pict.palette=VIDEO_PALETTE_YUV422; + pict.depth=16; ret = ioctl(video_fd, VIDIOCSPICT, &pict); if (ret < 0) { pict.palette=VIDEO_PALETTE_RGB24; + pict.depth=24; ret = ioctl(video_fd, VIDIOCSPICT, &pict); if (ret < 0) goto fail1;