diff options
| author | Matthias Vogelgesang <matthias.vogelgesang@kit.edu> | 2011-03-25 12:04:47 +0100 | 
|---|---|---|
| committer | Matthias Vogelgesang <matthias.vogelgesang@kit.edu> | 2011-03-25 12:04:47 +0100 | 
| commit | 7211a7cc2da2260874f9beb40b9c2c2389a74018 (patch) | |
| tree | 1c43913d5e1e3902ea2beae8c4d998732e58a388 | |
| parent | 8edd5cbc43e4a716478135d3566347243a3d4ade (diff) | |
| download | uca-7211a7cc2da2260874f9beb40b9c2c2389a74018.tar.gz uca-7211a7cc2da2260874f9beb40b9c2c2389a74018.tar.bz2 uca-7211a7cc2da2260874f9beb40b9c2c2389a74018.tar.xz uca-7211a7cc2da2260874f9beb40b9c2c2389a74018.zip | |
Add OpenCV integration
| -rw-r--r-- | misc/README.rst | 29 | ||||
| -rw-r--r-- | misc/opencv-2.2.0.patch | 372 | 
2 files changed, 401 insertions, 0 deletions
| diff --git a/misc/README.rst b/misc/README.rst new file mode 100644 index 0000000..ece7bfc --- /dev/null +++ b/misc/README.rst @@ -0,0 +1,29 @@ +================================ +Patches for third party software +================================ + +OpenCV +====== + +OpenCV is a cross-platform, open source computer vision toolkit. We provide +patches that integrate libuca in OpenCV in order to use all UCA-supported +cameras within OpenCV like:: + +    CvCapture *capture = cvCaptureFromCAM(CV_CAP_UCA); +    cvNamedWindow("foo", CV_WINDOW_AUTOSIZE); + +    IplImage *frame; +    frame = cvQueryFrame(capture);  +    cvShowImage("foo", frame); + +    cvDestroyWindow("foo"); +    cvReleaseCapture(&capture); + +Patches +------- + +We only supply patches for stable releases of OpenCV. Apply them using + +    ``patch -r0 < opencv-x.y.z.patch`` + +inside the top-level directory of the source directory. diff --git a/misc/opencv-2.2.0.patch b/misc/opencv-2.2.0.patch new file mode 100644 index 0000000..487d00e --- /dev/null +++ b/misc/opencv-2.2.0.patch @@ -0,0 +1,372 @@ +=== modified file 'CMakeLists.txt' +--- CMakeLists.txt	2011-03-24 16:43:57 +0000 ++++ CMakeLists.txt	2011-03-25 08:34:03 +0000 +@@ -289,6 +289,7 @@ +         set(WITH_GSTREAMER ON CACHE BOOL "Include Gstreamer support")
 +         set(WITH_V4L ON CACHE BOOL "Include Video 4 Linux support")
 +         set(WITH_XINE OFF CACHE BOOL "Include Xine support (GPL)")
 ++        set(WITH_UCA OFF CACHE BOOL "Include Unified Camera Access support")
 +     endif()
 +     set(WITH_PVAPI ON CACHE BOOL "Include Prosilica GigE support")
 +     set(WITH_1394 ON CACHE BOOL "Include IEEE1394 support")
 +@@ -437,6 +438,13 @@ +             set(HAVE_CAMV4L2 FALSE)
 +         endif()
 + 
 ++        if(WITH_UCA)
 ++            CHECK_MODULE(uca HAVE_UCA)
 ++            CHECK_INCLUDE_FILE(uca.h HAVE_UCA)
 ++        else()
 ++            set(HAVE_UCA FALSE)
 ++        endif()
 ++
 +         if(NOT OPENCV_BUILD_3RDPARTY_LIBS)
 +             if(WITH_PNG)
 +                 include(FindPNG)
 +@@ -1367,6 +1375,7 @@ + message(STATUS "    V4L/V4L2:                  ${HAVE_CAMV4L}/${HAVE_CAMV4L2}")
 + endif()
 + message(STATUS "    Xine:                      ${HAVE_XINE}")
 ++message(STATUS "    Unified Camera Access:     ${HAVE_UCA}")
 + endif()
 + 
 + if(APPLE)
 + +=== modified file 'cvconfig.h.cmake' +--- cvconfig.h.cmake	2011-03-24 16:43:57 +0000 ++++ cvconfig.h.cmake	2011-03-25 10:41:09 +0000 +@@ -31,6 +31,9 @@ + /* IEEE1394 capturing support - libdc1394 v2.x */ + #cmakedefine HAVE_DC1394_2 +  ++/* Unified Camera Access - libuca 0.4.0 */ ++#cmakedefine HAVE_UCA ++ + /* ffmpeg in Gentoo */ + #cmakedefine HAVE_GENTOO_FFMPEG +  + +=== modified file 'modules/highgui/CMakeLists.txt' +--- modules/highgui/CMakeLists.txt	2011-03-24 16:43:57 +0000 ++++ modules/highgui/CMakeLists.txt	2011-03-25 09:33:17 +0000 +@@ -118,6 +118,10 @@ +         set(highgui_srcs ${highgui_srcs} src/cap_dc1394.cpp) +     endif() +  ++    if(HAVE_UCA) ++        set(highgui_srcs ${highgui_srcs} src/cap_uca.cpp) ++    endif() ++ +     if(HAVE_FFMPEG) +         set(highgui_srcs ${highgui_srcs} src/cap_ffmpeg.cpp) +         if(BZIP2_LIBRARIES) + +=== modified file 'modules/highgui/include/opencv2/highgui/highgui_c.h' +--- modules/highgui/include/opencv2/highgui/highgui_c.h	2011-03-24 16:43:57 +0000 ++++ modules/highgui/include/opencv2/highgui/highgui_c.h	2011-03-25 08:55:31 +0000 +@@ -288,7 +288,9 @@ +  + 	CV_CAP_DSHOW    =700,   // DirectShow (via videoInput) +  +-	CV_CAP_PVAPI    =800   // PvAPI, Prosilica GigE SDK ++	CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK ++ ++    CV_CAP_UCA      =900    // Unified Camera Access for CameraLink and IPE camera + }; +  + /* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */ + +=== modified file 'modules/highgui/src/cap.cpp' +--- modules/highgui/src/cap.cpp	2011-03-24 16:43:57 +0000 ++++ modules/highgui/src/cap.cpp	2011-03-25 10:39:36 +0000 +@@ -123,6 +123,7 @@ +         CV_CAP_MIL, +         CV_CAP_QT, +         CV_CAP_UNICAP, ++        CV_CAP_UCA, +         -1 +     }; +  +@@ -142,7 +143,7 @@ +         defined(HAVE_CAMV4L) || defined (HAVE_CAMV4L2) || defined(HAVE_GSTREAMER) || \ +         defined(HAVE_DC1394_2) || defined(HAVE_DC1394) || defined(HAVE_CMU1394) || \ +         defined(HAVE_GSTREAMER) || defined(HAVE_MIL) || defined(HAVE_QUICKTIME) || \ +-        defined(HAVE_UNICAP) || defined(HAVE_PVAPI) ++        defined(HAVE_UNICAP) || defined(HAVE_PVAPI) || defined(HAVE_UCA) +         // local variable to memorize the captured device +         CvCapture *capture; +         #endif +@@ -168,7 +169,7 @@ +         case CV_CAP_VFW: +         #ifdef HAVE_VFW +             capture = cvCreateCameraCapture_VFW (index); +-            if (capture) ++            if (capture)  +                 return capture; +         #endif +         #if defined (HAVE_CAMV4L) || defined (HAVE_CAMV4L2) +@@ -241,6 +242,14 @@ +             return capture; +         break; +         #endif ++ ++        #ifdef HAVE_UCA ++        case CV_CAP_UCA: ++        capture = cvCreateCameraCapture_UCA (index); ++        if (capture) ++            return capture; ++        break; ++        #endif +          +         } +     } + +=== added file 'modules/highgui/src/cap_uca.cpp' +--- modules/highgui/src/cap_uca.cpp	1970-01-01 00:00:00 +0000 ++++ modules/highgui/src/cap_uca.cpp	2011-03-25 10:26:29 +0000 +@@ -0,0 +1,232 @@ ++/*M/////////////////////////////////////////////////////////////////////////////////////// ++// ++//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. ++// ++//  By downloading, copying, installing or using the software you agree to this license. ++//  If you do not agree to this license, do not download, install, ++//  copy or use the software. ++// ++// ++//                        Intel License Agreement ++//                For Open Source Computer Vision Library ++// ++// Copyright (C) 2008, Nils Hasler, all rights reserved. ++// Third party copyrights are property of their respective owners. ++// ++// Redistribution and use in source and binary forms, with or without modification, ++// are permitted provided that the following conditions are met: ++// ++//   * Redistribution's of source code must retain the above copyright notice, ++//     this list of conditions and the following disclaimer. ++// ++//   * Redistribution's in binary form must reproduce the above copyright notice, ++//     this list of conditions and the following disclaimer in the documentation ++//     and/or other materials provided with the distribution. ++// ++//   * The name of Intel Corporation may not be used to endorse or promote products ++//     derived from this software without specific prior written permission. ++// ++// This software is provided by the copyright holders and contributors "as is" and ++// any express or implied warranties, including, but not limited to, the implied ++// warranties of merchantability and fitness for a particular purpose are disclaimed. ++// In no event shall the Intel Corporation or contributors be liable for any direct, ++// indirect, incidental, special, exemplary, or consequential damages ++// (including, but not limited to, procurement of substitute goods or services; ++// loss of use, data, or profits; or business interruption) however caused ++// and on any theory of liability, whether in contract, strict liability, ++// or tort (including negligence or otherwise) arising in any way out of ++// the use of this software, even if advised of the possibility of such damage. ++// ++//M*/ ++ ++// Author: Matthias Vogelgesang <matthias.vogelgesang@kit.edu> ++// ++//         Karlsruhe Institute of Technology (KIT) ++//         Institute for Data Processing and Electronics ++// ++ ++ ++#include "precomp.hpp" ++#include <unistd.h> ++#include <string.h> ++#include <uca/uca.h> ++#include <uca/uca-cam.h> ++ ++#ifdef NDEBUG ++#define CV_WARN(message) ++#else ++#define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__) ++#endif ++ ++static bool is_initialized = false; ++ ++class CvCapture_UCA : public CvCapture ++{ ++    public: ++        CvCapture_UCA() { init(); } ++        virtual ~CvCapture_UCA() { close(); } ++ ++        virtual bool open(int); ++        virtual void close(); ++ ++        virtual double getProperty(int); ++        virtual bool setProperty(int, double); ++        virtual bool grabFrame(); ++        virtual IplImage* retrieveFrame(int); ++ ++    protected:    ++        void init(); ++        char *buffer; ++        IplImage	       *frame; ++ ++    private: ++        struct uca *uca_handle; ++        struct uca_camera *device; ++        int width; ++        int height; ++        int bit_depth;  // in terms of IplImage structure ++        int pixel_size; ++}; ++ ++void CvCapture_UCA::init() ++{ ++    buffer = NULL; ++    frame = NULL; ++    width = 0; ++    height = 0; ++    bit_depth = 0; ++    pixel_size = 0; ++} ++ ++bool CvCapture_UCA::grabFrame() ++{ ++    if (!buffer) ++        return false; ++ ++    device->grab(device, buffer, NULL); ++    return true; ++} ++ ++IplImage * CvCapture_UCA::retrieveFrame(int) ++{ ++    if (!frame) ++        frame = cvCreateImage(cvSize(width, height), bit_depth, 1); ++ ++    memcpy (frame->imageData, buffer, width*height*pixel_size); ++    return frame; ++} ++ ++bool CvCapture_UCA::open(int index) ++{ ++    //CV_FUNCNAME("cvCaptureFromCAM_UCA"); ++ ++    __BEGIN__; ++ ++    if (!is_initialized) { ++        is_initialized = true; ++    } ++ ++    uca_handle = uca_init(NULL); ++    if (uca_handle == NULL) ++        return false; ++ ++    device = uca_handle->cameras; ++ ++    device->get_property(device, UCA_PROP_WIDTH, &width, 0); ++    device->get_property(device, UCA_PROP_HEIGHT, &height, 0); ++ ++    int bits = 0; ++    device->get_property(device, UCA_PROP_BITDEPTH, &bits, 0); ++    bit_depth = (bits == 8) ? IPL_DEPTH_8U : IPL_DEPTH_16U; ++ ++    int pixel_size = (bits == 8) ? 1 : 2; ++    buffer = new char[width*height*pixel_size]; ++    uca_cam_alloc(device, 10); ++ ++    device->start_recording(device); ++ ++    __END__; ++    return true; ++} ++ ++void CvCapture_UCA::close() ++{ ++    device->stop_recording(device); ++    uca_destroy(uca_handle); ++    delete[] buffer; ++} ++ ++double CvCapture_UCA::getProperty( int propId ) ++{ ++    switch(propId) { ++        case CV_CAP_PROP_POS_MSEC: ++        case CV_CAP_PROP_POS_FRAMES: ++        case CV_CAP_PROP_POS_AVI_RATIO: ++            break; ++        case CV_CAP_PROP_FRAME_WIDTH: ++            return (double) width; ++        case CV_CAP_PROP_FRAME_HEIGHT: ++            return (double) height; ++        case CV_CAP_PROP_FPS: ++        case CV_CAP_PROP_FOURCC: ++            break; ++        case CV_CAP_PROP_FRAME_COUNT: ++            return (double) device->current_frame; ++        case CV_CAP_PROP_FORMAT: ++        case CV_CAP_PROP_MODE: ++        case CV_CAP_PROP_BRIGHTNESS: ++        case CV_CAP_PROP_CONTRAST: ++        case CV_CAP_PROP_SATURATION: ++        case CV_CAP_PROP_HUE: ++        case CV_CAP_PROP_GAIN: ++        case CV_CAP_PROP_CONVERT_RGB: ++            break; ++        default: ++            CV_WARN("UCA: unhandled property"); ++            break; ++    } ++    return false; ++} ++ ++bool CvCapture_UCA::setProperty( int propId, double value ) ++{ ++    switch(propId) { ++        case CV_CAP_PROP_POS_MSEC: ++            break; ++        case CV_CAP_PROP_POS_FRAMES: ++            break; ++        case CV_CAP_PROP_POS_AVI_RATIO: ++            break; ++        case CV_CAP_PROP_FRAME_WIDTH: ++            break; ++        case CV_CAP_PROP_FRAME_HEIGHT: ++            break; ++        case CV_CAP_PROP_FPS: ++            break; ++        case CV_CAP_PROP_FOURCC: ++        case CV_CAP_PROP_FRAME_COUNT: ++        case CV_CAP_PROP_FORMAT: ++        case CV_CAP_PROP_MODE: ++        case CV_CAP_PROP_BRIGHTNESS: ++        case CV_CAP_PROP_CONTRAST: ++        case CV_CAP_PROP_SATURATION: ++        case CV_CAP_PROP_HUE: ++        case CV_CAP_PROP_GAIN: ++        case CV_CAP_PROP_CONVERT_RGB: ++            break; ++        default: ++            CV_WARN("UCA: unhandled property"); ++    } ++    return false; ++} ++ ++CvCapture *cvCreateCameraCapture_UCA(int index) ++{ ++    CvCapture_UCA* capture = new CvCapture_UCA; ++ ++    if (capture->open(index)) ++        return capture; ++ ++    delete capture; ++    return false; ++} + +=== modified file 'modules/highgui/src/precomp.hpp' +--- modules/highgui/src/precomp.hpp	2011-03-24 16:43:57 +0000 ++++ modules/highgui/src/precomp.hpp	2011-03-25 09:29:34 +0000 +@@ -113,6 +113,7 @@ + CvCapture * cvCreateCameraCapture_DC1394_2( int index ); + CvCapture* cvCreateCameraCapture_MIL( int index ); + CvCapture * cvCreateCameraCapture_CMU( int index ); ++CvCapture * cvCreateCameraCapture_UCA( int index ); + CV_IMPL CvCapture * cvCreateCameraCapture_TYZX( int index ); + CvCapture* cvCreateFileCapture_Win32( const char* filename ); + CvCapture* cvCreateCameraCapture_VFW( int index ); + | 
