[Ffmpeg-devel] [PATCH] grabbing with V4L (original) (raw)
Flavio Pimentel Duarte flaviop
Mon Feb 20 17:26:06 CET 2006
- Previous message: [Ffmpeg-devel] [PATCH] grabbing with V4L
- Next message: [Ffmpeg-devel] [PATCH] grabbing with V4L
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, 17 Feb 2006, Luca Abeni wrote:
Hi Flavio,
On Wed, 2006-02-15 at 14:34 +0100, Luca Abeni wrote: [...]
The patch I've sent didn't create a single new line, it only moves some image settings initialization to outside the if statement. It was also not my idea, I borrowed from mplayer ;) Yes, looking at the patch I agree that it should not create problems. I'll test it tomorrow, just as a confirmation. I tested your patch, and verified that it does not create any regression. Uhmm... I still do not understand why it is needed by your webcam driver but the "regular" bttv driver does not need it... Anyway, I think your patch is good because it permits to avoid some code duplication (in fact, after applying your patch all the code around line 212 becomes useless). So, I went ahead and I removed some code that (I think) is obsoleted by your patch (since desiredpalette is already set by previous code). Does the attached patch (your patch + some useless code removal) work for you? The patch you sent me did not work. It issues the following error: $ ./ffmpeg -s 320x240 -an -vd /dev/video0 output.mpg FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard configuration: --disable-v4l2 libavutil version: 49.0.0 libavcodec version: 51.7.0 libavformat version: 50.3.0 built on Feb 20 2006 11:05:32, gcc: 3.4.3 (Mandrakelinux 10.2 3.4.3-7mdk) File 'output.mpg' already exists. Overwrite ? [y/N] y [video4linux @ 0x82c8ef4]Fatal: grab device does not support suitable format Could not find video grab device
I had to add just one line to make it work. The modified patch is
attached.
I also have one question: how do I force ffmpeg to use v4l instead
v4l2 ? Is there an option for it ? In my tests I had to compile ffmpeg using '--disable-v4l2' option, otherwise it uses v4l2.
Flavio -------------- next part -------------- --- ffmpeg/libavformat/grab.c 2006-02-20 12:21:43.000000000 -0500 +++ ffmpeg.new/libavformat/grab.c 2006-02-20 13:15:20.000000000 -0500 @@ -65,6 +65,7 @@ static int grab_read_header(AVFormatCont int desired_palette; struct video_tuner tuner; struct video_audio audio; + struct video_picture pict; const char video_device; int j; @@ -135,11 +136,37 @@ static int grab_read_header(AVFormatCont audio.flags &= ~VIDEO_AUDIO_MUTE; ioctl(video_fd, VIDIOCSAUDIO, &audio); + ioctl(video_fd, VIDIOCGPICT, &pict); +#if 0 + printf("v4l: colour=%d hue=%d brightness=%d constrast=%d whiteness=%d\n", + pict.colour, + pict.hue, + pict.brightness, + pict.contrast, + pict.whiteness); +#endif + / try to choose a suitable video format / + pict.palette = desired_palette; + if (desired_palette == -1 || (ret = ioctl(video_fd, VIDIOCSPICT, &pict)) < 0) { + pict.palette=VIDEO_PALETTE_YUV420P; + ret = ioctl(video_fd, VIDIOCSPICT, &pict); + if (ret < 0) { + pict.palette=VIDEO_PALETTE_YUV422; + ret = ioctl(video_fd, VIDIOCSPICT, &pict); + if (ret < 0) { + pict.palette=VIDEO_PALETTE_RGB24; + ret = ioctl(video_fd, VIDIOCSPICT, &pict); + if (ret < 0) + goto fail1; + } + } + } + desired_palette = pict.palette; + ret = ioctl(video_fd,VIDIOCGMBUF,&s->gb_buffers); if (ret < 0) { / try to use read based access / struct video_window win; - struct video_picture pict; int val; win.x = 0; @@ -151,32 +178,6 @@ static int grab_read_header(AVFormatCont ioctl(video_fd, VIDIOCSWIN, &win); - ioctl(video_fd, VIDIOCGPICT, &pict); -#if 0 - printf("v4l: colour=%d hue=%d brightness=%d constrast=%d whiteness=%d\n", - pict.colour, - pict.hue, - pict.brightness, - pict.contrast, - pict.whiteness); -#endif - / try to choose a suitable video format */ - pict.palette = desired_palette; - if (desired_palette == -1 || (ret = ioctl(video_fd, VIDIOCSPICT, &pict)) < 0) { - pict.palette=VIDEO_PALETTE_YUV420P; - ret = ioctl(video_fd, VIDIOCSPICT, &pict); - if (ret < 0) { - pict.palette=VIDEO_PALETTE_YUV422; - ret = ioctl(video_fd, VIDIOCSPICT, &pict); - if (ret < 0) { - pict.palette=VIDEO_PALETTE_RGB24; - ret = ioctl(video_fd, VIDIOCSPICT, &pict); - if (ret < 0) - goto fail1; - } - } - }
s->frame_format = pict.palette;
val = 1;
@@ -209,22 +210,7 @@ static int grab_read_header(AVFormatCont s->gb_buf.width = width; s->gb_buf.format = desired_palette; - if (desired_palette == -1 || (ret = ioctl(video_fd, VIDIOCMCAPTURE, &s->gb_buf)) < 0) { - s->gb_buf.format = VIDEO_PALETTE_YUV420P;
ret = ioctl(video_fd, VIDIOCMCAPTURE, &s->gb_buf);
if (ret < 0 && errno != EAGAIN) {
/* try YUV422 */
s->gb_buf.format = VIDEO_PALETTE_YUV422;
ret = ioctl(video_fd, VIDIOCMCAPTURE, &s->gb_buf);
if (ret < 0 && errno != EAGAIN) {
/* try RGB24 */
s->gb_buf.format = VIDEO_PALETTE_RGB24;
ret = ioctl(video_fd, VIDIOCMCAPTURE, &s->gb_buf);
}
}
}
ret = ioctl(video_fd, VIDIOCMCAPTURE, &s->gb_buf); if (ret < 0) { if (errno != EAGAIN) { fail1:
- Previous message: [Ffmpeg-devel] [PATCH] grabbing with V4L
- Next message: [Ffmpeg-devel] [PATCH] grabbing with V4L
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]