Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef __OPENCV_GPU_COMMON_HPP__
00044 #define __OPENCV_GPU_COMMON_HPP__
00045
00046 #include <cuda_runtime.h>
00047 #include "opencv2/core/cuda_devptrs.hpp"
00048
00049 #ifndef CV_PI
00050 #define CV_PI 3.1415926535897932384626433832795
00051 #endif
00052
00053 #ifndef CV_PI_F
00054 #ifndef CV_PI
00055 #define CV_PI_F 3.14159265f
00056 #else
00057 #define CV_PI_F ((float)CV_PI)
00058 #endif
00059 #endif
00060
00061 #if defined(__GNUC__)
00062 #define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__, __func__)
00063 #else
00064 #define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__)
00065 #endif
00066
00067 namespace cv { namespace gpu
00068 {
00069 void error(const char *error_string, const char *file, const int line, const char *func);
00070
00071 template <typename T> static inline bool isAligned(const T* ptr, size_t size)
00072 {
00073 return reinterpret_cast<size_t>(ptr) % size == 0;
00074 }
00075
00076 static inline bool isAligned(size_t step, size_t size)
00077 {
00078 return step % size == 0;
00079 }
00080 }}
00081
00082 static inline void ___cudaSafeCall(cudaError_t err, const char *file, const int line, const char *func = "")
00083 {
00084 if (cudaSuccess != err)
00085 cv::gpu::error(cudaGetErrorString(err), file, line, func);
00086 }
00087
00088 #ifdef __CUDACC__
00089
00090 namespace cv { namespace gpu
00091 {
00092 __host__ __device__ __forceinline__ int divUp(int total, int grain)
00093 {
00094 return (total + grain - 1) / grain;
00095 }
00096
00097 namespace device
00098 {
00099 typedef unsigned char uchar;
00100 typedef unsigned short ushort;
00101 typedef signed char schar;
00102 typedef unsigned int uint;
00103
00104 template<class T> inline void bindTexture(const textureReference* tex, const PtrStepSz<T>& img)
00105 {
00106 cudaChannelFormatDesc desc = cudaCreateChannelDesc<T>();
00107 cudaSafeCall( cudaBindTexture2D(0, tex, img.ptr(), &desc, img.cols, img.rows, img.step) );
00108 }
00109 }
00110 }}
00111
00112 #endif // __CUDACC__
00113
00114 #endif // __OPENCV_GPU_COMMON_HPP__