NetBSD video(4) support, patch 3 of 3
authorPatrick Welche <prlw1@cam.ac.uk>
Mon, 17 Sep 2012 12:46:54 +0000 (14:46 +0200)
committerAndrey Kamaev <andrey.kamaev@itseez.com>
Mon, 28 Jan 2013 13:11:44 +0000 (17:11 +0400)
xioctl() assumes that ioctl takes int request. Cope with
  int ioctl(int d, unsigned long request, ...)
to avoid "invalid argument".

cmake/OpenCVFindLibsVideo.cmake
cmake/templates/cvconfig.h.cmake
modules/highgui/src/cap_libv4l.cpp
modules/highgui/src/cap_v4l.cpp

index cfa4dca..323b1cb 100644 (file)
@@ -85,12 +85,18 @@ if(WITH_XINE)
 endif(WITH_XINE)
 
 # --- V4L ---
-ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2)
+ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2 HAVE_IOCTL_ULONG)
 if(WITH_V4L)
   CHECK_MODULE(libv4l1 HAVE_LIBV4L)
   CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
   CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
   CHECK_INCLUDE_FILE(sys/videoio.h HAVE_VIDEOIO)
+  INCLUDE(CheckPrototypeDefinition)
+  CHECK_PROTOTYPE_DEFINITION(ioctl
+    "int ioctl(int d, unsigned long request, ...)"
+    "-1"
+    "sys/ioctl.h"
+    HAVE_IOCTL_ULONG)
 endif(WITH_V4L)
 
 # --- OpenNI ---
index e44e135..dab3ec8 100644 (file)
@@ -25,6 +25,9 @@
 /* V4L/V4L2 capturing support via libv4l */
 #cmakedefine HAVE_LIBV4L
 
+/* ioctl takes unsigned long request rather than int */
+#cmakedefine HAVE_IOCTL_ULONG
+
 /* Carbon windowing environment */
 #cmakedefine HAVE_CARBON
 
index 01b611c..63a2ff9 100644 (file)
@@ -346,7 +346,11 @@ static int numCameras = 0;
 static int indexList = 0;
 
 // IOCTL handling for V4L2
+#ifdef HAVE_IOCTL_ULONG
+static int xioctl( int fd, unsigned long request, void *arg)
+#else
 static int xioctl( int fd, int request, void *arg)
+#endif
 {
 
   int r;
index a0d51e8..3510ca3 100644 (file)
@@ -354,17 +354,18 @@ static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h);
 static int numCameras = 0;
 static int indexList = 0;
 
+#ifdef HAVE_IOCTL_ULONG
+static int xioctl( int fd, unsigned long request, void *arg)
+#else
 static int xioctl( int fd, int request, void *arg)
+#endif
 {
-
   int r;
 
-
   do r = ioctl (fd, request, arg);
   while (-1 == r && EINTR == errno);
 
   return r;
-
 }
 
 /* Simple test program: Find number of Video Sources available.