Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
59ed7d06
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
59ed7d06
编写于
6月 19, 2015
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4072 from vladimir-dudnik:opencl-opencv-interop
上级
6ab9df52
217dd63e
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
1423 addition
and
18 deletion
+1423
-18
modules/core/include/opencv2/core/directx.hpp
modules/core/include/opencv2/core/directx.hpp
+72
-2
modules/core/include/opencv2/core/ocl.hpp
modules/core/include/opencv2/core/ocl.hpp
+52
-0
modules/core/src/ocl.cpp
modules/core/src/ocl.cpp
+250
-12
modules/core/src/umatrix.cpp
modules/core/src/umatrix.cpp
+13
-4
samples/CMakeLists.txt
samples/CMakeLists.txt
+2
-0
samples/opencl/CMakeLists.txt
samples/opencl/CMakeLists.txt
+68
-0
samples/opencl/opencl-opencv-interop.cpp
samples/opencl/opencl-opencv-interop.cpp
+966
-0
未找到文件。
modules/core/include/opencv2/core/directx.hpp
浏览文件 @
59ed7d06
...
...
@@ -71,9 +71,28 @@ using namespace cv::ocl;
//! @{
// TODO static functions in the Context class
//! @brief Creates OpenCL context from D3D11 device
//
//! @param pD3D11Device - pointer to D3D11 device
//! @return Returns reference to OpenCL Context
CV_EXPORTS
Context
&
initializeContextFromD3D11Device
(
ID3D11Device
*
pD3D11Device
);
//! @brief Creates OpenCL context from D3D10 device
//
//! @param pD3D10Device - pointer to D3D10 device
//! @return Returns reference to OpenCL Context
CV_EXPORTS
Context
&
initializeContextFromD3D10Device
(
ID3D10Device
*
pD3D10Device
);
//! @brief Creates OpenCL context from Direct3DDevice9Ex device
//
//! @param pDirect3DDevice9Ex - pointer to Direct3DDevice9Ex device
//! @return Returns reference to OpenCL Context
CV_EXPORTS
Context
&
initializeContextFromDirect3DDevice9Ex
(
IDirect3DDevice9Ex
*
pDirect3DDevice9Ex
);
//! @brief Creates OpenCL context from Direct3DDevice9 device
//
//! @param pDirect3DDevice9 - pointer to Direct3Device9 device
//! @return Returns reference to OpenCL Context
CV_EXPORTS
Context
&
initializeContextFromDirect3DDevice9
(
IDirect3DDevice9
*
pDirect3DDevice9
);
//! @}
...
...
@@ -83,19 +102,70 @@ CV_EXPORTS Context& initializeContextFromDirect3DDevice9(IDirect3DDevice9* pDire
//! @addtogroup core_directx
//! @{
//! @brief Converts InputArray to ID3D11Texture2D
//
//! @note Note: function does memory copy from src to
//! pD3D11Texture2D
//
//! @param src - source InputArray
//! @param pD3D11Texture2D - destination D3D11 texture
CV_EXPORTS
void
convertToD3D11Texture2D
(
InputArray
src
,
ID3D11Texture2D
*
pD3D11Texture2D
);
//! @brief Converts ID3D11Texture2D to OutputArray
//
//! @note Note: function does memory copy from pD3D11Texture2D
//! to dst
//
//! @param pD3D11Texture2D - source D3D11 texture
//! @param dst - destination OutputArray
CV_EXPORTS
void
convertFromD3D11Texture2D
(
ID3D11Texture2D
*
pD3D11Texture2D
,
OutputArray
dst
);
//! @brief Converts InputArray to ID3D10Texture2D
//
//! @note Note: function does memory copy from src to
//! pD3D10Texture2D
//
//! @param src - source InputArray
//! @param pD3D10Texture2D - destination D3D10 texture
CV_EXPORTS
void
convertToD3D10Texture2D
(
InputArray
src
,
ID3D10Texture2D
*
pD3D10Texture2D
);
//! @brief Converts ID3D10Texture2D to OutputArray
//
//! @note Note: function does memory copy from pD3D10Texture2D
//! to dst
//
//! @param pD3D10Texture2D - source D3D10 texture
//! @param dst - destination OutputArray
CV_EXPORTS
void
convertFromD3D10Texture2D
(
ID3D10Texture2D
*
pD3D10Texture2D
,
OutputArray
dst
);
//! @brief Converts InputArray to IDirect3DSurface9
//
//! @note Note: function does memory copy from src to
//! pDirect3DSurface9
//
//! @param src - source InputArray
//! @param pDirect3DSurface9 - destination D3D10 texture
//! @param surfaceSharedHandle - shared handle
CV_EXPORTS
void
convertToDirect3DSurface9
(
InputArray
src
,
IDirect3DSurface9
*
pDirect3DSurface9
,
void
*
surfaceSharedHandle
=
NULL
);
//! @brief Converts IDirect3DSurface9 to OutputArray
//
//! @note Note: function does memory copy from pDirect3DSurface9
//! to dst
//
//! @param pDirect3DSurface9 - source D3D10 texture
//! @param dst - destination OutputArray
//! @param surfaceSharedHandle - shared handle
CV_EXPORTS
void
convertFromDirect3DSurface9
(
IDirect3DSurface9
*
pDirect3DSurface9
,
OutputArray
dst
,
void
*
surfaceSharedHandle
=
NULL
);
// Get OpenCV type from DirectX type, return -1 if there is no equivalent
//! @brief Get OpenCV type from DirectX type
//! @param iDXGI_FORMAT - enum DXGI_FORMAT for D3D10/D3D11
//! @return OpenCV type or -1 if there is no equivalent
CV_EXPORTS
int
getTypeFromDXGI_FORMAT
(
const
int
iDXGI_FORMAT
);
// enum DXGI_FORMAT for D3D10/D3D11
// Get OpenCV type from DirectX type, return -1 if there is no equivalent
//! @brief Get OpenCV type from DirectX type
//! @param iD3DFORMAT - enum D3DTYPE for D3D9
//! @return OpenCV type or -1 if there is no equivalent
CV_EXPORTS
int
getTypeFromD3DFORMAT
(
const
int
iD3DFORMAT
);
// enum D3DTYPE for D3D9
//! @}
...
...
modules/core/include/opencv2/core/ocl.hpp
浏览文件 @
59ed7d06
...
...
@@ -276,6 +276,58 @@ protected:
Impl
*
p
;
};
/*
//! @brief Attaches OpenCL context to OpenCV
//
//! @note Note:
// OpenCV will check if available OpenCL platform has platformName name,
// then assign context to OpenCV and call clRetainContext function.
// The deviceID device will be used as target device and new command queue
// will be created.
//
// Params:
//! @param platformName - name of OpenCL platform to attach,
//! this string is used to check if platform is available
//! to OpenCV at runtime
//! @param platfromID - ID of platform attached context was created for
//! @param context - OpenCL context to be attached to OpenCV
//! @param deviceID - ID of device, must be created from attached context
*/
CV_EXPORTS
void
attachContext
(
const
String
&
platformName
,
void
*
platformID
,
void
*
context
,
void
*
deviceID
);
/*
//! @brief Convert OpenCL buffer to UMat
//
//! @note Note:
// OpenCL buffer (cl_mem_buffer) should contain 2D image data, compatible with OpenCV.
// Memory content is not copied from clBuffer to UMat. Instead, buffer handle assigned
// to UMat and clRetainMemObject is called.
//
// Params:
//! @param cl_mem_buffer - source clBuffer handle
//! @param step - num of bytes in single row
//! @param rows - number of rows
//! @param cols - number of cols
//! @param type - OpenCV type of image
//! @param dst - destination UMat
*/
CV_EXPORTS
void
convertFromBuffer
(
void
*
cl_mem_buffer
,
size_t
step
,
int
rows
,
int
cols
,
int
type
,
UMat
&
dst
);
/*
//! @brief Convert OpenCL image2d_t to UMat
//
//! @note Note:
// OpenCL image2d_t (cl_mem_image), should be compatible with OpenCV
// UMat formats.
// Memory content is copied from image to UMat with
// clEnqueueCopyImageToBuffer function.
//
// Params:
//! @param cl_mem_image - source image2d_t handle
//! @param dst - destination UMat
*/
CV_EXPORTS
void
convertFromImage
(
void
*
cl_mem_image
,
UMat
&
dst
);
// TODO Move to internal header
void
initializeContextFromHandle
(
Context
&
ctx
,
void
*
platform
,
void
*
context
,
void
*
device
);
...
...
modules/core/src/ocl.cpp
浏览文件 @
59ed7d06
...
...
@@ -858,9 +858,9 @@ OCL_FUNC_P(cl_context, clCreateContext,
OCL_FUNC
(
cl_int
,
clReleaseContext
,
(
cl_context
context
),
(
context
))
/*
OCL_FUNC(cl_int, clRetainContext, (cl_context context), (context))
OCL_FUNC
(
cl_int
,
clRetainContext
,
(
cl_context
context
),
(
context
))
/*
OCL_FUNC_P(cl_context, clCreateContextFromType,
(const cl_context_properties * properties,
cl_device_type device_type,
...
...
@@ -945,7 +945,6 @@ OCL_FUNC(cl_int, clGetSupportedImageFormats,
(
context
,
flags
,
image_type
,
num_entries
,
image_formats
,
num_image_formats
))
/*
OCL_FUNC
(
cl_int
,
clGetMemObjectInfo
,
(
cl_mem
memobj
,
cl_mem_info
param_name
,
...
...
@@ -962,6 +961,7 @@ OCL_FUNC(cl_int, clGetImageInfo,
size_t
*
param_value_size_ret
),
(
image
,
param_name
,
param_value_size
,
param_value
,
param_value_size_ret
))
/*
OCL_FUNC(cl_int, clCreateKernelsInProgram,
(cl_program program,
cl_uint num_kernels,
...
...
@@ -1038,20 +1038,20 @@ OCL_FUNC(cl_int, clEnqueueCopyImage,
cl_event * event),
(command_queue, src_image, dst_image, src_origin, dst_origin,
region, num_events_in_wait_list, event_wait_list, event))
*/
OCL_FUNC
(
cl_int
,
clEnqueueCopyImageToBuffer
,
(
cl_command_queue
command_queue
,
cl_mem
src_image
,
cl_mem
dst_buffer
,
const size_t * src_origin
[3]
,
const size_t * region
[3]
,
const
size_t
*
src_origin
,
const
size_t
*
region
,
size_t
dst_offset
,
cl_uint
num_events_in_wait_list
,
const
cl_event
*
event_wait_list
,
cl_event
*
event
),
(
command_queue
,
src_image
,
dst_buffer
,
src_origin
,
region
,
dst_offset
,
num_events_in_wait_list
,
event_wait_list
,
event
))
*/
OCL_FUNC
(
cl_int
,
clEnqueueCopyBufferToImage
,
(
cl_command_queue
command_queue
,
...
...
@@ -1100,10 +1100,10 @@ OCL_FUNC(cl_int, clGetKernelInfo,
size_t * param_value_size_ret),
(kernel, param_name, param_value_size, param_value, param_value_size_ret))
OCL_FUNC(cl_int, clRetainMemObject, (cl_mem memobj), (memobj))
*/
OCL_FUNC
(
cl_int
,
clRetainMemObject
,
(
cl_mem
memobj
),
(
memobj
))
OCL_FUNC
(
cl_int
,
clReleaseMemObject
,
(
cl_mem
memobj
),
(
memobj
))
...
...
@@ -1348,7 +1348,7 @@ OCL_FUNC(cl_int, clReleaseEvent, (cl_event event), (event))
#define CL_VERSION_1_2
#endif
#endif
#endif
// HAVE_OPENCL
#ifdef _DEBUG
#define CV_OclDbgAssert CV_DbgAssert
...
...
@@ -2925,6 +2925,83 @@ CV_EXPORTS bool useSVM(UMatUsageFlags usageFlags)
#endif // HAVE_OPENCL_SVM
static
void
get_platform_name
(
cl_platform_id
id
,
String
&
name
)
{
// get platform name string length
size_t
sz
=
0
;
if
(
CL_SUCCESS
!=
clGetPlatformInfo
(
id
,
CL_PLATFORM_NAME
,
0
,
0
,
&
sz
))
CV_ErrorNoReturn
(
cv
::
Error
::
OpenCLApiCallError
,
"clGetPlatformInfo failed!"
);
// get platform name string
AutoBuffer
<
char
>
buf
(
sz
+
1
);
if
(
CL_SUCCESS
!=
clGetPlatformInfo
(
id
,
CL_PLATFORM_NAME
,
sz
,
buf
,
0
))
CV_ErrorNoReturn
(
cv
::
Error
::
OpenCLApiCallError
,
"clGetPlatformInfo failed!"
);
// just in case, ensure trailing zero for ASCIIZ string
buf
[
sz
]
=
0
;
name
=
(
const
char
*
)
buf
;
}
/*
// Attaches OpenCL context to OpenCV
*/
void
attachContext
(
const
String
&
platformName
,
void
*
platformID
,
void
*
context
,
void
*
deviceID
)
{
cl_uint
cnt
=
0
;
if
(
CL_SUCCESS
!=
clGetPlatformIDs
(
0
,
0
,
&
cnt
))
CV_ErrorNoReturn
(
cv
::
Error
::
OpenCLApiCallError
,
"clGetPlatformIDs failed!"
);
if
(
cnt
==
0
)
CV_ErrorNoReturn
(
cv
::
Error
::
OpenCLApiCallError
,
"no OpenCL platform available!"
);
std
::
vector
<
cl_platform_id
>
platforms
(
cnt
);
if
(
CL_SUCCESS
!=
clGetPlatformIDs
(
cnt
,
&
platforms
[
0
],
0
))
CV_ErrorNoReturn
(
cv
::
Error
::
OpenCLApiCallError
,
"clGetPlatformIDs failed!"
);
bool
platformAvailable
=
false
;
// check if external platformName contained in list of available platforms in OpenCV
for
(
unsigned
int
i
=
0
;
i
<
cnt
;
i
++
)
{
String
availablePlatformName
;
get_platform_name
(
platforms
[
i
],
availablePlatformName
);
// external platform is found in the list of available platforms
if
(
platformName
==
availablePlatformName
)
{
platformAvailable
=
true
;
break
;
}
}
if
(
!
platformAvailable
)
CV_ErrorNoReturn
(
cv
::
Error
::
OpenCLApiCallError
,
"No matched platforms available!"
);
// check if platformID corresponds to platformName
String
actualPlatformName
;
get_platform_name
((
cl_platform_id
)
platformID
,
actualPlatformName
);
if
(
platformName
!=
actualPlatformName
)
CV_ErrorNoReturn
(
cv
::
Error
::
OpenCLApiCallError
,
"No matched platforms available!"
);
// do not initialize OpenCL context
Context
ctx
=
Context
::
getDefault
(
false
);
// attach supplied context to OpenCV
initializeContextFromHandle
(
ctx
,
platformID
,
context
,
deviceID
);
if
(
CL_SUCCESS
!=
clRetainContext
((
cl_context
)
context
))
CV_ErrorNoReturn
(
cv
::
Error
::
OpenCLApiCallError
,
"clRetainContext failed!"
);
// clear command queue, if any
getCoreTlsData
().
get
()
->
oclQueue
.
finish
();
Queue
q
;
getCoreTlsData
().
get
()
->
oclQueue
=
q
;
return
;
}
// attachContext()
void
initializeContextFromHandle
(
Context
&
ctx
,
void
*
platform
,
void
*
_context
,
void
*
_device
)
{
...
...
@@ -3150,10 +3227,10 @@ struct Kernel::Impl
bool
haveTempDstUMats
;
};
}}
}}
// namespace cv::ocl
extern
"C"
{
extern
"C"
{
static
void
CL_CALLBACK
oclCleanupCallback
(
cl_event
,
cl_int
,
void
*
p
)
{
((
cv
::
ocl
::
Kernel
::
Impl
*
)
p
)
->
finit
();
...
...
@@ -5166,6 +5243,167 @@ MatAllocator* getOpenCLAllocator()
return
allocator
;
}
}}
// namespace cv::ocl
namespace
cv
{
// three funcs below are implemented in umatrix.cpp
void
setSize
(
UMat
&
m
,
int
_dims
,
const
int
*
_sz
,
const
size_t
*
_steps
,
bool
autoSteps
=
false
);
void
updateContinuityFlag
(
UMat
&
m
);
void
finalizeHdr
(
UMat
&
m
);
}
// namespace cv
namespace
cv
{
namespace
ocl
{
/*
// Convert OpenCL buffer memory to UMat
*/
void
convertFromBuffer
(
void
*
cl_mem_buffer
,
size_t
step
,
int
rows
,
int
cols
,
int
type
,
UMat
&
dst
)
{
int
d
=
2
;
int
sizes
[]
=
{
rows
,
cols
};
CV_Assert
(
0
<=
d
&&
d
<=
CV_MAX_DIM
);
dst
.
release
();
dst
.
flags
=
(
type
&
Mat
::
TYPE_MASK
)
|
Mat
::
MAGIC_VAL
;
dst
.
usageFlags
=
USAGE_DEFAULT
;
setSize
(
dst
,
d
,
sizes
,
0
,
true
);
dst
.
offset
=
0
;
cl_mem
memobj
=
(
cl_mem
)
cl_mem_buffer
;
cl_mem_object_type
mem_type
=
0
;
CV_Assert
(
clGetMemObjectInfo
(
memobj
,
CL_MEM_TYPE
,
sizeof
(
cl_mem_object_type
),
&
mem_type
,
0
)
==
CL_SUCCESS
);
CV_Assert
(
CL_MEM_OBJECT_BUFFER
==
mem_type
);
size_t
total
=
0
;
CV_Assert
(
clGetMemObjectInfo
(
memobj
,
CL_MEM_SIZE
,
sizeof
(
size_t
),
&
total
,
0
)
==
CL_SUCCESS
);
CV_Assert
(
clRetainMemObject
(
memobj
)
==
CL_SUCCESS
);
CV_Assert
((
int
)
step
>=
cols
*
CV_ELEM_SIZE
(
type
));
CV_Assert
(
total
>=
rows
*
step
);
// attach clBuffer to UMatData
dst
.
u
=
new
UMatData
(
getOpenCLAllocator
());
dst
.
u
->
data
=
0
;
dst
.
u
->
allocatorFlags_
=
0
;
// not allocated from any OpenCV buffer pool
dst
.
u
->
flags
=
0
;
dst
.
u
->
handle
=
cl_mem_buffer
;
dst
.
u
->
origdata
=
0
;
dst
.
u
->
prevAllocator
=
0
;
dst
.
u
->
size
=
total
;
finalizeHdr
(
dst
);
dst
.
addref
();
return
;
}
// convertFromBuffer()
/*
// Convert OpenCL image2d_t memory to UMat
*/
void
convertFromImage
(
void
*
cl_mem_image
,
UMat
&
dst
)
{
cl_mem
clImage
=
(
cl_mem
)
cl_mem_image
;
cl_mem_object_type
mem_type
=
0
;
CV_Assert
(
clGetMemObjectInfo
(
clImage
,
CL_MEM_TYPE
,
sizeof
(
cl_mem_object_type
),
&
mem_type
,
0
)
==
CL_SUCCESS
);
CV_Assert
(
CL_MEM_OBJECT_IMAGE2D
==
mem_type
);
cl_image_format
fmt
=
{
0
,
0
};
CV_Assert
(
clGetImageInfo
(
clImage
,
CL_IMAGE_FORMAT
,
sizeof
(
cl_image_format
),
&
fmt
,
0
)
==
CL_SUCCESS
);
int
depth
=
CV_8U
;
switch
(
fmt
.
image_channel_data_type
)
{
case
CL_UNORM_INT8
:
case
CL_UNSIGNED_INT8
:
depth
=
CV_8U
;
break
;
case
CL_SNORM_INT8
:
case
CL_SIGNED_INT8
:
depth
=
CV_8S
;
break
;
case
CL_UNORM_INT16
:
case
CL_UNSIGNED_INT16
:
depth
=
CV_16U
;
break
;
case
CL_SNORM_INT16
:
case
CL_SIGNED_INT16
:
depth
=
CV_16S
;
break
;
case
CL_SIGNED_INT32
:
depth
=
CV_32S
;
break
;
case
CL_FLOAT
:
depth
=
CV_32F
;
break
;
default:
CV_Error
(
cv
::
Error
::
OpenCLApiCallError
,
"Not supported image_channel_data_type"
);
}
int
type
=
CV_8UC1
;
switch
(
fmt
.
image_channel_order
)
{
case
CL_R
:
type
=
CV_MAKE_TYPE
(
depth
,
1
);
break
;
case
CL_RGBA
:
case
CL_BGRA
:
case
CL_ARGB
:
type
=
CV_MAKE_TYPE
(
depth
,
4
);
break
;
default:
CV_Error
(
cv
::
Error
::
OpenCLApiCallError
,
"Not supported image_channel_order"
);
break
;
}
size_t
step
=
0
;
CV_Assert
(
clGetImageInfo
(
clImage
,
CL_IMAGE_ROW_PITCH
,
sizeof
(
size_t
),
&
step
,
0
)
==
CL_SUCCESS
);
size_t
w
=
0
;
CV_Assert
(
clGetImageInfo
(
clImage
,
CL_IMAGE_WIDTH
,
sizeof
(
size_t
),
&
w
,
0
)
==
CL_SUCCESS
);
size_t
h
=
0
;
CV_Assert
(
clGetImageInfo
(
clImage
,
CL_IMAGE_HEIGHT
,
sizeof
(
size_t
),
&
h
,
0
)
==
CL_SUCCESS
);
dst
.
create
((
int
)
h
,
(
int
)
w
,
type
);
cl_mem
clBuffer
=
(
cl_mem
)
dst
.
handle
(
ACCESS_READ
);
cl_command_queue
q
=
(
cl_command_queue
)
Queue
::
getDefault
().
ptr
();
size_t
offset
=
0
;
size_t
src_origin
[
3
]
=
{
0
,
0
,
0
};
size_t
region
[
3
]
=
{
w
,
h
,
1
};
CV_Assert
(
clEnqueueCopyImageToBuffer
(
q
,
clImage
,
clBuffer
,
src_origin
,
region
,
offset
,
0
,
NULL
,
NULL
)
==
CL_SUCCESS
);
CV_Assert
(
clFinish
(
q
)
==
CL_SUCCESS
);
return
;
}
// convertFromImage()
///////////////////////////////////////////// Utility functions /////////////////////////////////////////////////
static
void
getDevices
(
std
::
vector
<
cl_device_id
>&
devices
,
cl_platform_id
platform
)
...
...
modules/core/src/umatrix.cpp
浏览文件 @
59ed7d06
...
...
@@ -46,6 +46,13 @@
namespace
cv
{
// forward decls, implementation is below in this file
void
setSize
(
UMat
&
m
,
int
_dims
,
const
int
*
_sz
,
const
size_t
*
_steps
,
bool
autoSteps
=
false
);
void
updateContinuityFlag
(
UMat
&
m
);
void
finalizeHdr
(
UMat
&
m
);
// it should be a prime number for the best hash function
enum
{
UMAT_NLOCKS
=
31
};
static
Mutex
umatLocks
[
UMAT_NLOCKS
];
...
...
@@ -123,8 +130,8 @@ void swap( UMat& a, UMat& b )
}
static
inline
void
setSize
(
UMat
&
m
,
int
_dims
,
const
int
*
_sz
,
const
size_t
*
_steps
,
bool
autoSteps
=
false
)
void
setSize
(
UMat
&
m
,
int
_dims
,
const
int
*
_sz
,
const
size_t
*
_steps
,
bool
autoSteps
)
{
CV_Assert
(
0
<=
_dims
&&
_dims
<=
CV_MAX_DIM
);
if
(
m
.
dims
!=
_dims
)
...
...
@@ -176,7 +183,8 @@ static inline void setSize( UMat& m, int _dims, const int* _sz,
}
}
static
void
updateContinuityFlag
(
UMat
&
m
)
void
updateContinuityFlag
(
UMat
&
m
)
{
int
i
,
j
;
for
(
i
=
0
;
i
<
m
.
dims
;
i
++
)
...
...
@@ -199,7 +207,7 @@ static void updateContinuityFlag(UMat& m)
}
static
void
finalizeHdr
(
UMat
&
m
)
void
finalizeHdr
(
UMat
&
m
)
{
updateContinuityFlag
(
m
);
int
d
=
m
.
dims
;
...
...
@@ -207,6 +215,7 @@ static void finalizeHdr(UMat& m)
m
.
rows
=
m
.
cols
=
-
1
;
}
UMat
Mat
::
getUMat
(
int
accessFlags
,
UMatUsageFlags
usageFlags
)
const
{
UMat
hdr
;
...
...
samples/CMakeLists.txt
浏览文件 @
59ed7d06
...
...
@@ -66,6 +66,8 @@ endif()
add_subdirectory
(
cpp
)
# FIXIT: can't use cvconfig.h in samples: add_subdirectory(gpu)
add_subdirectory
(
opencl
)
if
(
WIN32
)
add_subdirectory
(
directx
)
endif
()
...
...
samples/opencl/CMakeLists.txt
0 → 100644
浏览文件 @
59ed7d06
# cmake 3.1 needed for find_package(OpenCL)
if
(
CMAKE_VERSION VERSION_LESS
"3.1"
)
message
(
STATUS
"OpenCL samples require CMakes 3.1+"
)
return
()
endif
()
set
(
OPENCV_OPENCL_SAMPLES_REQUIRED_DEPS
opencv_core
opencv_imgproc
opencv_video
opencv_imgcodecs
opencv_videoio
opencv_highgui
)
ocv_check_dependencies
(
${
OPENCV_OPENCL_SAMPLES_REQUIRED_DEPS
}
)
if
(
BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND
)
find_package
(
OpenCL 1.2 REQUIRED
)
set
(
project
"opencl"
)
string
(
TOUPPER
"
${
project
}
"
project_upper
)
project
(
"
${
project
}
_samples"
)
ocv_include_modules_recurse
(
${
OPENCV_OPENCL_SAMPLES_REQUIRED_DEPS
}
)
include_directories
(
${
OpenCL_INCLUDE_DIR
}
)
# ---------------------------------------------
# Define executable targets
# ---------------------------------------------
MACRO
(
OPENCV_DEFINE_OPENCL_EXAMPLE name srcs
)
set
(
the_target
"example_
${
project
}
_
${
name
}
"
)
add_executable
(
${
the_target
}
${
srcs
}
)
ocv_target_link_libraries
(
${
the_target
}
${
OPENCV_LINKER_LIBS
}
${
OPENCV_OPENCL_SAMPLES_REQUIRED_DEPS
}
${
OpenCL_LIBRARY
}
)
set_target_properties
(
${
the_target
}
PROPERTIES
OUTPUT_NAME
"
${
project
}
-example-
${
name
}
"
PROJECT_LABEL
"(EXAMPLE_
${
project_upper
}
)
${
name
}
"
)
if
(
ENABLE_SOLUTION_FOLDERS
)
set_target_properties
(
${
the_target
}
PROPERTIES FOLDER
"samples//
${
project
}
"
)
endif
()
if
(
WIN32
)
if
(
MSVC AND NOT BUILD_SHARED_LIBS
)
set_target_properties
(
${
the_target
}
PROPERTIES LINK_FLAGS
"/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /DEBUG"
)
endif
()
install
(
TARGETS
${
the_target
}
RUNTIME DESTINATION
"
${
OPENCV_SAMPLES_BIN_INSTALL_PATH
}
/
${
project
}
"
COMPONENT main
)
endif
()
ENDMACRO
()
file
(
GLOB all_samples RELATIVE
${
CMAKE_CURRENT_SOURCE_DIR
}
*.cpp
)
foreach
(
sample_filename
${
all_samples
}
)
get_filename_component
(
sample
${
sample_filename
}
NAME_WE
)
file
(
GLOB sample_srcs RELATIVE
${
CMAKE_CURRENT_SOURCE_DIR
}
${
sample
}
.*
)
OPENCV_DEFINE_OPENCL_EXAMPLE
(
${
sample
}
${
sample_srcs
}
)
endforeach
()
endif
()
samples/opencl/opencl-opencv-interop.cpp
0 → 100644
浏览文件 @
59ed7d06
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录