static void* opencl_check_fn(int ID) { const struct DynamicFnEntry* e = NULL; if (ID < CUSTOM_FUNCTION_ID) { CV_Assert(ID >= 0 && ID < (int)(sizeof(opencl_fn_list)/sizeof(opencl_fn_list[0]))); e = opencl_fn_list[ID]; } #ifdef HAVE_OPENCL_SVM else if (ID >= SVM_FUNCTION_ID_START && ID < SVM_FUNCTION_ID_END) { ID = ID - SVM_FUNCTION_ID_START; CV_Assert(ID >= 0 && ID < (int)(sizeof(opencl_svm_fn_list)/sizeof(opencl_svm_fn_list[0]))); e = opencl_svm_fn_list[ID]; } #endif else { CV_ErrorNoReturn(cv::Error::StsBadArg, "Invalid function ID"); } void* func = CV_CL_GET_PROC_ADDRESS(e->fnName); if (!func) { throw cv::Exception(cv::Error::OpenCLApiCallError, cv::format("OpenCL function is not available: [%s]", e->fnName), CV_Func, __FILE__, __LINE__); } *(e->ppFn) = func; return func; }
static void* openclamdfft_check_fn(int ID) { assert(ID >= 0 && ID < (int)(sizeof(openclamdfft_fn)/sizeof(openclamdfft_fn[0]))); const struct DynamicFnEntry* e = openclamdfft_fn[ID]; void* func = CV_CL_GET_PROC_ADDRESS(e->fnName); if (!func) { CV_Error(cv::Error::OpenCLApiCallError, cv::format("OpenCL AMD FFT function is not available: [%s]", e->fnName)); } *(e->ppFn) = func; return func; }
static void* opencl_check_fn(int ID) { extern const char* opencl_fn_names[]; void* func = CV_CL_GET_PROC_ADDRESS(opencl_fn_names[ID]); if (!func) { std::ostringstream msg; msg << "OpenCL function is not available: [" << opencl_fn_names[ID] << "]"; CV_Error(CV_StsBadFunc, msg.str()); } extern void* opencl_fn_ptrs[]; *(void**)(opencl_fn_ptrs[ID]) = func; return func; }
static void* opencl_gl_check_fn(int ID) { const struct DynamicFnEntry* e = NULL; assert(ID >= 0 && ID < (int)(sizeof(opencl_gl_fn_list)/sizeof(opencl_gl_fn_list[0]))); e = opencl_gl_fn_list[ID]; void* func = CV_CL_GET_PROC_ADDRESS(e->fnName); if (!func) { throw cv::Exception(cv::Error::OpenCLApiCallError, cv::format("OpenCL function is not available: [%s]", e->fnName), CV_Func, __FILE__, __LINE__); } *(e->ppFn) = func; return func; }