Private implementation helpers#

Detailed Description#

Function Documentation#

OPENCV_HAL_IMPL_MATH_FUNC()#

cv::OPENCV_HAL_IMPL_MATH_FUNC(
v_abs ,
(typename V_TypeTraits< _Tp >::abs_type) std::abs ,
typename V_TypeTraits< _Tp >::abs_type )

#include <opencv2/core/hal/intrin_cpp.hpp>

Sine \( sin(x) \) of elements.

Only for floating point types. Core implementation the same as v_sincos.

Cosine \( cos(x) \) of elements

Only for floating point types. Core implementation the same as v_sincos.

Absolute value of elements

Only for floating point types.

Helper macro

Helper macro

Choose min values for each pair

Scheme:

{A1 A2 ...}
{B1 B2 ...}
--------------
{min(A1,B1) min(A2,B2) ...}

For all types except 64-bit integer.

Choose max values for each pair

Scheme:

{A1 A2 ...}
{B1 B2 ...}
--------------
{max(A1,B1) max(A2,B2) ...}

For all types except 64-bit integer.

Find one min value

Scheme:

{A1 A2 A3 ...} => min(A1,A2,A3,...)

For all types except 64-bit integer and 64-bit floating point types.

Find one max value

Scheme:

{A1 A2 A3 ...} => max(A1,A2,A3,...)

For all types except 64-bit integer and 64-bit floating point types.

Macro Definition Documentation#

OPENCV_HAL_IMPL_ARITHM_OP#

#define OPENCV_HAL_IMPL_ARITHM_OP(func, bin_op, cast_op, _Tp2)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<typename _Tp, int n> \
inline v_reg<_Tp2, n> func(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \
{ \
    typedef _Tp2 rtype; \
    v_reg<rtype, n> c; \
    for( int i = 0; i < n; i++ ) \
        c.s[i] = cast_op(a.s[i] bin_op b.s[i]); \
    return c; \
}

Helper macro.

OPENCV_HAL_IMPL_C_INIT_VAL#

#define OPENCV_HAL_IMPL_C_INIT_VAL(_Tpvec, _Tp, prefix, suffix)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

inline _Tpvec prefix##_setall_##suffix(_Tp val) { return _Tpvec::all(val); } \
template <> inline _Tpvec v_setall_(_Tp val) { return _Tpvec::all(val); }

Helper macro.

OPENCV_HAL_IMPL_C_INIT_ZERO#

#define OPENCV_HAL_IMPL_C_INIT_ZERO(_Tpvec, prefix, suffix)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

inline _Tpvec prefix##_setzero_##suffix() { return _Tpvec::zero(); } \
template <> inline _Tpvec v_setzero_() { return _Tpvec::zero(); }

Helper macro.

OPENCV_HAL_IMPL_C_PACK#

#define OPENCV_HAL_IMPL_C_PACK(_Tp, _Tpn, pack_suffix, cast)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<int n> inline v_reg<_Tpn, 2*n> v_##pack_suffix(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \
{ \
    v_reg<_Tpn, 2*n> c; \
    for( int i = 0; i < n; i++ ) \
    { \
        c.s[i] = cast<_Tpn>(a.s[i]); \
        c.s[i+n] = cast<_Tpn>(b.s[i]); \
    } \
    return c; \
}

Helper macro.

OPENCV_HAL_IMPL_C_PACK_STORE#

#define OPENCV_HAL_IMPL_C_PACK_STORE(_Tp, _Tpn, pack_suffix, cast)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<int n> inline void v_##pack_suffix##_store(_Tpn* ptr, const v_reg<_Tp, n>& a) \
{ \
    for( int i = 0; i < n; i++ ) \
        ptr[i] = cast<_Tpn>(a.s[i]); \
}

Helper macro.

OPENCV_HAL_IMPL_C_REINTERPRET#

#define OPENCV_HAL_IMPL_C_REINTERPRET(_Tp, suffix)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<typename _Tp0, int n0> inline v_reg<_Tp, n0*sizeof(_Tp0)/sizeof(_Tp)> \
    v_reinterpret_as_##suffix(const v_reg<_Tp0, n0>& a) \
{ return a.template reinterpret_as<_Tp, n0*sizeof(_Tp0)/sizeof(_Tp)>(); }

Helper macro.

OPENCV_HAL_IMPL_C_RSHIFTR#

#define OPENCV_HAL_IMPL_C_RSHIFTR(_Tp)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<int shift, int n> inline v_reg<_Tp, n> v_rshr(const v_reg<_Tp, n>& a) \
{ \
    v_reg<_Tp, n> c; \
    for( int i = 0; i < n; i++ ) \
        c.s[i] = (_Tp)((a.s[i] + ((_Tp)1 << (shift - 1))) >> shift); \
    return c; \
}

Helper macro.

OPENCV_HAL_IMPL_C_RSHR_PACK#

#define OPENCV_HAL_IMPL_C_RSHR_PACK(_Tp, _Tpn, pack_suffix, cast)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<int shift, int n> inline v_reg<_Tpn, 2*n> v_rshr_##pack_suffix(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \
{ \
    v_reg<_Tpn, 2*n> c; \
    for( int i = 0; i < n; i++ ) \
    { \
        c.s[i] = cast<_Tpn>((a.s[i] + ((_Tp)1 << (shift - 1))) >> shift); \
        c.s[i+n] = cast<_Tpn>((b.s[i] + ((_Tp)1 << (shift - 1))) >> shift); \
    } \
    return c; \
}

Helper macro.

OPENCV_HAL_IMPL_C_RSHR_PACK_STORE#

#define OPENCV_HAL_IMPL_C_RSHR_PACK_STORE(_Tp, _Tpn, pack_suffix, cast)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<int shift, int n> inline void v_rshr_##pack_suffix##_store(_Tpn* ptr, const v_reg<_Tp, n>& a) \
{ \
    for( int i = 0; i < n; i++ ) \
        ptr[i] = cast<_Tpn>((a.s[i] + ((_Tp)1 << (shift - 1))) >> shift); \
}

Helper macro.

OPENCV_HAL_IMPL_C_SHIFTL#

#define OPENCV_HAL_IMPL_C_SHIFTL(_Tp)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<int shift, int n> inline v_reg<_Tp, n> v_shl(const v_reg<_Tp, n>& a) \
{ return v_shl(a, shift); }

Helper macro.

OPENCV_HAL_IMPL_C_SHIFTR#

#define OPENCV_HAL_IMPL_C_SHIFTR(_Tp)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<int shift, int n> inline v_reg<_Tp, n> v_shr(const v_reg<_Tp, n>& a) \
{ return v_shr(a, shift); }

Helper macro.

OPENCV_HAL_IMPL_CMP_OP#

#define OPENCV_HAL_IMPL_CMP_OP(cmp_op, func)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<typename _Tp, int n> \
inline v_reg<_Tp, n> func(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b) \
{ \
    typedef typename V_TypeTraits<_Tp>::int_type itype; \
    v_reg<_Tp, n> c; \
    for( int i = 0; i < n; i++ ) \
        c.s[i] = V_TypeTraits<_Tp>::reinterpret_from_int((itype)-(int)(a.s[i] cmp_op b.s[i])); \
    return c; \
}

Helper macro.

OPENCV_HAL_IMPL_MATH_FUNC#

#define OPENCV_HAL_IMPL_MATH_FUNC(func, cfunc, _Tp2)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<typename _Tp, int n> inline v_reg<_Tp2, n> func(const v_reg<_Tp, n>& a) \
{ \
    v_reg<_Tp2, n> c; \
    for( int i = 0; i < n; i++ ) \
        c.s[i] = cfunc(a.s[i]); \
    return c; \
}

Helper macro.

OPENCV_HAL_IMPL_ROTATE_SHIFT_OP#

#define OPENCV_HAL_IMPL_ROTATE_SHIFT_OP(suffix, opA, opB)

#include <opencv2/core/hal/intrin_cpp.hpp>

Bitwise shift left.

For 16-, 32- and 64-bit integer values.

Bitwise shift right

For 16-, 32- and 64-bit integer values.

Helper macro

OPENCV_HAL_IMPL_SHIFT_OP#

#define OPENCV_HAL_IMPL_SHIFT_OP(shift_op, func)

#include <opencv2/core/hal/intrin_cpp.hpp>

Value:

template<typename _Tp, int n> inline v_reg<_Tp, n> func(const v_reg<_Tp, n>& a, int imm) \
{ \
    v_reg<_Tp, n> c; \
    for( int i = 0; i < n; i++ ) \
        c.s[i] = (_Tp)(a.s[i] shift_op imm); \
    return c; \
}

Helper macro.