~paparazzi-uav/paparazzi/v5.0-manual

« back to all changes in this revision

Viewing changes to sw/ext/opencv_bebop/opencv/modules/core/include/opencv2/core/private.cuda.hpp

  • Committer: Paparazzi buildbot
  • Date: 2016-05-18 15:00:29 UTC
  • Revision ID: felix.ruess+docbot@gmail.com-20160518150029-e8lgzi5kvb4p7un9
Manual import commit 4b8bbb730080dac23cf816b98908dacfabe2a8ec from v5.0 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*M///////////////////////////////////////////////////////////////////////////////////////
 
2
//
 
3
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 
4
//
 
5
//  By downloading, copying, installing or using the software you agree to this license.
 
6
//  If you do not agree to this license, do not download, install,
 
7
//  copy or use the software.
 
8
//
 
9
//
 
10
//                          License Agreement
 
11
//                For Open Source Computer Vision Library
 
12
//
 
13
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 
14
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 
15
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
 
16
// Third party copyrights are property of their respective owners.
 
17
//
 
18
// Redistribution and use in source and binary forms, with or without modification,
 
19
// are permitted provided that the following conditions are met:
 
20
//
 
21
//   * Redistribution's of source code must retain the above copyright notice,
 
22
//     this list of conditions and the following disclaimer.
 
23
//
 
24
//   * Redistribution's in binary form must reproduce the above copyright notice,
 
25
//     this list of conditions and the following disclaimer in the documentation
 
26
//     and/or other materials provided with the distribution.
 
27
//
 
28
//   * The name of the copyright holders may not be used to endorse or promote products
 
29
//     derived from this software without specific prior written permission.
 
30
//
 
31
// This software is provided by the copyright holders and contributors "as is" and
 
32
// any express or implied warranties, including, but not limited to, the implied
 
33
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 
34
// In no event shall the Intel Corporation or contributors be liable for any direct,
 
35
// indirect, incidental, special, exemplary, or consequential damages
 
36
// (including, but not limited to, procurement of substitute goods or services;
 
37
// loss of use, data, or profits; or business interruption) however caused
 
38
// and on any theory of liability, whether in contract, strict liability,
 
39
// or tort (including negligence or otherwise) arising in any way out of
 
40
// the use of this software, even if advised of the possibility of such damage.
 
41
//
 
42
//M*/
 
43
 
 
44
#ifndef __OPENCV_CORE_PRIVATE_CUDA_HPP__
 
45
#define __OPENCV_CORE_PRIVATE_CUDA_HPP__
 
46
 
 
47
#ifndef __OPENCV_BUILD
 
48
#  error this is a private header which should not be used from outside of the OpenCV library
 
49
#endif
 
50
 
 
51
#include "cvconfig.h"
 
52
 
 
53
#include "opencv2/core/cvdef.h"
 
54
#include "opencv2/core/base.hpp"
 
55
 
 
56
#include "opencv2/core/cuda.hpp"
 
57
 
 
58
#ifdef HAVE_CUDA
 
59
#  include <cuda.h>
 
60
#  include <cuda_runtime.h>
 
61
#  include <npp.h>
 
62
#  include "opencv2/core/cuda_stream_accessor.hpp"
 
63
#  include "opencv2/core/cuda/common.hpp"
 
64
 
 
65
#  define NPP_VERSION (NPP_VERSION_MAJOR * 1000 + NPP_VERSION_MINOR * 100 + NPP_VERSION_BUILD)
 
66
 
 
67
#  define CUDART_MINIMUM_REQUIRED_VERSION 4020
 
68
 
 
69
#  if (CUDART_VERSION < CUDART_MINIMUM_REQUIRED_VERSION)
 
70
#    error "Insufficient Cuda Runtime library version, please update it."
 
71
#  endif
 
72
 
 
73
#  if defined(CUDA_ARCH_BIN_OR_PTX_10)
 
74
#    error "OpenCV CUDA module doesn't support NVIDIA compute capability 1.0"
 
75
#  endif
 
76
#endif
 
77
 
 
78
//! @cond IGNORED
 
79
 
 
80
namespace cv { namespace cuda {
 
81
    CV_EXPORTS cv::String getNppErrorMessage(int code);
 
82
    CV_EXPORTS cv::String getCudaDriverApiErrorMessage(int code);
 
83
 
 
84
    CV_EXPORTS GpuMat getInputMat(InputArray _src, Stream& stream);
 
85
 
 
86
    CV_EXPORTS GpuMat getOutputMat(OutputArray _dst, int rows, int cols, int type, Stream& stream);
 
87
    static inline GpuMat getOutputMat(OutputArray _dst, Size size, int type, Stream& stream)
 
88
    {
 
89
        return getOutputMat(_dst, size.height, size.width, type, stream);
 
90
    }
 
91
 
 
92
    CV_EXPORTS void syncOutput(const GpuMat& dst, OutputArray _dst, Stream& stream);
 
93
}}
 
94
 
 
95
#ifndef HAVE_CUDA
 
96
 
 
97
static inline void throw_no_cuda() { CV_Error(cv::Error::GpuNotSupported, "The library is compiled without CUDA support"); }
 
98
 
 
99
#else // HAVE_CUDA
 
100
 
 
101
static inline void throw_no_cuda() { CV_Error(cv::Error::StsNotImplemented, "The called functionality is disabled for current build or platform"); }
 
102
 
 
103
namespace cv { namespace cuda
 
104
{
 
105
    class CV_EXPORTS BufferPool
 
106
    {
 
107
    public:
 
108
        explicit BufferPool(Stream& stream);
 
109
 
 
110
        GpuMat getBuffer(int rows, int cols, int type);
 
111
        GpuMat getBuffer(Size size, int type) { return getBuffer(size.height, size.width, type); }
 
112
 
 
113
        GpuMat::Allocator* getAllocator() const { return allocator_; }
 
114
 
 
115
    private:
 
116
        GpuMat::Allocator* allocator_;
 
117
    };
 
118
 
 
119
    static inline void checkNppError(int code, const char* file, const int line, const char* func)
 
120
    {
 
121
        if (code < 0)
 
122
            cv::error(cv::Error::GpuApiCallError, getNppErrorMessage(code), func, file, line);
 
123
    }
 
124
 
 
125
    static inline void checkCudaDriverApiError(int code, const char* file, const int line, const char* func)
 
126
    {
 
127
        if (code != CUDA_SUCCESS)
 
128
            cv::error(cv::Error::GpuApiCallError, getCudaDriverApiErrorMessage(code), func, file, line);
 
129
    }
 
130
 
 
131
    template<int n> struct NPPTypeTraits;
 
132
    template<> struct NPPTypeTraits<CV_8U>  { typedef Npp8u npp_type; };
 
133
    template<> struct NPPTypeTraits<CV_8S>  { typedef Npp8s npp_type; };
 
134
    template<> struct NPPTypeTraits<CV_16U> { typedef Npp16u npp_type; };
 
135
    template<> struct NPPTypeTraits<CV_16S> { typedef Npp16s npp_type; };
 
136
    template<> struct NPPTypeTraits<CV_32S> { typedef Npp32s npp_type; };
 
137
    template<> struct NPPTypeTraits<CV_32F> { typedef Npp32f npp_type; };
 
138
    template<> struct NPPTypeTraits<CV_64F> { typedef Npp64f npp_type; };
 
139
 
 
140
    class NppStreamHandler
 
141
    {
 
142
    public:
 
143
        inline explicit NppStreamHandler(Stream& newStream)
 
144
        {
 
145
            oldStream = nppGetStream();
 
146
            nppSetStream(StreamAccessor::getStream(newStream));
 
147
        }
 
148
 
 
149
        inline explicit NppStreamHandler(cudaStream_t newStream)
 
150
        {
 
151
            oldStream = nppGetStream();
 
152
            nppSetStream(newStream);
 
153
        }
 
154
 
 
155
        inline ~NppStreamHandler()
 
156
        {
 
157
            nppSetStream(oldStream);
 
158
        }
 
159
 
 
160
    private:
 
161
        cudaStream_t oldStream;
 
162
    };
 
163
}}
 
164
 
 
165
#define nppSafeCall(expr)  cv::cuda::checkNppError(expr, __FILE__, __LINE__, CV_Func)
 
166
#define cuSafeCall(expr)  cv::cuda::checkCudaDriverApiError(expr, __FILE__, __LINE__, CV_Func)
 
167
 
 
168
#endif // HAVE_CUDA
 
169
 
 
170
//! @endcond
 
171
 
 
172
#endif // __OPENCV_CORE_CUDA_PRIVATE_HPP__