namespace cv::hal

namespace hal {

// structs

struct DCT2D;
struct DFT1D;
struct DFT2D;

// global functions

void
absdiff16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
absdiff16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
absdiff32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
absdiff32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
absdiff64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
absdiff8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
absdiff8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
add16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
add16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
add32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
add32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
add64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
add8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
add8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
addWeighted16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void* scalars
    );

void
addWeighted16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void* scalars
    );

void
addWeighted32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void* scalars
    );

void
addWeighted32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void* scalars
    );

void
addWeighted64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void* scalars
    );

void
addWeighted8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void* scalars
    );

void
addWeighted8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* _scalars
    );

void
and8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

bool
Cholesky32f(
    float* A,
    size_t astep,
    int m,
    float* b,
    size_t bstep,
    int n
    );

bool
Cholesky64f(
    double* A,
    size_t astep,
    int m,
    double* b,
    size_t bstep,
    int n
    );

void
cmp16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* _cmpop
    );

void
cmp16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* _cmpop
    );

void
cmp32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* _cmpop
    );

void
cmp32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* _cmpop
    );

void
cmp64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* _cmpop
    );

void
cmp8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* _cmpop
    );

void
cmp8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* _cmpop
    );

void
cvtBGR5x5toBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int dcn,
    bool swapBlue,
    int greenBits
    );

void
cvtBGR5x5toGray(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int greenBits
    );

void
cvtBGRtoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int scn,
    int dcn,
    bool swapBlue
    );

void
cvtBGRtoBGR5x5(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int scn,
    bool swapBlue,
    int greenBits
    );

void
cvtBGRtoGray(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int scn,
    bool swapBlue
    );

void
cvtBGRtoHSV(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int scn,
    bool swapBlue,
    bool isFullRange,
    bool isHSV
    );

void
cvtBGRtoLab(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int scn,
    bool swapBlue,
    bool isLab,
    bool srgb
    );

void
cvtBGRtoThreePlaneYUV(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int scn,
    bool swapBlue,
    int uIdx
    );

void
cvtBGRtoXYZ(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int scn,
    bool swapBlue
    );

void
cvtBGRtoYUV(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int scn,
    bool swapBlue,
    bool isCbCr
    );

void
cvtGraytoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int dcn
    );

void
cvtGraytoBGR5x5(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int greenBits
    );

void
cvtHSVtoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int dcn,
    bool swapBlue,
    bool isFullRange,
    bool isHSV
    );

void
cvtLabtoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int dcn,
    bool swapBlue,
    bool isLab,
    bool srgb
    );

void
cvtMultipliedRGBAtoRGBA(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height
    );

void
cvtOnePlaneYUVtoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int dcn,
    bool swapBlue,
    int uIdx,
    int ycn
    );

void
cvtRGBAtoMultipliedRGBA(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height
    );

void
cvtThreePlaneYUVtoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int dst_width,
    int dst_height,
    int dcn,
    bool swapBlue,
    int uIdx
    );

void
cvtTwoPlaneYUVtoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int dst_width,
    int dst_height,
    int dcn,
    bool swapBlue,
    int uIdx
    );

void
cvtXYZtoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int dcn,
    bool swapBlue
    );

void
cvtYUVtoBGR(
    const uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int depth,
    int dcn,
    bool swapBlue,
    bool isCbCr
    );

void
div16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
div16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
div32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
div32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
div64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
div8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
div8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
exp32f(
    const float* src,
    float* dst,
    int n
    );

void
exp64f(
    const double* src,
    double* dst,
    int n
    );

void
fastAtan32f(
    const float* y,
    const float* x,
    float* dst,
    int n,
    bool angleInDegrees
    );

void
fastAtan64f(
    const double* y,
    const double* x,
    double* dst,
    int n,
    bool angleInDegrees
    );

void
filter2D(
    int stype,
    int dtype,
    int kernel_type,
    uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int full_width,
    int full_height,
    int offset_x,
    int offset_y,
    uchar* kernel_data,
    size_t kernel_step,
    int kernel_width,
    int kernel_height,
    int anchor_x,
    int anchor_y,
    double delta,
    int borderType,
    bool isSubmatrix
    );

void
gemm32f(
    const float* src1,
    size_t src1_step,
    const float* src2,
    size_t src2_step,
    float alpha,
    const float* src3,
    size_t src3_step,
    float beta,
    float* dst,
    size_t dst_step,
    int m_a,
    int n_a,
    int n_d,
    int flags
    );

void
gemm32fc(
    const float* src1,
    size_t src1_step,
    const float* src2,
    size_t src2_step,
    float alpha,
    const float* src3,
    size_t src3_step,
    float beta,
    float* dst,
    size_t dst_step,
    int m_a,
    int n_a,
    int n_d,
    int flags
    );

void
gemm64f(
    const double* src1,
    size_t src1_step,
    const double* src2,
    size_t src2_step,
    double alpha,
    const double* src3,
    size_t src3_step,
    double beta,
    double* dst,
    size_t dst_step,
    int m_a,
    int n_a,
    int n_d,
    int flags
    );

void
gemm64fc(
    const double* src1,
    size_t src1_step,
    const double* src2,
    size_t src2_step,
    double alpha,
    const double* src3,
    size_t src3_step,
    double beta,
    double* dst,
    size_t dst_step,
    int m_a,
    int n_a,
    int n_d,
    int flags
    );

void
integral(
    int depth,
    int sdepth,
    int sqdepth,
    const uchar* src,
    size_t srcstep,
    uchar* sum,
    size_t sumstep,
    uchar* sqsum,
    size_t sqsumstep,
    uchar* tilted,
    size_t tstep,
    int width,
    int height,
    int cn
    );

void
invSqrt32f(
    const float* src,
    float* dst,
    int len
    );

void
invSqrt64f(
    const double* src,
    double* dst,
    int len
    );

void
log32f(
    const float* src,
    float* dst,
    int n
    );

void
log64f(
    const double* src,
    double* dst,
    int n
    );

int
LU32f(
    float* A,
    size_t astep,
    int m,
    float* b,
    size_t bstep,
    int n
    );

int
LU64f(
    double* A,
    size_t astep,
    int m,
    double* b,
    size_t bstep,
    int n
    );

void
magnitude32f(
    const float* x,
    const float* y,
    float* dst,
    int n
    );

void
magnitude64f(
    const double* x,
    const double* y,
    double* dst,
    int n
    );

void
max16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
max16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
max32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
max32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
max64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
max8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
max8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
merge16u(
    const ushort** src,
    ushort* dst,
    int len,
    int cn
    );

void
merge32s(
    const int** src,
    int* dst,
    int len,
    int cn
    );

void
merge64s(
    const int64** src,
    int64* dst,
    int len,
    int cn
    );

void
merge8u(
    const uchar** src,
    uchar* dst,
    int len,
    int cn
    );

void
min16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
min16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
min32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
min32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
min64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
min8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
min8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
morph(
    int op,
    int src_type,
    int dst_type,
    uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int roi_width,
    int roi_height,
    int roi_x,
    int roi_y,
    int roi_width2,
    int roi_height2,
    int roi_x2,
    int roi_y2,
    int kernel_type,
    uchar* kernel_data,
    size_t kernel_step,
    int kernel_width,
    int kernel_height,
    int anchor_x,
    int anchor_y,
    int borderType,
    const double borderValue [4],
    int iterations,
    bool isSubmatrix
    );

void
mul16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
mul16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
mul32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
mul32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
mul64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
mul8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
mul8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

int
normHamming(
    const uchar* a,
    int n
    );

int
normHamming(
    const uchar* a,
    const uchar* b,
    int n
    );

int
normHamming(
    const uchar* a,
    int n,
    int cellSize
    );

int
normHamming(
    const uchar* a,
    const uchar* b,
    int n,
    int cellSize
    );

int
normL1_(
    const uchar* a,
    const uchar* b,
    int n
    );

float
normL1_(
    const float* a,
    const float* b,
    int n
    );

float
normL2Sqr_(
    const float* a,
    const float* b,
    int n
    );

void
not8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
or8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

int
QR32f(
    float* A,
    size_t astep,
    int m,
    int n,
    int k,
    float* b,
    size_t bstep,
    float* hFactors
    );

int
QR64f(
    double* A,
    size_t astep,
    int m,
    int n,
    int k,
    double* b,
    size_t bstep,
    double* hFactors
    );

void
recip16s(
    const short*,
    size_t,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
recip16u(
    const ushort*,
    size_t,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
recip32f(
    const float*,
    size_t,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
recip32s(
    const int*,
    size_t,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
recip64f(
    const double*,
    size_t,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
recip8s(
    const schar*,
    size_t,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
recip8u(
    const uchar*,
    size_t,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void* scale
    );

void
resize(
    int src_type,
    const uchar* src_data,
    size_t src_step,
    int src_width,
    int src_height,
    uchar* dst_data,
    size_t dst_step,
    int dst_width,
    int dst_height,
    double inv_scale_x,
    double inv_scale_y,
    int interpolation
    );

void
sepFilter2D(
    int stype,
    int dtype,
    int ktype,
    uchar* src_data,
    size_t src_step,
    uchar* dst_data,
    size_t dst_step,
    int width,
    int height,
    int full_width,
    int full_height,
    int offset_x,
    int offset_y,
    uchar* kernelx_data,
    int kernelx_len,
    uchar* kernely_data,
    int kernely_len,
    int anchor_x,
    int anchor_y,
    double delta,
    int borderType
    );

void
split16u(
    const ushort* src,
    ushort** dst,
    int len,
    int cn
    );

void
split32s(
    const int* src,
    int** dst,
    int len,
    int cn
    );

void
split64s(
    const int64* src,
    int64** dst,
    int len,
    int cn
    );

void
split8u(
    const uchar* src,
    uchar** dst,
    int len,
    int cn
    );

void
sqrt32f(
    const float* src,
    float* dst,
    int len
    );

void
sqrt64f(
    const double* src,
    double* dst,
    int len
    );

void
sub16s(
    const short* src1,
    size_t step1,
    const short* src2,
    size_t step2,
    short* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
sub16u(
    const ushort* src1,
    size_t step1,
    const ushort* src2,
    size_t step2,
    ushort* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
sub32f(
    const float* src1,
    size_t step1,
    const float* src2,
    size_t step2,
    float* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
sub32s(
    const int* src1,
    size_t step1,
    const int* src2,
    size_t step2,
    int* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
sub64f(
    const double* src1,
    size_t step1,
    const double* src2,
    size_t step2,
    double* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
sub8s(
    const schar* src1,
    size_t step1,
    const schar* src2,
    size_t step2,
    schar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
sub8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

void
SVD32f(
    float* At,
    size_t astep,
    float* W,
    float* U,
    size_t ustep,
    float* Vt,
    size_t vstep,
    int m,
    int n,
    int flags
    );

void
SVD64f(
    double* At,
    size_t astep,
    double* W,
    double* U,
    size_t ustep,
    double* Vt,
    size_t vstep,
    int m,
    int n,
    int flags
    );

void
warpAffine(
    int src_type,
    const uchar* src_data,
    size_t src_step,
    int src_width,
    int src_height,
    uchar* dst_data,
    size_t dst_step,
    int dst_width,
    int dst_height,
    const double M [6],
    int interpolation,
    int borderType,
    const double borderValue [4]
    );

void
warpPerspectve(
    int src_type,
    const uchar* src_data,
    size_t src_step,
    int src_width,
    int src_height,
    uchar* dst_data,
    size_t dst_step,
    int dst_width,
    int dst_height,
    const double M [9],
    int interpolation,
    int borderType,
    const double borderValue [4]
    );

void
xor8u(
    const uchar* src1,
    size_t step1,
    const uchar* src2,
    size_t step2,
    uchar* dst,
    size_t step,
    int width,
    int height,
    void*
    );

} // namespace hal