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
2ec63e4d
Commit
2ec63e4d
authored
Jul 18, 2016
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix android pack build
parent
705e776f
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
80 additions
and
4 deletions
+80
-4
OpenCVCompilerOptions.cmake
cmake/OpenCVCompilerOptions.cmake
+15
-0
fp16.cpp
cmake/checks/fp16.cpp
+33
-0
cvconfig.h.in
cmake/templates/cvconfig.h.in
+3
-0
cvdef.h
modules/core/include/opencv2/core/cvdef.h
+8
-4
convert.cpp
modules/core/src/convert.cpp
+4
-0
thresh.cpp
modules/imgproc/src/thresh.cpp
+17
-0
No files found.
cmake/OpenCVCompilerOptions.cmake
View file @
2ec63e4d
...
...
@@ -369,3 +369,18 @@ if(MSVC)
ocv_warnings_disable
(
CMAKE_CXX_FLAGS /wd4589
)
# Constructor of abstract class 'cv::ORB' ignores initializer for virtual base class 'cv::Algorithm'
endif
()
endif
()
if
(
NOT OPENCV_FP16_DISABLE
)
try_compile
(
__VALID_FP16
"
${
OpenCV_BINARY_DIR
}
"
"
${
OpenCV_SOURCE_DIR
}
/cmake/checks/fp16.cpp"
COMPILE_DEFINITIONS
"-DCHECK_FP16"
OUTPUT_VARIABLE TRY_OUT
)
if
(
NOT __VALID_FP16
)
message
(
STATUS
"FP16: Compiler support is not available"
)
else
()
message
(
STATUS
"FP16: Compiler support is available"
)
set
(
HAVE_FP16 1
)
endif
()
endif
()
cmake/checks/fp16.cpp
0 → 100644
View file @
2ec63e4d
#include <stdio.h>
#if defined __F16C__ || (defined _MSC_VER && _MSC_VER >= 1700)
#include <immintrin.h>
int
test
()
{
const
float
src
[]
=
{
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
};
short
dst
[
8
];
__m128
v_src
=
_mm_load_ps
(
src
);
__m128i
v_dst
=
_mm_cvtps_ph
(
v_src
,
0
);
_mm_storel_epi64
((
__m128i
*
)
dst
,
v_dst
);
return
(
int
)
dst
[
0
];
}
#elif defined __GNUC__ && (defined __arm__ || defined __aarch64__)
#include "arm_neon.h"
int
test
()
{
const
float
src
[]
=
{
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
};
short
dst
[
8
];
float32x4_t
v_src
=
*
(
float32x4_t
*
)
src
;
float16x4_t
v_dst
=
vcvt_f16_f32
(
v_src
);
*
(
float16x4_t
*
)
dst
=
v_dst
;
return
(
int
)
dst
[
0
];
}
#else
#error "FP16 is not supported"
#endif
int
main
()
{
printf
(
"%d
\n
"
,
test
());
return
0
;
}
cmake/templates/cvconfig.h.in
View file @
2ec63e4d
...
...
@@ -203,3 +203,6 @@
/* Lapack */
#cmakedefine HAVE_LAPACK
/* FP16 */
#cmakedefine HAVE_FP16
modules/core/include/opencv2/core/cvdef.h
View file @
2ec63e4d
...
...
@@ -193,7 +193,7 @@ enum CpuFeatures {
# endif
# define CV_POPCNT 1
# endif
# if defined
__F16C__ || (defined _MSC_VER && _MSC_VER >= 1700
)
# if defined
HAVE_FP16 && (defined __F16C__ || (defined _MSC_VER && _MSC_VER >= 1700)
)
# include <immintrin.h>
# define CV_FP16 1
# endif
...
...
@@ -219,7 +219,7 @@ enum CpuFeatures {
#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)
# include <Intrin.h>
# include
"arm_neon.h"
# include
<arm_neon.h>
# define CV_NEON 1
# define CPU_HAS_NEON_FEATURE (true)
#elif defined(__ARM_NEON__) || (defined (__ARM_NEON) && defined(__aarch64__))
...
...
@@ -227,8 +227,12 @@ enum CpuFeatures {
# define CV_NEON 1
#endif
#if defined __GNUC__ && ((defined (__arm__) && (__ARM_FP & 0x2)) || defined(__aarch64__))
# define CV_FP16 1
#if defined(__ARM_NEON__) || defined(__aarch64__)
# include <arm_neon.h>
#endif
#if defined HAVE_FP16 && defined __GNUC__
# define CV_FP16 1
#endif
#if defined __GNUC__ && defined __arm__ && (defined __ARM_PCS_VFP || defined __ARM_VFPV3__ || defined __ARM_NEON__) && !defined __SOFTFP__
...
...
modules/core/src/convert.cpp
View file @
2ec63e4d
...
...
@@ -4591,6 +4591,8 @@ cvtScaleHalf_<float, short>( const float* src, size_t sstep, short* dst, size_t
float16x4_t
v_dst
=
vcvt_f16_f32
(
v_src
);
*
(
float16x4_t
*
)(
dst
+
x
)
=
v_dst
;
#else
#error "Configuration error"
#endif
}
#endif
...
...
@@ -4643,6 +4645,8 @@ cvtScaleHalf_<short, float>( const short* src, size_t sstep, float* dst, size_t
float32x4_t
v_dst
=
vcvt_f32_f16
(
v_src
);
*
(
float32x4_t
*
)(
dst
+
x
)
=
v_dst
;
#else
#error "Configuration error"
#endif
}
#endif
...
...
modules/imgproc/src/thresh.cpp
View file @
2ec63e4d
...
...
@@ -43,6 +43,23 @@
#include "precomp.hpp"
#include "opencl_kernels_imgproc.hpp"
#if CV_NEON && defined(__aarch64__)
#include <arm_neon.h>
namespace
cv
{
// Workaround with missing definitions of vreinterpretq_u64_f64/vreinterpretq_f64_u64
template
<
typename
T
>
static
inline
uint64x2_t
vreinterpretq_u64_f64
(
T
a
)
{
return
(
uint64x2_t
)
a
;
}
template
<
typename
T
>
static
inline
float64x2_t
vreinterpretq_f64_u64
(
T
a
)
{
return
(
float64x2_t
)
a
;
}
}
// namespace cv
#endif
namespace
cv
{
...
...
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