Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
ce48b6af
Commit
ce48b6af
authored
Jan 27, 2014
by
Andrey Pavlenko
Committed by
OpenCV Buildbot
Jan 27, 2014
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2203 from ilya-lavrenov:tapi_umat_vectors
parents
4dd805b7
f767077a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
17 deletions
+85
-17
convert.cpp
modules/core/src/convert.cpp
+24
-11
matrix.cpp
modules/core/src/matrix.cpp
+60
-5
test_channels.cpp
modules/core/test/ocl/test_channels.cpp
+1
-1
No files found.
modules/core/src/convert.cpp
View file @
ce48b6af
...
@@ -289,10 +289,12 @@ static bool ocl_split( InputArray _m, OutputArrayOfArrays _mv )
...
@@ -289,10 +289,12 @@ static bool ocl_split( InputArray _m, OutputArrayOfArrays _mv )
return
false
;
return
false
;
Size
size
=
_m
.
size
();
Size
size
=
_m
.
size
();
std
::
vector
<
UMat
>
&
dst
=
*
(
std
::
vector
<
UMat
>
*
)
_mv
.
getObj
();
_mv
.
create
(
cn
,
1
,
depth
);
dst
.
resize
(
cn
);
for
(
int
i
=
0
;
i
<
cn
;
++
i
)
for
(
int
i
=
0
;
i
<
cn
;
++
i
)
dst
[
i
].
create
(
size
,
depth
);
_mv
.
create
(
size
,
depth
,
i
);
std
::
vector
<
UMat
>
dst
;
_mv
.
getUMatVector
(
dst
);
int
argidx
=
k
.
set
(
0
,
ocl
::
KernelArg
::
ReadOnly
(
_m
.
getUMat
()));
int
argidx
=
k
.
set
(
0
,
ocl
::
KernelArg
::
ReadOnly
(
_m
.
getUMat
()));
for
(
int
i
=
0
;
i
<
cn
;
++
i
)
for
(
int
i
=
0
;
i
<
cn
;
++
i
)
...
@@ -317,10 +319,19 @@ void cv::split(InputArray _m, OutputArrayOfArrays _mv)
...
@@ -317,10 +319,19 @@ void cv::split(InputArray _m, OutputArrayOfArrays _mv)
_mv
.
release
();
_mv
.
release
();
return
;
return
;
}
}
CV_Assert
(
!
_mv
.
fixedType
()
||
_mv
.
empty
()
||
_mv
.
type
()
==
m
.
depth
()
);
CV_Assert
(
!
_mv
.
fixedType
()
||
_mv
.
empty
()
||
_mv
.
type
()
==
m
.
depth
()
);
_mv
.
create
(
m
.
channels
(),
1
,
m
.
depth
());
Mat
*
dst
=
&
_mv
.
getMatRef
(
0
);
Size
size
=
m
.
size
();
split
(
m
,
dst
);
int
depth
=
m
.
depth
(),
cn
=
m
.
channels
();
_mv
.
create
(
cn
,
1
,
depth
);
for
(
int
i
=
0
;
i
<
cn
;
++
i
)
_mv
.
create
(
size
,
depth
,
i
);
std
::
vector
<
Mat
>
dst
;
_mv
.
getMatVector
(
dst
);
split
(
m
,
&
dst
[
0
]);
}
}
void
cv
::
merge
(
const
Mat
*
mv
,
size_t
n
,
OutputArray
_dst
)
void
cv
::
merge
(
const
Mat
*
mv
,
size_t
n
,
OutputArray
_dst
)
...
@@ -404,7 +415,8 @@ namespace cv {
...
@@ -404,7 +415,8 @@ namespace cv {
static
bool
ocl_merge
(
InputArrayOfArrays
_mv
,
OutputArray
_dst
)
static
bool
ocl_merge
(
InputArrayOfArrays
_mv
,
OutputArray
_dst
)
{
{
const
std
::
vector
<
UMat
>
&
src
=
*
(
const
std
::
vector
<
UMat
>
*
)(
_mv
.
getObj
());
std
::
vector
<
UMat
>
src
;
_mv
.
getUMatVector
(
src
);
CV_Assert
(
!
src
.
empty
());
CV_Assert
(
!
src
.
empty
());
int
type
=
src
[
0
].
type
(),
depth
=
CV_MAT_DEPTH
(
type
);
int
type
=
src
[
0
].
type
(),
depth
=
CV_MAT_DEPTH
(
type
);
...
@@ -651,8 +663,9 @@ static void getUMatIndex(const std::vector<UMat> & um, int cn, int & idx, int &
...
@@ -651,8 +663,9 @@ static void getUMatIndex(const std::vector<UMat> & um, int cn, int & idx, int &
static
bool
ocl_mixChannels
(
InputArrayOfArrays
_src
,
InputOutputArrayOfArrays
_dst
,
static
bool
ocl_mixChannels
(
InputArrayOfArrays
_src
,
InputOutputArrayOfArrays
_dst
,
const
int
*
fromTo
,
size_t
npairs
)
const
int
*
fromTo
,
size_t
npairs
)
{
{
const
std
::
vector
<
UMat
>
&
src
=
*
(
const
std
::
vector
<
UMat
>
*
)
_src
.
getObj
();
std
::
vector
<
UMat
>
src
,
dst
;
std
::
vector
<
UMat
>
&
dst
=
*
(
std
::
vector
<
UMat
>
*
)
_dst
.
getObj
();
_src
.
getUMatVector
(
src
);
_dst
.
getUMatVector
(
dst
);
size_t
nsrc
=
src
.
size
(),
ndst
=
dst
.
size
();
size_t
nsrc
=
src
.
size
(),
ndst
=
dst
.
size
();
CV_Assert
(
nsrc
>
0
&&
ndst
>
0
);
CV_Assert
(
nsrc
>
0
&&
ndst
>
0
);
...
@@ -718,7 +731,7 @@ void cv::mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
...
@@ -718,7 +731,7 @@ void cv::mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
if
(
npairs
==
0
||
fromTo
==
NULL
)
if
(
npairs
==
0
||
fromTo
==
NULL
)
return
;
return
;
CV_OCL_RUN
(
src
.
isUMatVector
()
&&
dst
.
isUMatVector
(),
CV_OCL_RUN
(
dst
.
isUMatVector
(),
ocl_mixChannels
(
src
,
dst
,
fromTo
,
npairs
))
ocl_mixChannels
(
src
,
dst
,
fromTo
,
npairs
))
bool
src_is_mat
=
src
.
kind
()
!=
_InputArray
::
STD_VECTOR_MAT
&&
bool
src_is_mat
=
src
.
kind
()
!=
_InputArray
::
STD_VECTOR_MAT
&&
...
@@ -747,7 +760,7 @@ void cv::mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
...
@@ -747,7 +760,7 @@ void cv::mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
if
(
fromTo
.
empty
())
if
(
fromTo
.
empty
())
return
;
return
;
CV_OCL_RUN
(
src
.
isUMatVector
()
&&
dst
.
isUMatVector
(),
CV_OCL_RUN
(
dst
.
isUMatVector
(),
ocl_mixChannels
(
src
,
dst
,
&
fromTo
[
0
],
fromTo
.
size
()
>>
1
))
ocl_mixChannels
(
src
,
dst
,
&
fromTo
[
0
],
fromTo
.
size
()
>>
1
))
bool
src_is_mat
=
src
.
kind
()
!=
_InputArray
::
STD_VECTOR_MAT
&&
bool
src_is_mat
=
src
.
kind
()
!=
_InputArray
::
STD_VECTOR_MAT
&&
...
...
modules/core/src/matrix.cpp
View file @
ce48b6af
...
@@ -1193,7 +1193,6 @@ Mat _InputArray::getMat(int i) const
...
@@ -1193,7 +1193,6 @@ Mat _InputArray::getMat(int i) const
return
Mat
();
return
Mat
();
}
}
UMat
_InputArray
::
getUMat
(
int
i
)
const
UMat
_InputArray
::
getUMat
(
int
i
)
const
{
{
int
k
=
kind
();
int
k
=
kind
();
...
@@ -1226,7 +1225,6 @@ UMat _InputArray::getUMat(int i) const
...
@@ -1226,7 +1225,6 @@ UMat _InputArray::getUMat(int i) const
return
getMat
(
i
).
getUMat
(
accessFlags
);
return
getMat
(
i
).
getUMat
(
accessFlags
);
}
}
void
_InputArray
::
getMatVector
(
std
::
vector
<
Mat
>&
mv
)
const
void
_InputArray
::
getMatVector
(
std
::
vector
<
Mat
>&
mv
)
const
{
{
int
k
=
kind
();
int
k
=
kind
();
...
@@ -1504,7 +1502,6 @@ Size _InputArray::size(int i) const
...
@@ -1504,7 +1502,6 @@ Size _InputArray::size(int i) const
}
}
}
}
int
_InputArray
::
sizend
(
int
*
arrsz
,
int
i
)
const
int
_InputArray
::
sizend
(
int
*
arrsz
,
int
i
)
const
{
{
int
j
,
d
=
0
,
k
=
kind
();
int
j
,
d
=
0
,
k
=
kind
();
...
@@ -1563,7 +1560,6 @@ int _InputArray::sizend(int* arrsz, int i) const
...
@@ -1563,7 +1560,6 @@ int _InputArray::sizend(int* arrsz, int i) const
return
d
;
return
d
;
}
}
bool
_InputArray
::
sameSize
(
const
_InputArray
&
arr
)
const
bool
_InputArray
::
sameSize
(
const
_InputArray
&
arr
)
const
{
{
int
k1
=
kind
(),
k2
=
arr
.
kind
();
int
k1
=
kind
(),
k2
=
arr
.
kind
();
...
@@ -2305,7 +2301,66 @@ void _OutputArray::create(int d, const int* sizes, int mtype, int i,
...
@@ -2305,7 +2301,66 @@ void _OutputArray::create(int d, const int* sizes, int mtype, int i,
if
(
CV_MAT_CN
(
mtype
)
==
m
.
channels
()
&&
((
1
<<
CV_MAT_TYPE
(
flags
))
&
fixedDepthMask
)
!=
0
)
if
(
CV_MAT_CN
(
mtype
)
==
m
.
channels
()
&&
((
1
<<
CV_MAT_TYPE
(
flags
))
&
fixedDepthMask
)
!=
0
)
mtype
=
m
.
type
();
mtype
=
m
.
type
();
else
else
CV_Assert
(
!
fixedType
()
||
(
CV_MAT_CN
(
mtype
)
==
m
.
channels
()
&&
((
1
<<
CV_MAT_TYPE
(
flags
))
&
fixedDepthMask
)
!=
0
));
CV_Assert
(
CV_MAT_TYPE
(
mtype
)
==
m
.
type
());
}
if
(
fixedSize
())
{
CV_Assert
(
m
.
dims
==
d
);
for
(
int
j
=
0
;
j
<
d
;
++
j
)
CV_Assert
(
m
.
size
[
j
]
==
sizes
[
j
]);
}
m
.
create
(
d
,
sizes
,
mtype
);
return
;
}
if
(
k
==
STD_VECTOR_UMAT
)
{
std
::
vector
<
UMat
>&
v
=
*
(
std
::
vector
<
UMat
>*
)
obj
;
if
(
i
<
0
)
{
CV_Assert
(
d
==
2
&&
(
sizes
[
0
]
==
1
||
sizes
[
1
]
==
1
||
sizes
[
0
]
*
sizes
[
1
]
==
0
)
);
size_t
len
=
sizes
[
0
]
*
sizes
[
1
]
>
0
?
sizes
[
0
]
+
sizes
[
1
]
-
1
:
0
,
len0
=
v
.
size
();
CV_Assert
(
!
fixedSize
()
||
len
==
len0
);
v
.
resize
(
len
);
if
(
fixedType
()
)
{
int
_type
=
CV_MAT_TYPE
(
flags
);
for
(
size_t
j
=
len0
;
j
<
len
;
j
++
)
{
if
(
v
[
j
].
type
()
==
_type
)
continue
;
CV_Assert
(
v
[
j
].
empty
()
);
v
[
j
].
flags
=
(
v
[
j
].
flags
&
~
CV_MAT_TYPE_MASK
)
|
_type
;
}
}
return
;
}
CV_Assert
(
i
<
(
int
)
v
.
size
()
);
UMat
&
m
=
v
[
i
];
if
(
allowTransposed
)
{
if
(
!
m
.
isContinuous
()
)
{
CV_Assert
(
!
fixedType
()
&&
!
fixedSize
());
m
.
release
();
}
if
(
d
==
2
&&
m
.
dims
==
2
&&
m
.
u
&&
m
.
type
()
==
mtype
&&
m
.
rows
==
sizes
[
1
]
&&
m
.
cols
==
sizes
[
0
]
)
return
;
}
if
(
fixedType
())
{
if
(
CV_MAT_CN
(
mtype
)
==
m
.
channels
()
&&
((
1
<<
CV_MAT_TYPE
(
flags
))
&
fixedDepthMask
)
!=
0
)
mtype
=
m
.
type
();
else
CV_Assert
(
CV_MAT_TYPE
(
mtype
)
==
m
.
type
());
}
}
if
(
fixedSize
())
if
(
fixedSize
())
{
{
...
...
modules/core/test/ocl/test_channels.cpp
View file @
ce48b6af
...
@@ -197,7 +197,7 @@ PARAM_TEST_CASE(Split, MatType, Channels, bool)
...
@@ -197,7 +197,7 @@ PARAM_TEST_CASE(Split, MatType, Channels, bool)
}
}
};
};
OCL_TEST_P
(
Split
,
DISABLED_
Accuracy
)
OCL_TEST_P
(
Split
,
Accuracy
)
{
{
for
(
int
j
=
0
;
j
<
test_loop_times
;
j
++
)
for
(
int
j
=
0
;
j
<
test_loop_times
;
j
++
)
{
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment