From 6846f881a20dd5c6bd7b6ae8770ed267aac47453 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Sat, 16 Mar 2013 15:47:40 +0400 Subject: [PATCH] Move OpenCL SURF to nonfree module --- modules/nonfree/CMakeLists.txt | 2 +- modules/nonfree/include/opencv2/nonfree/ocl.hpp | 124 +++++++++++++++ .../nonfree_surf.cl => nonfree/src/opencl/surf.cl} | 0 modules/nonfree/src/precomp.hpp | 5 + .../{ocl/src/surf.cpp => nonfree/src/surf.ocl.cpp} | 33 ++-- modules/ocl/CMakeLists.txt | 2 +- modules/ocl/include/opencv2/ocl/ocl.hpp | 168 ++------------------- modules/ocl/include/opencv2/ocl/private/util.hpp | 124 +++++++++++++++ modules/ocl/src/canny.cpp | 2 - modules/ocl/src/filtering.cpp | 3 +- modules/ocl/src/hog.cpp | 2 +- modules/ocl/src/interpolate_frames.cpp | 2 - modules/ocl/src/mcwutil.cpp | 2 +- modules/ocl/src/mcwutil.hpp | 81 ---------- modules/ocl/src/precomp.hpp | 45 +----- modules/ocl/src/pyrlk.cpp | 1 - 16 files changed, 285 insertions(+), 311 deletions(-) create mode 100644 modules/nonfree/include/opencv2/nonfree/ocl.hpp rename modules/{ocl/src/opencl/nonfree_surf.cl => nonfree/src/opencl/surf.cl} (100%) rename modules/{ocl/src/surf.cpp => nonfree/src/surf.ocl.cpp} (95%) create mode 100644 modules/ocl/include/opencv2/ocl/private/util.hpp delete mode 100644 modules/ocl/src/mcwutil.hpp diff --git a/modules/nonfree/CMakeLists.txt b/modules/nonfree/CMakeLists.txt index e00cf8f..a846f74 100644 --- a/modules/nonfree/CMakeLists.txt +++ b/modules/nonfree/CMakeLists.txt @@ -3,7 +3,7 @@ if(BUILD_ANDROID_PACKAGE) endif() set(the_description "Functionality with possible limitations on the use") -ocv_add_module(nonfree opencv_imgproc opencv_features2d opencv_calib3d OPTIONAL opencv_gpu) +ocv_add_module(nonfree opencv_imgproc opencv_features2d opencv_calib3d OPTIONAL opencv_gpu opencv_ocl) ocv_module_include_directories() if(HAVE_CUDA AND HAVE_opencv_gpu) diff --git a/modules/nonfree/include/opencv2/nonfree/ocl.hpp b/modules/nonfree/include/opencv2/nonfree/ocl.hpp new file mode 100644 index 0000000..aa2d018 --- /dev/null +++ b/modules/nonfree/include/opencv2/nonfree/ocl.hpp @@ -0,0 +1,124 @@ +/*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. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, 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 the copyright holders 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*/ + +#ifndef __OPENCV_NONFREE_OCL_HPP__ +#define __OPENCV_NONFREE_OCL_HPP__ + +#include "opencv2/ocl/ocl.hpp" + +namespace cv +{ + namespace ocl + { + //! Speeded up robust features, port from GPU module. + ////////////////////////////////// SURF ////////////////////////////////////////// + + class CV_EXPORTS SURF_OCL + { + public: + enum KeypointLayout + { + X_ROW = 0, + Y_ROW, + LAPLACIAN_ROW, + OCTAVE_ROW, + SIZE_ROW, + ANGLE_ROW, + HESSIAN_ROW, + ROWS_COUNT + }; + + //! the default constructor + SURF_OCL(); + //! the full constructor taking all the necessary parameters + explicit SURF_OCL(double _hessianThreshold, int _nOctaves = 4, + int _nOctaveLayers = 2, bool _extended = false, float _keypointsRatio = 0.01f, bool _upright = false); + + //! returns the descriptor size in float's (64 or 128) + int descriptorSize() const; + //! upload host keypoints to device memory + void uploadKeypoints(const vector &keypoints, oclMat &keypointsocl); + //! download keypoints from device to host memory + void downloadKeypoints(const oclMat &keypointsocl, vector &keypoints); + //! download descriptors from device to host memory + void downloadDescriptors(const oclMat &descriptorsocl, vector &descriptors); + //! finds the keypoints using fast hessian detector used in SURF + //! supports CV_8UC1 images + //! keypoints will have nFeature cols and 6 rows + //! keypoints.ptr(X_ROW)[i] will contain x coordinate of i'th feature + //! keypoints.ptr(Y_ROW)[i] will contain y coordinate of i'th feature + //! keypoints.ptr(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature + //! keypoints.ptr(OCTAVE_ROW)[i] will contain octave of i'th feature + //! keypoints.ptr(SIZE_ROW)[i] will contain size of i'th feature + //! keypoints.ptr(ANGLE_ROW)[i] will contain orientation of i'th feature + //! keypoints.ptr(HESSIAN_ROW)[i] will contain response of i'th feature + void operator()(const oclMat &img, const oclMat &mask, oclMat &keypoints); + //! finds the keypoints and computes their descriptors. + //! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction + void operator()(const oclMat &img, const oclMat &mask, oclMat &keypoints, oclMat &descriptors, + bool useProvidedKeypoints = false); + void operator()(const oclMat &img, const oclMat &mask, std::vector &keypoints); + void operator()(const oclMat &img, const oclMat &mask, std::vector &keypoints, oclMat &descriptors, + bool useProvidedKeypoints = false); + void operator()(const oclMat &img, const oclMat &mask, std::vector &keypoints, std::vector &descriptors, + bool useProvidedKeypoints = false); + + void releaseMemory(); + + // SURF parameters + float hessianThreshold; + int nOctaves; + int nOctaveLayers; + bool extended; + bool upright; + //! max keypoints = min(keypointsRatio * img.size().area(), 65535) + float keypointsRatio; + oclMat sum, mask1, maskSum, intBuffer; + oclMat det, trace; + oclMat maxPosBuffer; + + }; + } +} + +#endif __OPENCV_NONFREE_OCL_HPP__ \ No newline at end of file diff --git a/modules/ocl/src/opencl/nonfree_surf.cl b/modules/nonfree/src/opencl/surf.cl similarity index 100% rename from modules/ocl/src/opencl/nonfree_surf.cl rename to modules/nonfree/src/opencl/surf.cl diff --git a/modules/nonfree/src/precomp.hpp b/modules/nonfree/src/precomp.hpp index 51157d2..6c46114 100644 --- a/modules/nonfree/src/precomp.hpp +++ b/modules/nonfree/src/precomp.hpp @@ -66,4 +66,9 @@ #endif #endif +#ifdef HAVE_OPENCV_OCL +# include "opencv2/nonfree/ocl.hpp" +# include "opencv2/ocl/private/util.hpp" +#endif + #endif diff --git a/modules/ocl/src/surf.cpp b/modules/nonfree/src/surf.ocl.cpp similarity index 95% rename from modules/ocl/src/surf.cpp rename to modules/nonfree/src/surf.ocl.cpp index 9d1372b..98088bb 100644 --- a/modules/ocl/src/surf.cpp +++ b/modules/nonfree/src/surf.ocl.cpp @@ -42,10 +42,9 @@ // the use of this software, even if advised of the possibility of such damage. // //M*/ -#include #include "precomp.hpp" -#include "mcwutil.hpp" -//#include "opencv2/highgui/highgui.hpp" + +#ifdef HAVE_OPENCV_OCL using namespace cv; using namespace cv::ocl; @@ -56,7 +55,7 @@ namespace cv namespace ocl { ///////////////////////////OpenCL kernel strings/////////////////////////// - extern const char *nonfree_surf; + extern const char *surf; const char* noImage2dOption = "-D DISABLE_IMAGE2D"; @@ -268,7 +267,7 @@ private: int maxFeatures; oclMat counters; - + // texture buffers cl_mem imgTex; cl_mem sumTex; @@ -510,7 +509,7 @@ void SURF_OCL_Invoker::icvCalcLayerDetAndTrace_gpu(oclMat &det, oclMat &trace, i divUp(max_samples_i, localThreads[1]) *localThreads[1] *(nOctaveLayers + 2), 1 }; - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); } void SURF_OCL_Invoker::icvFindMaximaInLayer_gpu(const oclMat &det, const oclMat &trace, oclMat &maxPosBuffer, oclMat &maxCounter, int counterOffset, @@ -556,7 +555,7 @@ void SURF_OCL_Invoker::icvFindMaximaInLayer_gpu(const oclMat &det, const oclMat 1 }; - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); } void SURF_OCL_Invoker::icvInterpolateKeypoint_gpu(const oclMat &det, const oclMat &maxPosBuffer, int maxCounter, @@ -581,7 +580,7 @@ void SURF_OCL_Invoker::icvInterpolateKeypoint_gpu(const oclMat &det, const oclMa size_t localThreads[3] = {3, 3, 3}; size_t globalThreads[3] = {maxCounter *localThreads[0], localThreads[1], 1}; - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); } void SURF_OCL_Invoker::icvCalcOrientation_gpu(const oclMat &keypoints, int nFeatures) @@ -608,7 +607,7 @@ void SURF_OCL_Invoker::icvCalcOrientation_gpu(const oclMat &keypoints, int nFeat size_t localThreads[3] = {32, 4, 1}; size_t globalThreads[3] = {nFeatures *localThreads[0], localThreads[1], 1}; - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); } void SURF_OCL_Invoker::icvSetUpright_gpu(const oclMat &keypoints, int nFeatures) @@ -625,7 +624,7 @@ void SURF_OCL_Invoker::icvSetUpright_gpu(const oclMat &keypoints, int nFeatures) size_t localThreads[3] = {256, 1, 1}; size_t globalThreads[3] = {saturate_cast(nFeatures), 1, 1}; - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); } @@ -665,7 +664,7 @@ void SURF_OCL_Invoker::compute_descriptors_gpu(const oclMat &descriptors, const args.push_back( make_pair( sizeof(cl_int), (void *)&_img.cols)); args.push_back( make_pair( sizeof(cl_int), (void *)&_img.step)); - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); kernelName = "normalize_descriptors64"; @@ -679,7 +678,7 @@ void SURF_OCL_Invoker::compute_descriptors_gpu(const oclMat &descriptors, const args.push_back( make_pair( sizeof(cl_mem), (void *)&descriptors.data)); args.push_back( make_pair( sizeof(cl_int), (void *)&descriptors.step)); - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); } else { @@ -707,8 +706,8 @@ void SURF_OCL_Invoker::compute_descriptors_gpu(const oclMat &descriptors, const args.push_back( make_pair( sizeof(cl_int), (void *)&_img.rows)); args.push_back( make_pair( sizeof(cl_int), (void *)&_img.cols)); args.push_back( make_pair( sizeof(cl_int), (void *)&_img.step)); - - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); kernelName = "normalize_descriptors128"; @@ -721,7 +720,9 @@ void SURF_OCL_Invoker::compute_descriptors_gpu(const oclMat &descriptors, const args.clear(); args.push_back( make_pair( sizeof(cl_mem), (void *)&descriptors.data)); args.push_back( make_pair( sizeof(cl_int), (void *)&descriptors.step)); - - openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); + + openCLExecuteKernelSURF(clCxt, &surf, kernelName, globalThreads, localThreads, args, -1, -1); } } + +#endif //HAVE_OPENCV_OCL diff --git a/modules/ocl/CMakeLists.txt b/modules/ocl/CMakeLists.txt index 8dbe90c..a7cd3a0 100644 --- a/modules/ocl/CMakeLists.txt +++ b/modules/ocl/CMakeLists.txt @@ -3,5 +3,5 @@ if(NOT HAVE_OPENCL) endif() set(the_description "OpenCL-accelerated Computer Vision") -ocv_define_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video opencv_nonfree) +ocv_define_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video) ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow) diff --git a/modules/ocl/include/opencv2/ocl/ocl.hpp b/modules/ocl/include/opencv2/ocl/ocl.hpp index 4c2d54f..400e2d3 100644 --- a/modules/ocl/include/opencv2/ocl/ocl.hpp +++ b/modules/ocl/include/opencv2/ocl/ocl.hpp @@ -69,28 +69,28 @@ namespace cv enum DevMemRW { - DEVICE_MEM_R_W = 0, - DEVICE_MEM_R_ONLY, + DEVICE_MEM_R_W = 0, + DEVICE_MEM_R_ONLY, DEVICE_MEM_W_ONLY }; - + enum DevMemType - { - DEVICE_MEM_DEFAULT = 0, + { + DEVICE_MEM_DEFAULT = 0, DEVICE_MEM_AHP, //alloc host pointer DEVICE_MEM_UHP, //use host pointer DEVICE_MEM_CHP, //copy host pointer DEVICE_MEM_PM //persistent memory }; - //Get the global device memory and read/write type + //Get the global device memory and read/write type //return 1 if unified memory system supported, otherwise return 0 CV_EXPORTS int getDevMemType(DevMemRW& rw_type, DevMemType& mem_type); - //Set the global device memory and read/write type, + //Set the global device memory and read/write type, //the newly generated oclMat will all use this type //return -1 if the target type is unsupported, otherwise return 0 - CV_EXPORTS int setDevMemType(DevMemRW rw_type = DEVICE_MEM_R_W, DevMemType mem_type = DEVICE_MEM_DEFAULT); + CV_EXPORTS int setDevMemType(DevMemRW rw_type = DEVICE_MEM_R_W, DevMemType mem_type = DEVICE_MEM_DEFAULT); //this class contains ocl runtime information class CV_EXPORTS Info @@ -135,7 +135,7 @@ namespace cv //////////////////////////////// OpenCL context //////////////////////// //This is a global singleton class used to represent a OpenCL context. - class Context + class CV_EXPORTS Context { protected: Context(); @@ -1073,156 +1073,6 @@ namespace cv }; - - //! Speeded up robust features, port from GPU module. - ////////////////////////////////// SURF ////////////////////////////////////////// - - class CV_EXPORTS SURF_OCL - - { - - public: - - enum KeypointLayout - - { - - X_ROW = 0, - - Y_ROW, - - LAPLACIAN_ROW, - - OCTAVE_ROW, - - SIZE_ROW, - - ANGLE_ROW, - - HESSIAN_ROW, - - ROWS_COUNT - - }; - - - - //! the default constructor - - SURF_OCL(); - - //! the full constructor taking all the necessary parameters - - explicit SURF_OCL(double _hessianThreshold, int _nOctaves = 4, - - int _nOctaveLayers = 2, bool _extended = false, float _keypointsRatio = 0.01f, bool _upright = false); - - - - //! returns the descriptor size in float's (64 or 128) - - int descriptorSize() const; - - - - //! upload host keypoints to device memory - - void uploadKeypoints(const vector &keypoints, oclMat &keypointsocl); - - //! download keypoints from device to host memory - - void downloadKeypoints(const oclMat &keypointsocl, vector &keypoints); - - - - //! download descriptors from device to host memory - - void downloadDescriptors(const oclMat &descriptorsocl, vector &descriptors); - - - - //! finds the keypoints using fast hessian detector used in SURF - - //! supports CV_8UC1 images - - //! keypoints will have nFeature cols and 6 rows - - //! keypoints.ptr(X_ROW)[i] will contain x coordinate of i'th feature - - //! keypoints.ptr(Y_ROW)[i] will contain y coordinate of i'th feature - - //! keypoints.ptr(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature - - //! keypoints.ptr(OCTAVE_ROW)[i] will contain octave of i'th feature - - //! keypoints.ptr(SIZE_ROW)[i] will contain size of i'th feature - - //! keypoints.ptr(ANGLE_ROW)[i] will contain orientation of i'th feature - - //! keypoints.ptr(HESSIAN_ROW)[i] will contain response of i'th feature - - void operator()(const oclMat &img, const oclMat &mask, oclMat &keypoints); - - //! finds the keypoints and computes their descriptors. - - //! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction - - void operator()(const oclMat &img, const oclMat &mask, oclMat &keypoints, oclMat &descriptors, - - bool useProvidedKeypoints = false); - - - - void operator()(const oclMat &img, const oclMat &mask, std::vector &keypoints); - - void operator()(const oclMat &img, const oclMat &mask, std::vector &keypoints, oclMat &descriptors, - - bool useProvidedKeypoints = false); - - - - void operator()(const oclMat &img, const oclMat &mask, std::vector &keypoints, std::vector &descriptors, - - bool useProvidedKeypoints = false); - - - - void releaseMemory(); - - - - // SURF parameters - - float hessianThreshold; - - int nOctaves; - - int nOctaveLayers; - - bool extended; - - bool upright; - - - - //! max keypoints = min(keypointsRatio * img.size().area(), 65535) - - float keypointsRatio; - - - - oclMat sum, mask1, maskSum, intBuffer; - - - - oclMat det, trace; - - - - oclMat maxPosBuffer; - - }; - ////////////////////////feature2d_ocl///////////////// /****************************************************************************************\ * Distance * diff --git a/modules/ocl/include/opencv2/ocl/private/util.hpp b/modules/ocl/include/opencv2/ocl/private/util.hpp new file mode 100644 index 0000000..fd65915 --- /dev/null +++ b/modules/ocl/include/opencv2/ocl/private/util.hpp @@ -0,0 +1,124 @@ +/*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. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved. +// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// @Authors +// Peng Xiao, pengxiao@multicorewareinc.com +// +// 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 oclMaterials provided with the distribution. +// +// * The name of the copyright holders 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*/ + +#ifndef __OPENCV_OCL_PRIVATE_UTIL__ +#define __OPENCV_OCL_PRIVATE_UTIL__ + +#include "opencv2/ocl/ocl.hpp" + +#if defined __APPLE__ +#include +#else +#include +#endif + +namespace cv +{ + namespace ocl + { + ///////////////////////////OpenCL call wrappers//////////////////////////// + void CV_EXPORTS openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, + size_t widthInBytes, size_t height); + void CV_EXPORTS openCLMallocPitchEx(Context *clCxt, void **dev_ptr, size_t *pitch, + size_t widthInBytes, size_t height, DevMemRW rw_type, DevMemType mem_type); + void CV_EXPORTS openCLMemcpy2D(Context *clCxt, void *dst, size_t dpitch, + const void *src, size_t spitch, + size_t width, size_t height, enum openCLMemcpyKind kind, int channels = -1); + void CV_EXPORTS openCLCopyBuffer2D(Context *clCxt, void *dst, size_t dpitch, int dst_offset, + const void *src, size_t spitch, + size_t width, size_t height, int src_offset); + void CV_EXPORTS openCLFree(void *devPtr); + cl_mem CV_EXPORTS openCLCreateBuffer(Context *clCxt, size_t flag, size_t size); + void CV_EXPORTS openCLReadBuffer(Context *clCxt, cl_mem dst_buffer, void *host_buffer, size_t size); + cl_kernel CV_EXPORTS openCLGetKernelFromSource(const Context *clCxt, + const char **source, std::string kernelName); + cl_kernel CV_EXPORTS openCLGetKernelFromSource(const Context *clCxt, + const char **source, std::string kernelName, const char *build_options); + void CV_EXPORTS openCLVerifyKernel(const Context *clCxt, cl_kernel kernel, size_t *localThreads); + void CV_EXPORTS openCLExecuteKernel(Context *clCxt , const char **source, string kernelName, std::vector< std::pair > &args, + int globalcols , int globalrows, size_t blockSize = 16, int kernel_expand_depth = -1, int kernel_expand_channel = -1); + void CV_EXPORTS openCLExecuteKernel_(Context *clCxt , const char **source, std::string kernelName, + size_t globalThreads[3], size_t localThreads[3], + std::vector< std::pair > &args, int channels, int depth, const char *build_options); + void CV_EXPORTS openCLExecuteKernel(Context *clCxt , const char **source, std::string kernelName, size_t globalThreads[3], + size_t localThreads[3], std::vector< std::pair > &args, int channels, int depth); + void CV_EXPORTS openCLExecuteKernel(Context *clCxt , const char **source, std::string kernelName, size_t globalThreads[3], + size_t localThreads[3], std::vector< std::pair > &args, int channels, + int depth, const char *build_options); + + cl_mem CV_EXPORTS load_constant(cl_context context, cl_command_queue command_queue, const void *value, + const size_t size); + + cl_mem CV_EXPORTS openCLMalloc(cl_context clCxt, size_t size, cl_mem_flags flags, void *host_ptr); + + int CV_EXPORTS savetofile(const Context *clcxt, cl_program &program, const char *fileName); + + enum FLUSH_MODE + { + CLFINISH = 0, + CLFLUSH, + DISABLE + }; + + void CV_EXPORTS openCLExecuteKernel2(Context *clCxt , const char **source, std::string kernelName, size_t globalThreads[3], + size_t localThreads[3], std::vector< std::pair > &args, int channels, int depth, FLUSH_MODE finish_mode = DISABLE); + void CV_EXPORTS openCLExecuteKernel2(Context *clCxt , const char **source, std::string kernelName, size_t globalThreads[3], + size_t localThreads[3], std::vector< std::pair > &args, int channels, + int depth, char *build_options, FLUSH_MODE finish_mode = DISABLE); + // bind oclMat to OpenCL image textures + // note: + // 1. there is no memory management. User need to explicitly release the resource + // 2. for faster clamping, there is no buffer padding for the constructed texture + cl_mem CV_EXPORTS bindTexture(const oclMat &mat); + void CV_EXPORTS releaseTexture(cl_mem& texture); + + // returns whether the current context supports image2d_t format or not + bool CV_EXPORTS support_image2d(Context *clCxt = Context::getContext()); + + }//namespace ocl + +}//namespace cv + +#endif //__OPENCV_OCL_PRIVATE_UTIL__ diff --git a/modules/ocl/src/canny.cpp b/modules/ocl/src/canny.cpp index 4b872a1..23720a2 100644 --- a/modules/ocl/src/canny.cpp +++ b/modules/ocl/src/canny.cpp @@ -43,9 +43,7 @@ // //M*/ -#include #include "precomp.hpp" -#include "mcwutil.hpp" using namespace cv; using namespace cv::ocl; diff --git a/modules/ocl/src/filtering.cpp b/modules/ocl/src/filtering.cpp index e229fab..6dbb492 100644 --- a/modules/ocl/src/filtering.cpp +++ b/modules/ocl/src/filtering.cpp @@ -48,8 +48,7 @@ //M*/ #include "precomp.hpp" -#include "mcwutil.hpp" -#include + using namespace std; using namespace cv; using namespace cv::ocl; diff --git a/modules/ocl/src/hog.cpp b/modules/ocl/src/hog.cpp index 59062ae..b23f00c 100644 --- a/modules/ocl/src/hog.cpp +++ b/modules/ocl/src/hog.cpp @@ -44,7 +44,7 @@ //M*/ #include "precomp.hpp" -#include "mcwutil.hpp" + using namespace cv; using namespace cv::ocl; using namespace std; diff --git a/modules/ocl/src/interpolate_frames.cpp b/modules/ocl/src/interpolate_frames.cpp index db228f5..4a7d7d8 100644 --- a/modules/ocl/src/interpolate_frames.cpp +++ b/modules/ocl/src/interpolate_frames.cpp @@ -43,9 +43,7 @@ // //M*/ -#include #include "precomp.hpp" -#include "mcwutil.hpp" using namespace std; using namespace cv; diff --git a/modules/ocl/src/mcwutil.cpp b/modules/ocl/src/mcwutil.cpp index 2c13239..b6372ee 100644 --- a/modules/ocl/src/mcwutil.cpp +++ b/modules/ocl/src/mcwutil.cpp @@ -43,7 +43,7 @@ // //M*/ -#include "mcwutil.hpp" +#include "opencv2/ocl/private/util.hpp" #if defined (HAVE_OPENCL) #ifndef CL_VERSION_1_2 diff --git a/modules/ocl/src/mcwutil.hpp b/modules/ocl/src/mcwutil.hpp deleted file mode 100644 index 7f27451..0000000 --- a/modules/ocl/src/mcwutil.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/*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. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved. -// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// @Authors -// Peng Xiao, pengxiao@multicorewareinc.com -// -// 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 oclMaterials provided with the distribution. -// -// * The name of the copyright holders 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*/ - -#ifndef _OPENCV_MCWUTIL_ -#define _OPENCV_MCWUTIL_ - -#include "precomp.hpp" -using namespace std; - -namespace cv -{ - namespace ocl - { - enum FLUSH_MODE - { - CLFINISH = 0, - CLFLUSH, - DISABLE - }; - void openCLExecuteKernel2(Context *clCxt , const char **source, string kernelName, size_t globalThreads[3], - size_t localThreads[3], vector< pair > &args, int channels, int depth, FLUSH_MODE finish_mode = DISABLE); - void openCLExecuteKernel2(Context *clCxt , const char **source, string kernelName, size_t globalThreads[3], - size_t localThreads[3], vector< pair > &args, int channels, - int depth, char *build_options, FLUSH_MODE finish_mode = DISABLE); - // bind oclMat to OpenCL image textures - // note: - // 1. there is no memory management. User need to explicitly release the resource - // 2. for faster clamping, there is no buffer padding for the constructed texture - cl_mem bindTexture(const oclMat &mat); - void releaseTexture(cl_mem& texture); - - // returns whether the current context supports image2d_t format or not - bool support_image2d(Context *clCxt = Context::getContext()); - - }//namespace ocl - -}//namespace cv - -#endif //_OPENCV_MCWUTIL_ diff --git a/modules/ocl/src/precomp.hpp b/modules/ocl/src/precomp.hpp index f4cdae1..2c84e5a 100644 --- a/modules/ocl/src/precomp.hpp +++ b/modules/ocl/src/precomp.hpp @@ -78,12 +78,7 @@ #if defined (HAVE_OPENCL) -#if defined __APPLE__ -#include -#else -#include -#endif - +#include "opencv2/ocl/private/util.hpp" #include "safe_call.hpp" using namespace std; @@ -92,44 +87,6 @@ namespace cv { namespace ocl { - ///////////////////////////OpenCL call wrappers//////////////////////////// - void openCLMallocPitch(Context *clCxt, void **dev_ptr, size_t *pitch, - size_t widthInBytes, size_t height); - void openCLMallocPitchEx(Context *clCxt, void **dev_ptr, size_t *pitch, - size_t widthInBytes, size_t height, DevMemRW rw_type, DevMemType mem_type); - void openCLMemcpy2D(Context *clCxt, void *dst, size_t dpitch, - const void *src, size_t spitch, - size_t width, size_t height, enum openCLMemcpyKind kind, int channels = -1); - void openCLCopyBuffer2D(Context *clCxt, void *dst, size_t dpitch, int dst_offset, - const void *src, size_t spitch, - size_t width, size_t height, int src_offset); - void openCLFree(void *devPtr); - cl_mem openCLCreateBuffer(Context *clCxt, size_t flag, size_t size); - void openCLReadBuffer(Context *clCxt, cl_mem dst_buffer, void *host_buffer, size_t size); - cl_kernel openCLGetKernelFromSource(const Context *clCxt, - const char **source, string kernelName); - cl_kernel openCLGetKernelFromSource(const Context *clCxt, - const char **source, string kernelName, const char *build_options); - void openCLVerifyKernel(const Context *clCxt, cl_kernel kernel, size_t *localThreads); - void openCLExecuteKernel(Context *clCxt , const char **source, string kernelName, vector< std::pair > &args, - int globalcols , int globalrows, size_t blockSize = 16, int kernel_expand_depth = -1, int kernel_expand_channel = -1); - void openCLExecuteKernel_(Context *clCxt , const char **source, string kernelName, - size_t globalThreads[3], size_t localThreads[3], - vector< pair > &args, int channels, int depth, const char *build_options); - void openCLExecuteKernel(Context *clCxt , const char **source, string kernelName, size_t globalThreads[3], - size_t localThreads[3], vector< pair > &args, int channels, int depth); - void openCLExecuteKernel(Context *clCxt , const char **source, string kernelName, size_t globalThreads[3], - size_t localThreads[3], vector< pair > &args, int channels, - int depth, const char *build_options); - - cl_mem load_constant(cl_context context, cl_command_queue command_queue, const void *value, - const size_t size); - - cl_mem openCLMalloc(cl_context clCxt, size_t size, cl_mem_flags flags, void *host_ptr); - - //void openCLMemcpy2DWithNoPadding(cl_command_queue command_queue, cl_mem buffer, size_t size, size_t offset, void *ptr, - // enum openCLMemcpyKind kind, cl_bool blocking_write); - int savetofile(const Context *clcxt, cl_program &program, const char *fileName); struct Context::Impl { //Information of the OpenCL context diff --git a/modules/ocl/src/pyrlk.cpp b/modules/ocl/src/pyrlk.cpp index 9214406..2fac42a 100644 --- a/modules/ocl/src/pyrlk.cpp +++ b/modules/ocl/src/pyrlk.cpp @@ -47,7 +47,6 @@ #include "precomp.hpp" -#include "mcwutil.hpp" using namespace std; using namespace cv; using namespace cv::ocl; -- 2.7.4