From 7bbacf9a0c26eafbc098fbb928ad63153aa6ac8a Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Wed, 17 Dec 2008 23:58:28 +0000 Subject: Implement size autodetection if one of the width and height AVFormatParameters for grab_read_header() is non-positive. Originally committed as revision 16199 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavdevice/v4l.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libavdevice/v4l.c b/libavdevice/v4l.c index 1978ab4bb2..5b9d5f8a02 100644 --- a/libavdevice/v4l.c +++ b/libavdevice/v4l.c @@ -78,10 +78,6 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) int j; int vformat_num = FF_ARRAY_ELEMS(video_formats); - if (ap->width <= 0 || ap->height <= 0) { - av_log(s1, AV_LOG_ERROR, "Wrong size (%dx%d)\n", ap->width, ap->height); - return -1; - } if (ap->time_base.den <= 0) { av_log(s1, AV_LOG_ERROR, "Wrong time base (%d)\n", ap->time_base.den); return -1; @@ -107,6 +103,14 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) goto fail; } + /* no values set, autodetect them */ + if (s->video_win.width <= 0 || s->video_win.height <= 0) { + if (ioctl(video_fd, VIDIOCGWIN, &s->video_win, sizeof(s->video_win)) < 0) { + av_log(s1, AV_LOG_ERROR, "VIDIOCGWIN: %s\n", strerror(errno)); + goto fail; + } + } + if (ioctl(video_fd,VIDIOCGCAP, &s->video_cap) < 0) { av_log(s1, AV_LOG_ERROR, "VIDIOCGCAP: %s\n", strerror(errno)); goto fail; -- cgit v1.2.3