diff --git a/modules/cudaoptflow/CMakeLists.txt b/modules/cudaoptflow/CMakeLists.txt index 7d2d3e74eef..d6ae902637d 100644 --- a/modules/cudaoptflow/CMakeLists.txt +++ b/modules/cudaoptflow/CMakeLists.txt @@ -8,21 +8,23 @@ ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4127 /wd4324 /wd4512 -Wundef -Wmissing-d ocv_define_module(cudaoptflow opencv_video opencv_optflow opencv_cudaarithm opencv_cudawarping opencv_cudaimgproc OPTIONAL opencv_cudalegacy WRAP python) -set(NVIDIA_OPTICAL_FLOW_2_0_HEADERS_COMMIT "edb50da3cf849840d680249aa6dbef248ebce2ca") -set(NVIDIA_OPTICAL_FLOW_2_0_HEADERS_MD5 "a73cd48b18dcc0cc8933b30796074191") -set(NVIDIA_OPTICAL_FLOW_2_0_HEADERS_PATH "${OpenCV_BINARY_DIR}/3rdparty/NVIDIAOpticalFlowSDK_2_0_Headers") -ocv_download(FILENAME "${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_COMMIT}.zip" - HASH ${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_MD5} - URL - "https://github.com/NVIDIA/NVIDIAOpticalFlowSDK/archive/" - DESTINATION_DIR "${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_PATH}" - STATUS NVIDIA_OPTICAL_FLOW_2_0_HEADERS_DOWNLOAD_SUCCESS - ID "NVIDIA_OPTICAL_FLOW" - UNPACK RELATIVE_URL) +if(NOT CUDA_VERSION VERSION_LESS "10.0") + set(NVIDIA_OPTICAL_FLOW_2_0_HEADERS_COMMIT "edb50da3cf849840d680249aa6dbef248ebce2ca") + set(NVIDIA_OPTICAL_FLOW_2_0_HEADERS_MD5 "a73cd48b18dcc0cc8933b30796074191") + set(NVIDIA_OPTICAL_FLOW_2_0_HEADERS_PATH "${OpenCV_BINARY_DIR}/3rdparty/NVIDIAOpticalFlowSDK_2_0_Headers") + ocv_download(FILENAME "${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_COMMIT}.zip" + HASH ${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_MD5} + URL "https://github.com/NVIDIA/NVIDIAOpticalFlowSDK/archive/" + DESTINATION_DIR "${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_PATH}" + STATUS NVIDIA_OPTICAL_FLOW_2_0_HEADERS_DOWNLOAD_SUCCESS + ID "NVIDIA_OPTICAL_FLOW" + UNPACK RELATIVE_URL) -if(NOT NVIDIA_OPTICAL_FLOW_2_0_HEADERS_DOWNLOAD_SUCCESS) - message(STATUS "Failed to download NVIDIA_Optical_Flow_2_0 Headers") -else() - add_definitions(-DHAVE_NVIDIA_OPTFLOW=1) - ocv_include_directories(SYSTEM "${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_PATH}/NVIDIAOpticalFlowSDK-${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_COMMIT}") + if(NOT NVIDIA_OPTICAL_FLOW_2_0_HEADERS_DOWNLOAD_SUCCESS) + message(STATUS "Failed to download NVIDIA_Optical_Flow_2_0 Headers") + else() + message(STATUS "Building with NVIDIA Optical Flow API 2.0") + add_definitions(-DHAVE_NVIDIA_OPTFLOW=2) + ocv_include_directories(SYSTEM "${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_PATH}/NVIDIAOpticalFlowSDK-${NVIDIA_OPTICAL_FLOW_2_0_HEADERS_COMMIT}") + endif() endif() \ No newline at end of file diff --git a/modules/cudaoptflow/src/cuda/nvidiaOpticalFlow.cu b/modules/cudaoptflow/src/cuda/nvidiaOpticalFlow.cu index 1ad21143e70..f308710d54e 100644 --- a/modules/cudaoptflow/src/cuda/nvidiaOpticalFlow.cu +++ b/modules/cudaoptflow/src/cuda/nvidiaOpticalFlow.cu @@ -22,6 +22,7 @@ typedef signed int int32_t; #define SMEM_COLS ((BLOCKDIM_X)/2) #define SMEM_ROWS ((BLOCKDIM_Y)/2) +#ifdef HAVE_NVIDIA_OPTFLOW namespace cv { namespace cuda { namespace device { namespace optflow_nvidia { static const char *_cudaGetErrorEnum(cudaError_t error) { return cudaGetErrorName(error); } @@ -95,5 +96,6 @@ void FlowUpsample(void* srcDevPtr, uint32_t nSrcWidth, uint32_t nSrcPitch, uint3 checkCudaErrors(cudaGetLastError()); }}}}} +#endif //HAVE_NVIDIA_OPTFLOW #endif \ No newline at end of file diff --git a/modules/cudaoptflow/src/nvidiaOpticalFlow.cpp b/modules/cudaoptflow/src/nvidiaOpticalFlow.cpp index df715698933..b937c77621a 100644 --- a/modules/cudaoptflow/src/nvidiaOpticalFlow.cpp +++ b/modules/cudaoptflow/src/nvidiaOpticalFlow.cpp @@ -9,26 +9,39 @@ #if !defined HAVE_CUDA || defined(CUDA_DISABLER) cv::Ptr cv::cuda::NvidiaOpticalFlow_1_0::create - (int, int, NVIDIA_OF_PERF_LEVEL, bool, bool, bool, int, Stream&, Stream&) { + (cv::Size, NVIDIA_OF_PERF_LEVEL, bool, bool, bool, int, Stream&, Stream&) { throw_no_cuda(); return cv::Ptr(); } cv::Ptr cv::cuda::NvidiaOpticalFlow_2_0::create( - int, int, NVIDIA_OF_PERF_LEVEL, NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE, NVIDIA_OF_HINT_VECTOR_GRID_SIZE, - bool, int, cv::Rect*, bool, bool, bool, int, Stream&, Stream&) { + cv::Size, NVIDIA_OF_PERF_LEVEL, NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE, NVIDIA_OF_HINT_VECTOR_GRID_SIZE, + bool, bool, bool, int, Stream&, Stream&) { + throw_no_cuda(); return cv::Ptr(); +} + +cv::Ptr cv::cuda::NvidiaOpticalFlow_2_0::create( + cv::Size, std::vector, NVIDIA_OF_PERF_LEVEL, NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE, NVIDIA_OF_HINT_VECTOR_GRID_SIZE, + bool, bool, bool, int, Stream&, Stream&) { throw_no_cuda(); return cv::Ptr(); } #elif !defined HAVE_NVIDIA_OPTFLOW cv::Ptr cv::cuda::NvidiaOpticalFlow_1_0::create( - int, int, NVIDIA_OF_PERF_LEVEL, bool, bool, bool, int, Stream&, Stream&) + cv::Size, NVIDIA_OF_PERF_LEVEL, bool, bool, bool, int, Stream&, Stream&) +{ + CV_Error(cv::Error::HeaderIsNull, "OpenCV was build without NVIDIA OpticalFlow support"); +} + +cv::Ptr cv::cuda::NvidiaOpticalFlow_2_0::create( + cv::Size, NVIDIA_OF_PERF_LEVEL, NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE, NVIDIA_OF_HINT_VECTOR_GRID_SIZE, + bool, bool, bool, int, Stream&, Stream&) { CV_Error(cv::Error::HeaderIsNull, "OpenCV was build without NVIDIA OpticalFlow support"); } cv::Ptr cv::cuda::NvidiaOpticalFlow_2_0::create( - int, int, NVIDIA_OF_PERF_LEVEL, NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE, NVIDIA_OF_HINT_VECTOR_GRID_SIZE, - bool, int, cv::Rect*, bool, bool, bool, int, , Stream&, Stream&) + cv::Size, std::vector, NVIDIA_OF_PERF_LEVEL, NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE, NVIDIA_OF_HINT_VECTOR_GRID_SIZE, + bool, bool, bool, int, Stream&, Stream&) { CV_Error(cv::Error::HeaderIsNull, "OpenCV was build without NVIDIA OpticalFlow support"); }