summaryrefslogtreecommitdiffstats
path: root/sys/v4l2/v4l2src_calls.c
diff options
context:
space:
mode:
authorMark Nauwelaerts <manauw@skynet.be>2007-08-22 08:22:50 +0000
committerStefan Kost <ensonic@users.sourceforge.net>2007-08-22 08:22:50 +0000
commit09a56877059b71658a861bb462eaeaa784aae1e1 (patch)
treecc72067ff9e1586258633be1982fd96109cabf83 /sys/v4l2/v4l2src_calls.c
parent7d92376d3b9217c21731aa3c6d0966aded892e1f (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.c43
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,