mirror of
https://github.com/opencv/opencv.git
synced 2024-12-18 19:38:02 +08:00
Merge pull request #7467 from tomoaki0705:featureCheckSimdUniversal
This commit is contained in:
commit
bebd49d91b
@ -132,7 +132,7 @@ static void calcPixelCostBT( const Mat& img1, const Mat& img2, int y,
|
|||||||
const PixType *row1 = img1.ptr<PixType>(y), *row2 = img2.ptr<PixType>(y);
|
const PixType *row1 = img1.ptr<PixType>(y), *row2 = img2.ptr<PixType>(y);
|
||||||
PixType *prow1 = buffer + width2*2, *prow2 = prow1 + width*cn*2;
|
PixType *prow1 = buffer + width2*2, *prow2 = prow1 + width*cn*2;
|
||||||
#if CV_SIMD128
|
#if CV_SIMD128
|
||||||
bool useSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON);
|
bool useSIMD = hasSIMD128();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tab += tabOfs;
|
tab += tabOfs;
|
||||||
@ -292,7 +292,7 @@ static void computeDisparitySGBM( const Mat& img1, const Mat& img2,
|
|||||||
};
|
};
|
||||||
static const v_uint16x8 v_LSB = v_uint16x8(0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80);
|
static const v_uint16x8 v_LSB = v_uint16x8(0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80);
|
||||||
|
|
||||||
bool useSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON);
|
bool useSIMD = hasSIMD128();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const int ALIGN = 16;
|
const int ALIGN = 16;
|
||||||
@ -891,7 +891,7 @@ buffers(_buffers), img1(&_img1), img2(&_img2), dst_disp(_dst_disp), clipTab(_cli
|
|||||||
ftzero = std::max(params.preFilterCap, 15) | 1;
|
ftzero = std::max(params.preFilterCap, 15) | 1;
|
||||||
|
|
||||||
#if CV_SIMD128
|
#if CV_SIMD128
|
||||||
useSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON);
|
useSIMD = hasSIMD128();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1054,7 +1054,7 @@ inline void accumulateCostsLeftTop(CostType* leftBuf, CostType* leftBuf_prev, Co
|
|||||||
CostType& leftMinCost, CostType& topMinCost, int D, int P1, int P2)
|
CostType& leftMinCost, CostType& topMinCost, int D, int P1, int P2)
|
||||||
{
|
{
|
||||||
#if CV_SIMD128
|
#if CV_SIMD128
|
||||||
if(checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON))
|
if(hasSIMD128())
|
||||||
{
|
{
|
||||||
v_int16x8 P1_reg = v_setall_s16(cv::saturate_cast<CostType>(P1));
|
v_int16x8 P1_reg = v_setall_s16(cv::saturate_cast<CostType>(P1));
|
||||||
|
|
||||||
@ -1166,7 +1166,7 @@ inline void accumulateCostsRight(CostType* rightBuf, CostType* topBuf, CostType*
|
|||||||
CostType& rightMinCost, int D, int P1, int P2, int& optimal_disp, CostType& min_cost)
|
CostType& rightMinCost, int D, int P1, int P2, int& optimal_disp, CostType& min_cost)
|
||||||
{
|
{
|
||||||
#if CV_SIMD128
|
#if CV_SIMD128
|
||||||
if(checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON))
|
if(hasSIMD128())
|
||||||
{
|
{
|
||||||
v_int16x8 P1_reg = v_setall_s16(cv::saturate_cast<CostType>(P1));
|
v_int16x8 P1_reg = v_setall_s16(cv::saturate_cast<CostType>(P1));
|
||||||
|
|
||||||
|
@ -1772,6 +1772,17 @@ inline v_float32x4 v_matmul(const v_float32x4& v, const v_float32x4& m0,
|
|||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
//! @name Check SIMD support
|
||||||
|
//! @{
|
||||||
|
//! @brief Check CPU capability of SIMD operation
|
||||||
|
static inline bool hasSIMD128()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#define OPENCV_HAL_INTRIN_NEON_HPP
|
#define OPENCV_HAL_INTRIN_NEON_HPP
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include "opencv2/core/utility.hpp"
|
||||||
|
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
@ -1216,6 +1217,16 @@ inline v_float16x4 v_cvt_f16(const v_float32x4& a)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//! @name Check SIMD support
|
||||||
|
//! @{
|
||||||
|
//! @brief Check CPU capability of SIMD operation
|
||||||
|
static inline bool hasSIMD128()
|
||||||
|
{
|
||||||
|
return checkHardwareSupport(CV_CPU_NEON);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
//! @endcond
|
//! @endcond
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#define OPENCV_HAL_SSE_HPP
|
#define OPENCV_HAL_SSE_HPP
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include "opencv2/core/utility.hpp"
|
||||||
|
|
||||||
#define CV_SIMD128 1
|
#define CV_SIMD128 1
|
||||||
#define CV_SIMD128_64F 1
|
#define CV_SIMD128_64F 1
|
||||||
@ -1726,6 +1727,16 @@ inline v_float16x4 v_cvt_f16(const v_float32x4& a)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//! @name Check SIMD support
|
||||||
|
//! @{
|
||||||
|
//! @brief Check CPU capability of SIMD operation
|
||||||
|
static inline bool hasSIMD128()
|
||||||
|
{
|
||||||
|
return checkHardwareSupport(CV_CPU_SSE2);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
//! @endcond
|
//! @endcond
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1197,7 +1197,7 @@ template <>
|
|||||||
struct Div_SIMD<uchar>
|
struct Div_SIMD<uchar>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Div_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const uchar * src1, const uchar * src2, uchar * dst, int width, double scale) const
|
int operator() (const uchar * src1, const uchar * src2, uchar * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1243,7 +1243,7 @@ template <>
|
|||||||
struct Div_SIMD<schar>
|
struct Div_SIMD<schar>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Div_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const schar * src1, const schar * src2, schar * dst, int width, double scale) const
|
int operator() (const schar * src1, const schar * src2, schar * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1289,7 +1289,7 @@ template <>
|
|||||||
struct Div_SIMD<ushort>
|
struct Div_SIMD<ushort>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Div_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const ushort * src1, const ushort * src2, ushort * dst, int width, double scale) const
|
int operator() (const ushort * src1, const ushort * src2, ushort * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1334,7 +1334,7 @@ template <>
|
|||||||
struct Div_SIMD<short>
|
struct Div_SIMD<short>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Div_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const short * src1, const short * src2, short * dst, int width, double scale) const
|
int operator() (const short * src1, const short * src2, short * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1379,7 +1379,7 @@ template <>
|
|||||||
struct Div_SIMD<int>
|
struct Div_SIMD<int>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Div_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const int * src1, const int * src2, int * dst, int width, double scale) const
|
int operator() (const int * src1, const int * src2, int * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1423,7 +1423,7 @@ template <>
|
|||||||
struct Div_SIMD<float>
|
struct Div_SIMD<float>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Div_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const float * src1, const float * src2, float * dst, int width, double scale) const
|
int operator() (const float * src1, const float * src2, float * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1463,7 +1463,7 @@ template <>
|
|||||||
struct Recip_SIMD<uchar>
|
struct Recip_SIMD<uchar>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Recip_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const uchar * src2, uchar * dst, int width, double scale) const
|
int operator() (const uchar * src2, uchar * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1504,7 +1504,7 @@ template <>
|
|||||||
struct Recip_SIMD<schar>
|
struct Recip_SIMD<schar>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Recip_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const schar * src2, schar * dst, int width, double scale) const
|
int operator() (const schar * src2, schar * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1545,7 +1545,7 @@ template <>
|
|||||||
struct Recip_SIMD<ushort>
|
struct Recip_SIMD<ushort>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Recip_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const ushort * src2, ushort * dst, int width, double scale) const
|
int operator() (const ushort * src2, ushort * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1585,7 +1585,7 @@ template <>
|
|||||||
struct Recip_SIMD<short>
|
struct Recip_SIMD<short>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Recip_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const short * src2, short * dst, int width, double scale) const
|
int operator() (const short * src2, short * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1625,7 +1625,7 @@ template <>
|
|||||||
struct Recip_SIMD<int>
|
struct Recip_SIMD<int>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Recip_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const int * src2, int * dst, int width, double scale) const
|
int operator() (const int * src2, int * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1665,7 +1665,7 @@ template <>
|
|||||||
struct Recip_SIMD<float>
|
struct Recip_SIMD<float>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Recip_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const float * src2, float * dst, int width, double scale) const
|
int operator() (const float * src2, float * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1702,7 +1702,7 @@ template <>
|
|||||||
struct Div_SIMD<double>
|
struct Div_SIMD<double>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Div_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const double * src1, const double * src2, double * dst, int width, double scale) const
|
int operator() (const double * src1, const double * src2, double * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
@ -1739,7 +1739,7 @@ template <>
|
|||||||
struct Recip_SIMD<double>
|
struct Recip_SIMD<double>
|
||||||
{
|
{
|
||||||
bool haveSIMD;
|
bool haveSIMD;
|
||||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON); }
|
Recip_SIMD() { haveSIMD = hasSIMD128(); }
|
||||||
|
|
||||||
int operator() (const double * src2, double * dst, int width, double scale) const
|
int operator() (const double * src2, double * dst, int width, double scale) const
|
||||||
{
|
{
|
||||||
|
@ -301,7 +301,7 @@ public:
|
|||||||
void operator()(const Range &boundaries) const
|
void operator()(const Range &boundaries) const
|
||||||
{
|
{
|
||||||
#if CV_SIMD128
|
#if CV_SIMD128
|
||||||
bool haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON);
|
bool haveSIMD = hasSIMD128();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const int type = src.type(), cn = CV_MAT_CN(type);
|
const int type = src.type(), cn = CV_MAT_CN(type);
|
||||||
@ -709,7 +709,7 @@ public:
|
|||||||
uchar* pdst = dst.ptr() + (ptrdiff_t)(dst.step * boundaries.start);
|
uchar* pdst = dst.ptr() + (ptrdiff_t)(dst.step * boundaries.start);
|
||||||
|
|
||||||
#if CV_SIMD128
|
#if CV_SIMD128
|
||||||
bool haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON);
|
bool haveSIMD = hasSIMD128();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int i = boundaries.start; i < boundaries.end; i++, pmap += mapstep, pdst += dst.step)
|
for (int i = boundaries.start; i < boundaries.end; i++, pmap += mapstep, pdst += dst.step)
|
||||||
@ -962,7 +962,7 @@ static void CannyImpl(Mat& dx, Mat& dy, Mat& dst,
|
|||||||
#define CANNY_POP(d) (d) = *--stack_top
|
#define CANNY_POP(d) (d) = *--stack_top
|
||||||
|
|
||||||
#if CV_SIMD128
|
#if CV_SIMD128
|
||||||
bool haveSIMD = checkHardwareSupport(CV_CPU_SSE2) || checkHardwareSupport(CV_CPU_NEON);
|
bool haveSIMD = hasSIMD128();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// calculate magnitude and angle of gradient, perform non-maxima suppression.
|
// calculate magnitude and angle of gradient, perform non-maxima suppression.
|
||||||
|
@ -130,6 +130,8 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
|
|||||||
int i_start = 0;
|
int i_start = 0;
|
||||||
int j_start = 0;
|
int j_start = 0;
|
||||||
#if CV_SIMD128 && CV_SSE2
|
#if CV_SIMD128 && CV_SSE2
|
||||||
|
if(hasSIMD128())
|
||||||
|
{
|
||||||
uchar *m_src;
|
uchar *m_src;
|
||||||
short *n_dx, *n_dy;
|
short *n_dx, *n_dy;
|
||||||
|
|
||||||
@ -266,6 +268,7 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
|
|||||||
v_store(&n_dy[j+8], v_sdy2);
|
v_store(&n_dy[j+8], v_sdy2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
i_start = i;
|
i_start = i;
|
||||||
j_start = j;
|
j_start = j;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user