changed icvSetVideoSize function (ticket #1067)
authorAlexander Reshetnikov <no@email>
Wed, 28 Mar 2012 16:14:36 +0000 (16:14 +0000)
committerAlexander Reshetnikov <no@email>
Wed, 28 Mar 2012 16:14:36 +0000 (16:14 +0000)
modules/highgui/src/cap_v4l.cpp

index cf3ef89..5f9e111 100644 (file)
@@ -2427,15 +2427,22 @@ static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h) {
   if (V4L2_SUPPORT == 1)
   {
 
-    CLEAR (capture->crop);
-    capture->crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-    capture->crop.c.left       = 0;
-    capture->crop.c.top        = 0;
-    capture->crop.c.height     = h*24;
-    capture->crop.c.width      = w*24;
-
-    /* set the crop area, but don't exit if the device don't support croping */
-    xioctl (capture->deviceHandle, VIDIOC_S_CROP, &capture->crop);
+    CLEAR (capture->cropcap);
+    capture->cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
+    if (xioctl (capture->deviceHandle, VIDIOC_CROPCAP, &capture->cropcap) < 0) {
+        fprintf(stderr, "HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP\n");
+    } else {
+
+        CLEAR (capture->crop);
+        capture->crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+        capture->crop.c= capture->cropcap.defrect;
+
+        /* set the crop area, but don't exit if the device don't support croping */
+        if (xioctl (capture->deviceHandle, VIDIOC_S_CROP, &capture->crop) < 0) {
+            fprintf(stderr, "HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP\n");
+        }
+    }
 
     CLEAR (capture->form);
     capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;