summaryrefslogtreecommitdiff
path: root/libavdevice
diff options
context:
space:
mode:
authorStefano Sabatini <stefano.sabatini-lala@poste.it>2008-12-17 23:58:28 +0000
committerStefano Sabatini <stefano.sabatini-lala@poste.it>2008-12-17 23:58:28 +0000
commit7bbacf9a0c26eafbc098fbb928ad63153aa6ac8a (patch)
treecf5fb404c06c88a16e537a7372906b65d695db7b /libavdevice
parent406c5808541dc5e1b5abf639a198807e07f9b7db (diff)
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
Diffstat (limited to 'libavdevice')
-rw-r--r--libavdevice/v4l.c12
1 files 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;