diff options
author | Mark Nauwelaerts <manauw@skynet.be> | 2007-08-22 08:22:50 +0000 |
---|---|---|
committer | Stefan Kost <ensonic@users.sourceforge.net> | 2007-08-22 08:22:50 +0000 |
commit | 09a56877059b71658a861bb462eaeaa784aae1e1 (patch) | |
tree | cc72067ff9e1586258633be1982fd96109cabf83 /sys/v4l2/v4l2src_calls.c | |
parent | 7d92376d3b9217c21731aa3c6d0966aded892e1f (diff) |
sys/v4l2/v4l2src_calls.c: Handle optional v4l2 ioctls gracefully.
Original commit message from CVS:
patch by: Mark Nauwelaerts <manauw@skynet.be>
* sys/v4l2/v4l2src_calls.c:
Handle optional v4l2 ioctls gracefully.
Diffstat (limited to 'sys/v4l2/v4l2src_calls.c')
-rw-r--r-- | sys/v4l2/v4l2src_calls.c | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/sys/v4l2/v4l2src_calls.c b/sys/v4l2/v4l2src_calls.c index 87f2234f..0006f0e0 100644 --- a/sys/v4l2/v4l2src_calls.c +++ b/sys/v4l2/v4l2src_calls.c @@ -892,21 +892,28 @@ gst_v4l2src_set_capture (GstV4l2Src * v4l2src, guint32 pixelformat, memset (&stream, 0x00, sizeof (struct v4l2_streamparm)); stream.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (ioctl (fd, VIDIOC_G_PARM, &stream) < 0) - goto get_parm_failed; + if (ioctl (fd, VIDIOC_G_PARM, &stream) < 0) { + GST_ELEMENT_WARNING (v4l2src, RESOURCE, SETTINGS, + (_("Could not get parameters on device '%s'"), + v4l2src->v4l2object->videodev), GST_ERROR_SYSTEM); + } else { /* seems no point in SET, if can't get GET */ + /* Note: V4L2 gives us the frame interval, we need the frame rate */ + stream.parm.capture.timeperframe.numerator = fps_d; + stream.parm.capture.timeperframe.denominator = fps_n; - /* Note: V4L2 gives us the frame interval, we need the frame rate */ - stream.parm.capture.timeperframe.numerator = fps_d; - stream.parm.capture.timeperframe.denominator = fps_n; + if (ioctl (fd, VIDIOC_S_PARM, &stream) < 0) { + GST_ELEMENT_WARNING (v4l2src, RESOURCE, SETTINGS, + (_("Could not set parameters on device '%s'"), + v4l2src->v4l2object->videodev), GST_ERROR_SYSTEM); - if (ioctl (fd, VIDIOC_S_PARM, &stream) < 0) - goto set_parm_failed; + /* FIXME: better test for fraction equality */ + if (stream.parm.capture.timeperframe.numerator != fps_d + || stream.parm.capture.timeperframe.denominator != fps_n) + goto invalid_framerate; + } + } - /* FIXME: better test for fraction equality */ - if (stream.parm.capture.timeperframe.numerator != fps_d - || stream.parm.capture.timeperframe.denominator != fps_n) - goto invalid_framerate; return TRUE; @@ -948,20 +955,6 @@ invalid_pixelformat: GST_FOURCC_ARGS (format.fmt.pix.pixelformat))); return FALSE; } -get_parm_failed: - { - GST_ELEMENT_ERROR (v4l2src, RESOURCE, SETTINGS, - (_("Could not get parameters on device '%s'"), - v4l2src->v4l2object->videodev), GST_ERROR_SYSTEM); - return FALSE; - } -set_parm_failed: - { - GST_ELEMENT_ERROR (v4l2src, RESOURCE, SETTINGS, - (_("Could not set parameters on device '%s'"), - v4l2src->v4l2object->videodev), GST_ERROR_SYSTEM); - return FALSE; - } invalid_framerate: { GST_ELEMENT_ERROR (v4l2src, RESOURCE, SETTINGS, |