Path: blob/master/modules/core/src/hal_replacement.hpp
16337 views
/*M///////////////////////////////////////////////////////////////////////////////////////1//2// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.3//4// By downloading, copying, installing or using the software you agree to this license.5// If you do not agree to this license, do not download, install,6// copy or use the software.7//8//9// License Agreement10// For Open Source Computer Vision Library11//12// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.13// Copyright (C) 2009, Willow Garage Inc., all rights reserved.14// Copyright (C) 2013, OpenCV Foundation, all rights reserved.15// Copyright (C) 2015, Itseez Inc., all rights reserved.16// Third party copyrights are property of their respective owners.17//18// Redistribution and use in source and binary forms, with or without modification,19// are permitted provided that the following conditions are met:20//21// * Redistribution's of source code must retain the above copyright notice,22// this list of conditions and the following disclaimer.23//24// * Redistribution's in binary form must reproduce the above copyright notice,25// this list of conditions and the following disclaimer in the documentation26// and/or other materials provided with the distribution.27//28// * The name of the copyright holders may not be used to endorse or promote products29// derived from this software without specific prior written permission.30//31// This software is provided by the copyright holders and contributors "as is" and32// any express or implied warranties, including, but not limited to, the implied33// warranties of merchantability and fitness for a particular purpose are disclaimed.34// In no event shall the Intel Corporation or contributors be liable for any direct,35// indirect, incidental, special, exemplary, or consequential damages36// (including, but not limited to, procurement of substitute goods or services;37// loss of use, data, or profits; or business interruption) however caused38// and on any theory of liability, whether in contract, strict liability,39// or tort (including negligence or otherwise) arising in any way out of40// the use of this software, even if advised of the possibility of such damage.41//42//M*/4344#ifndef OPENCV_CORE_HAL_REPLACEMENT_HPP45#define OPENCV_CORE_HAL_REPLACEMENT_HPP4647#include "opencv2/core/hal/interface.h"4849#if defined __GNUC__50# pragma GCC diagnostic push51# pragma GCC diagnostic ignored "-Wunused-parameter"52#elif defined _MSC_VER53# pragma warning( push )54# pragma warning( disable: 4100 )55#endif5657//! @addtogroup core_hal_interface58//! @note Define your functions to override default implementations:59//! @code60//! #undef hal_add8u61//! #define hal_add8u my_add8u62//! @endcode63//! @{6465/**66Add: _dst[i] = src1[i] + src2[i]_ @n67Sub: _dst[i] = src1[i] - src2[i]_68@param src1_data,src1_step first source image data and step69@param src2_data,src2_step second source image data and step70@param dst_data,dst_step destination image data and step71@param width,height dimensions of the images72*/73//! @addtogroup core_hal_interface_addsub Element-wise add and subtract74//! @{75inline int hal_ni_add8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }76inline int hal_ni_add8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, schar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }77inline int hal_ni_add16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, ushort *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }78inline int hal_ni_add16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, short *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }79inline int hal_ni_add32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, int *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }80inline int hal_ni_add32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, float *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }81inline int hal_ni_add64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, double *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }8283inline int hal_ni_sub8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }84inline int hal_ni_sub8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, schar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }85inline int hal_ni_sub16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, ushort *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }86inline int hal_ni_sub16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, short *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }87inline int hal_ni_sub32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, int *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }88inline int hal_ni_sub32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, float *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }89inline int hal_ni_sub64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, double *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }90//! @}9192/**93Minimum: _dst[i] = min(src1[i], src2[i])_ @n94Maximum: _dst[i] = max(src1[i], src2[i])_95@param src1_data,src1_step first source image data and step96@param src2_data,src2_step second source image data and step97@param dst_data,dst_step destination image data and step98@param width,height dimensions of the images99*/100//! @addtogroup core_hal_interface_minmax Element-wise minimum or maximum101//! @{102inline int hal_ni_max8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }103inline int hal_ni_max8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, schar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }104inline int hal_ni_max16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, ushort *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }105inline int hal_ni_max16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, short *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }106inline int hal_ni_max32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, int *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }107inline int hal_ni_max32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, float *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }108inline int hal_ni_max64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, double *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }109110inline int hal_ni_min8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }111inline int hal_ni_min8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, schar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }112inline int hal_ni_min16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, ushort *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }113inline int hal_ni_min16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, short *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }114inline int hal_ni_min32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, int *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }115inline int hal_ni_min32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, float *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }116inline int hal_ni_min64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, double *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }117//! @}118119/**120Absolute difference: _dst[i] = | src1[i] - src2[i] |_121@param src1_data,src1_step first source image data and step122@param src2_data,src2_step second source image data and step123@param dst_data,dst_step destination image data and step124@param width,height dimensions of the images125@param scale additional multiplier126*/127//! @addtogroup core_hal_interface_absdiff Element-wise absolute difference128//! @{129inline int hal_ni_absdiff8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }130inline int hal_ni_absdiff8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, schar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }131inline int hal_ni_absdiff16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, ushort *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }132inline int hal_ni_absdiff16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, short *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }133inline int hal_ni_absdiff32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, int *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }134inline int hal_ni_absdiff32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, float *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }135inline int hal_ni_absdiff64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, double *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }136//! @}137138/**139Bitwise AND: _dst[i] = src1[i] & src2[i]_ @n140Bitwise OR: _dst[i] = src1[i] | src2[i]_ @n141Bitwise XOR: _dst[i] = src1[i] ^ src2[i]_ @n142Bitwise NOT: _dst[i] = !src[i]_143@param src1_data,src1_step first source image data and step144@param src2_data,src2_step second source image data and step145@param dst_data,dst_step destination image data and step146@param width,height dimensions of the images147*/148//! @addtogroup core_hal_interface_logical Bitwise logical operations149//! @{150inline int hal_ni_and8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }151inline int hal_ni_or8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }152inline int hal_ni_xor8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }153inline int hal_ni_not8u(const uchar *src_data, size_t src_step, uchar *dst_data, size_t dst_step, int width, int height) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }154//! @}155156//! @cond IGNORED157#define cv_hal_add8u hal_ni_add8u158#define cv_hal_add8s hal_ni_add8s159#define cv_hal_add16u hal_ni_add16u160#define cv_hal_add16s hal_ni_add16s161#define cv_hal_add32s hal_ni_add32s162#define cv_hal_add32f hal_ni_add32f163#define cv_hal_add64f hal_ni_add64f164#define cv_hal_sub8u hal_ni_sub8u165#define cv_hal_sub8s hal_ni_sub8s166#define cv_hal_sub16u hal_ni_sub16u167#define cv_hal_sub16s hal_ni_sub16s168#define cv_hal_sub32s hal_ni_sub32s169#define cv_hal_sub32f hal_ni_sub32f170#define cv_hal_sub64f hal_ni_sub64f171#define cv_hal_max8u hal_ni_max8u172#define cv_hal_max8s hal_ni_max8s173#define cv_hal_max16u hal_ni_max16u174#define cv_hal_max16s hal_ni_max16s175#define cv_hal_max32s hal_ni_max32s176#define cv_hal_max32f hal_ni_max32f177#define cv_hal_max64f hal_ni_max64f178#define cv_hal_min8u hal_ni_min8u179#define cv_hal_min8s hal_ni_min8s180#define cv_hal_min16u hal_ni_min16u181#define cv_hal_min16s hal_ni_min16s182#define cv_hal_min32s hal_ni_min32s183#define cv_hal_min32f hal_ni_min32f184#define cv_hal_min64f hal_ni_min64f185#define cv_hal_absdiff8u hal_ni_absdiff8u186#define cv_hal_absdiff8s hal_ni_absdiff8s187#define cv_hal_absdiff16u hal_ni_absdiff16u188#define cv_hal_absdiff16s hal_ni_absdiff16s189#define cv_hal_absdiff32s hal_ni_absdiff32s190#define cv_hal_absdiff32f hal_ni_absdiff32f191#define cv_hal_absdiff64f hal_ni_absdiff64f192#define cv_hal_and8u hal_ni_and8u193#define cv_hal_or8u hal_ni_or8u194#define cv_hal_xor8u hal_ni_xor8u195#define cv_hal_not8u hal_ni_not8u196//! @endcond197198/**199Compare: _dst[i] = src1[i] op src2[i]_200@param src1_data,src1_step first source image data and step201@param src2_data,src2_step second source image data and step202@param dst_data,dst_step destination image data and step203@param width,height dimensions of the images204@param operation one of (CV_HAL_CMP_EQ, CV_HAL_CMP_GT, ...)205*/206//! @addtogroup core_hal_interface_compare Element-wise compare207//! @{208inline int hal_ni_cmp8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, int operation) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }209inline int hal_ni_cmp8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, int operation) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }210inline int hal_ni_cmp16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, int operation) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }211inline int hal_ni_cmp16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, int operation) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }212inline int hal_ni_cmp32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, int operation) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }213inline int hal_ni_cmp32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, int operation) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }214inline int hal_ni_cmp64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, int operation) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }215//! @}216217//! @cond IGNORED218#define cv_hal_cmp8u hal_ni_cmp8u219#define cv_hal_cmp8s hal_ni_cmp8s220#define cv_hal_cmp16u hal_ni_cmp16u221#define cv_hal_cmp16s hal_ni_cmp16s222#define cv_hal_cmp32s hal_ni_cmp32s223#define cv_hal_cmp32f hal_ni_cmp32f224#define cv_hal_cmp64f hal_ni_cmp64f225//! @endcond226227/**228Multiply: _dst[i] = scale * src1[i] * src2[i]_229@param src1_data,src1_step first source image data and step230@param src2_data,src2_step second source image data and step231@param dst_data,dst_step destination image data and step232@param width,height dimensions of the images233@param scale additional multiplier234*/235//! @addtogroup core_hal_interface_multiply Element-wise multiply236//! @{237inline int hal_ni_mul8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }238inline int hal_ni_mul8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, schar *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }239inline int hal_ni_mul16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, ushort *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }240inline int hal_ni_mul16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, short *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }241inline int hal_ni_mul32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, int *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }242inline int hal_ni_mul32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, float *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }243inline int hal_ni_mul64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, double *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }244//! @}245246/**247Divide: _dst[i] = scale * src1[i] / src2[i]_248@param src1_data,src1_step first source image data and step249@param src2_data,src2_step second source image data and step250@param dst_data,dst_step destination image data and step251@param width,height dimensions of the images252@param scale additional multiplier253*/254//! @addtogroup core_hal_interface_divide Element-wise divide255//! @{256inline int hal_ni_div8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }257inline int hal_ni_div8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, schar *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }258inline int hal_ni_div16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, ushort *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }259inline int hal_ni_div16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, short *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }260inline int hal_ni_div32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, int *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }261inline int hal_ni_div32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, float *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }262inline int hal_ni_div64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, double *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }263//! @}264265/**266Computes reciprocial: _dst[i] = scale / src[i]_267@param src_data,src_step source image data and step268@param dst_data,dst_step destination image data and step269@param width,height dimensions of the images270@param scale additional multiplier271*/272//! @addtogroup core_hal_interface_reciprocial Element-wise reciprocial273//! @{274inline int hal_ni_recip8u(const uchar *src_data, size_t src_step, uchar *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }275inline int hal_ni_recip8s(const schar *src_data, size_t src_step, schar *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }276inline int hal_ni_recip16u(const ushort *src_data, size_t src_step, ushort *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }277inline int hal_ni_recip16s(const short *src_data, size_t src_step, short *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }278inline int hal_ni_recip32s(const int *src_data, size_t src_step, int *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }279inline int hal_ni_recip32f(const float *src_data, size_t src_step, float *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }280inline int hal_ni_recip64f(const double *src_data, size_t src_step, double *dst_data, size_t dst_step, int width, int height, double scale) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }281//! @}282283//! @cond IGNORED284#define cv_hal_mul8u hal_ni_mul8u285#define cv_hal_mul8s hal_ni_mul8s286#define cv_hal_mul16u hal_ni_mul16u287#define cv_hal_mul16s hal_ni_mul16s288#define cv_hal_mul32s hal_ni_mul32s289#define cv_hal_mul32f hal_ni_mul32f290#define cv_hal_mul64f hal_ni_mul64f291#define cv_hal_div8u hal_ni_div8u292#define cv_hal_div8s hal_ni_div8s293#define cv_hal_div16u hal_ni_div16u294#define cv_hal_div16s hal_ni_div16s295#define cv_hal_div32s hal_ni_div32s296#define cv_hal_div32f hal_ni_div32f297#define cv_hal_div64f hal_ni_div64f298#define cv_hal_recip8u hal_ni_recip8u299#define cv_hal_recip8s hal_ni_recip8s300#define cv_hal_recip16u hal_ni_recip16u301#define cv_hal_recip16s hal_ni_recip16s302#define cv_hal_recip32s hal_ni_recip32s303#define cv_hal_recip32f hal_ni_recip32f304#define cv_hal_recip64f hal_ni_recip64f305//! @endcond306307/**308Computes weighted sum of two arrays using formula: _dst[i] = a * src1[i] + b * src2[i] + c_309@param src1_data,src1_step first source image data and step310@param src2_data,src2_step second source image data and step311@param dst_data,dst_step destination image data and step312@param width,height dimensions of the images313@param scalars numbers _a_, _b_, and _c_314*/315//! @addtogroup core_hal_interface_addWeighted Element-wise weighted sum316//! @{317inline int hal_ni_addWeighted8u(const uchar *src1_data, size_t src1_step, const uchar *src2_data, size_t src2_step, uchar *dst_data, size_t dst_step, int width, int height, const double scalars[3]) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }318inline int hal_ni_addWeighted8s(const schar *src1_data, size_t src1_step, const schar *src2_data, size_t src2_step, schar *dst_data, size_t dst_step, int width, int height, const double scalars[3]) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }319inline int hal_ni_addWeighted16u(const ushort *src1_data, size_t src1_step, const ushort *src2_data, size_t src2_step, ushort *dst_data, size_t dst_step, int width, int height, const double scalars[3]) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }320inline int hal_ni_addWeighted16s(const short *src1_data, size_t src1_step, const short *src2_data, size_t src2_step, short *dst_data, size_t dst_step, int width, int height, const double scalars[3]) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }321inline int hal_ni_addWeighted32s(const int *src1_data, size_t src1_step, const int *src2_data, size_t src2_step, int *dst_data, size_t dst_step, int width, int height, const double scalars[3]) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }322inline int hal_ni_addWeighted32f(const float *src1_data, size_t src1_step, const float *src2_data, size_t src2_step, float *dst_data, size_t dst_step, int width, int height, const double scalars[3]) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }323inline int hal_ni_addWeighted64f(const double *src1_data, size_t src1_step, const double *src2_data, size_t src2_step, double *dst_data, size_t dst_step, int width, int height, const double scalars[3]) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }324//! @}325326//! @cond IGNORED327#define cv_hal_addWeighted8u hal_ni_addWeighted8u328#define cv_hal_addWeighted8s hal_ni_addWeighted8s329#define cv_hal_addWeighted16u hal_ni_addWeighted16u330#define cv_hal_addWeighted16s hal_ni_addWeighted16s331#define cv_hal_addWeighted32s hal_ni_addWeighted32s332#define cv_hal_addWeighted32f hal_ni_addWeighted32f333#define cv_hal_addWeighted64f hal_ni_addWeighted64f334//! @endcond335336/**337@param src_data array of interleaved values (__len__ x __cn__ items) [ B, G, R, B, G, R, ...]338@param dst_data array of pointers to destination arrays (__cn__ items x __len__ items) [ [B, B, ...], [G, G, ...], [R, R, ...] ]339@param len number of elements340@param cn number of channels341*/342//! @addtogroup core_hal_interface_split Channel split343//! @{344inline int hal_ni_split8u(const uchar *src_data, uchar **dst_data, int len, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }345inline int hal_ni_split16u(const ushort *src_data, ushort **dst_data, int len, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }346inline int hal_ni_split32s(const int *src_data, int **dst_data, int len, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }347inline int hal_ni_split64s(const int64 *src_data, int64 **dst_data, int len, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }348//! @}349350//! @cond IGNORED351#define cv_hal_split8u hal_ni_split8u352#define cv_hal_split16u hal_ni_split16u353#define cv_hal_split32s hal_ni_split32s354#define cv_hal_split64s hal_ni_split64s355//! @endcond356357/**358@param src_data array of pointers to source arrays (__cn__ items x __len__ items) [ [B, B, ...], [G, G, ...], [R, R, ...] ]359@param dst_data destination array of interleaved values (__len__ x __cn__ items) [ B, G, R, B, G, R, ...]360@param len number of elements361@param cn number of channels362*/363//! @addtogroup core_hal_interface_merge Channel merge364//! @{365inline int hal_ni_merge8u(const uchar **src_data, uchar *dst_data, int len, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }366inline int hal_ni_merge16u(const ushort **src_data, ushort *dst_data, int len, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }367inline int hal_ni_merge32s(const int **src_data, int *dst_data, int len, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }368inline int hal_ni_merge64s(const int64 **src_data, int64 *dst_data, int len, int cn) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }369//! @}370371//! @cond IGNORED372#define cv_hal_merge8u hal_ni_merge8u373#define cv_hal_merge16u hal_ni_merge16u374#define cv_hal_merge32s hal_ni_merge32s375#define cv_hal_merge64s hal_ni_merge64s376//! @endcond377378379/**380@param y,x source Y and X arrays381@param dst destination array382@param len length of arrays383@param angleInDegrees if set to true return angles in degrees, otherwise in radians384*/385//! @addtogroup core_hal_interface_fastAtan Atan calculation386//! @{387inline int hal_ni_fastAtan32f(const float* y, const float* x, float* dst, int len, bool angleInDegrees) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }388inline int hal_ni_fastAtan64f(const double* y, const double* x, double* dst, int len, bool angleInDegrees) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }389//! @}390391//! @cond IGNORED392#define cv_hal_fastAtan32f hal_ni_fastAtan32f393#define cv_hal_fastAtan64f hal_ni_fastAtan64f394//! @endcond395396397/**398@param x,y source X and Y arrays399@param dst destination array400@param len length of arrays401*/402//! @addtogroup core_hal_interface_magnitude Magnitude calculation403//! @{404inline int hal_ni_magnitude32f(const float *x, const float *y, float *dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }405inline int hal_ni_magnitude64f(const double *x, const double *y, double *dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }406//! @}407408//! @cond IGNORED409#define cv_hal_magnitude32f hal_ni_magnitude32f410#define cv_hal_magnitude64f hal_ni_magnitude64f411//! @endcond412413414/**415@param src source array416@param dst destination array417@param len length of arrays418*/419//! @addtogroup core_hal_interface_invSqrt Inverse square root calculation420//! @{421inline int hal_ni_invSqrt32f(const float* src, float* dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }422inline int hal_ni_invSqrt64f(const double* src, double* dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }423//! @}424425//! @cond IGNORED426#define cv_hal_invSqrt32f hal_ni_invSqrt32f427#define cv_hal_invSqrt64f hal_ni_invSqrt64f428//! @endcond429430431/**432@param src source array433@param dst destination array434@param len length of arrays435*/436//! @addtogroup core_hal_interface_sqrt Square root calculation437//! @{438inline int hal_ni_sqrt32f(const float* src, float* dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }439inline int hal_ni_sqrt64f(const double* src, double* dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }440//! @}441442//! @cond IGNORED443#define cv_hal_sqrt32f hal_ni_sqrt32f444#define cv_hal_sqrt64f hal_ni_sqrt64f445//! @endcond446447448/**449@param src source array450@param dst destination array451@param len length of arrays452*/453//! @addtogroup core_hal_interface_log Natural logarithm calculation454//! @{455inline int hal_ni_log32f(const float* src, float* dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }456inline int hal_ni_log64f(const double* src, double* dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }457//! @}458459//! @cond IGNORED460#define cv_hal_log32f hal_ni_log32f461#define cv_hal_log64f hal_ni_log64f462//! @endcond463464465/**466@param src source array467@param dst destination array468@param len length of arrays469*/470//! @addtogroup core_hal_interface_exp Exponent calculation471//! @{472inline int hal_ni_exp32f(const float* src, float* dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }473inline int hal_ni_exp64f(const double* src, double* dst, int len) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }474//! @}475476//! @cond IGNORED477#define cv_hal_exp32f hal_ni_exp32f478#define cv_hal_exp64f hal_ni_exp64f479//! @endcond480481482/**483@brief Dummy structure storing DFT/DCT context484485Users can convert this pointer to any type they want. Initialisation and destruction should be made in Init and Free function implementations correspondingly.486Example:487@code{.cpp}488int my_hal_dftInit2D(cvhalDFT **context, ...) {489*context = static_cast<cvhalDFT*>(new MyFilterData());490//... init491}492493int my_hal_dftFree2D(cvhalDFT *context) {494MyFilterData *c = static_cast<MyFilterData*>(context);495delete c;496}497@endcode498*/499struct cvhalDFT {};500501/**502@param context double pointer to context storing all necessary data503@param len transformed array length504@param count estimated transformation count505@param depth array type (CV_32F or CV_64F)506@param flags algorithm options (combination of CV_HAL_DFT_INVERSE, CV_HAL_DFT_SCALE, ...)507@param needBuffer pointer to boolean variable, if valid pointer provided, then variable value should be set to true to signal that additional memory buffer is needed for operations508*/509inline int hal_ni_dftInit1D(cvhalDFT **context, int len, int count, int depth, int flags, bool *needBuffer) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }510/**511@param context pointer to context storing all necessary data512@param src source data513@param dst destination data514*/515inline int hal_ni_dft1D(cvhalDFT *context, const uchar *src, uchar *dst) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }516/**517@param context pointer to context storing all necessary data518*/519inline int hal_ni_dftFree1D(cvhalDFT *context) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }520521//! @cond IGNORED522#define cv_hal_dftInit1D hal_ni_dftInit1D523#define cv_hal_dft1D hal_ni_dft1D524#define cv_hal_dftFree1D hal_ni_dftFree1D525//! @endcond526527/**528@param context double pointer to context storing all necessary data529@param width,height image dimensions530@param depth image type (CV_32F or CV64F)531@param src_channels number of channels in input image532@param dst_channels number of channels in output image533@param flags algorithm options (combination of CV_HAL_DFT_INVERSE, ...)534@param nonzero_rows number of nonzero rows in image, can be used for optimization535*/536inline int hal_ni_dftInit2D(cvhalDFT **context, int width, int height, int depth, int src_channels, int dst_channels, int flags, int nonzero_rows) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }537/**538@param context pointer to context storing all necessary data539@param src_data,src_step source image data and step540@param dst_data,dst_step destination image data and step541*/542inline int hal_ni_dft2D(cvhalDFT *context, const uchar *src_data, size_t src_step, uchar *dst_data, size_t dst_step) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }543/**544@param context pointer to context storing all necessary data545*/546inline int hal_ni_dftFree2D(cvhalDFT *context) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }547548//! @cond IGNORED549#define cv_hal_dftInit2D hal_ni_dftInit2D550#define cv_hal_dft2D hal_ni_dft2D551#define cv_hal_dftFree2D hal_ni_dftFree2D552//! @endcond553554/**555@param context double pointer to context storing all necessary data556@param width,height image dimensions557@param depth image type (CV_32F or CV64F)558@param flags algorithm options (combination of CV_HAL_DFT_INVERSE, ...)559*/560inline int hal_ni_dctInit2D(cvhalDFT **context, int width, int height, int depth, int flags) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }561/**562@param context pointer to context storing all necessary data563@param src_data,src_step source image data and step564@param dst_data,dst_step destination image data and step565*/566inline int hal_ni_dct2D(cvhalDFT *context, const uchar *src_data, size_t src_step, uchar *dst_data, size_t dst_step) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }567/**568@param context pointer to context storing all necessary data569*/570inline int hal_ni_dctFree2D(cvhalDFT *context) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }571572//! @cond IGNORED573#define cv_hal_dctInit2D hal_ni_dctInit2D574#define cv_hal_dct2D hal_ni_dct2D575#define cv_hal_dctFree2D hal_ni_dctFree2D576//! @endcond577578579/**580Performs \f$LU\f$ decomposition of square matrix \f$A=P*L*U\f$ (where \f$P\f$ is permutation matrix) and solves matrix equation \f$A*X=B\f$.581Function returns the \f$sign\f$ of permutation \f$P\f$ via parameter info.582@param src1 pointer to input matrix \f$A\f$ stored in row major order. After finish of work src1 contains at least \f$U\f$ part of \f$LU\f$583decomposition which is appropriate for determainant calculation: \f$det(A)=sign*\prod_{j=1}^{M}a_{jj}\f$.584@param src1_step number of bytes between two consequent rows of matrix \f$A\f$.585@param m size of square matrix \f$A\f$.586@param src2 pointer to \f$M\times N\f$ matrix \f$B\f$ which is the right-hand side of system \f$A*X=B\f$. \f$B\f$ stored in row major order.587If src2 is null pointer only \f$LU\f$ decomposition will be performed. After finish of work src2 contains solution \f$X\f$ of system \f$A*X=B\f$.588@param src2_step number of bytes between two consequent rows of matrix \f$B\f$.589@param n number of right-hand vectors in \f$M\times N\f$ matrix \f$B\f$.590@param info indicates success of decomposition. If *info is equals to zero decomposition failed, othervise *info is equals to \f$sign\f$.591*/592//! @addtogroup core_hal_interface_decomp_lu LU matrix decomposition593//! @{594inline int hal_ni_LU32f(float* src1, size_t src1_step, int m, float* src2, size_t src2_step, int n, int* info) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }595inline int hal_ni_LU64f(double* src1, size_t src1_step, int m, double* src2, size_t src2_step, int n, int* info) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }596//! @}597598/**599Performs Cholesky decomposition of matrix \f$A = L*L^T\f$ and solves matrix equation \f$A*X=B\f$.600@param src1 pointer to input matrix \f$A\f$ stored in row major order. After finish of work src1 contains lower triangular matrix \f$L\f$.601@param src1_step number of bytes between two consequent rows of matrix \f$A\f$.602@param m size of square matrix \f$A\f$.603@param src2 pointer to \f$M\times N\f$ matrix \f$B\f$ which is the right-hand side of system \f$A*X=B\f$. B stored in row major order.604If src2 is null pointer only Cholesky decomposition will be performed. After finish of work src2 contains solution \f$X\f$ of system \f$A*X=B\f$.605@param src2_step number of bytes between two consequent rows of matrix \f$B\f$.606@param n number of right-hand vectors in \f$M\times N\f$ matrix \f$B\f$.607@param info indicates success of decomposition. If *info is false decomposition failed.608*/609610//! @addtogroup core_hal_interface_decomp_cholesky Cholesky matrix decomposition611//! @{612inline int hal_ni_Cholesky32f(float* src1, size_t src1_step, int m, float* src2, size_t src2_step, int n, bool* info) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }613inline int hal_ni_Cholesky64f(double* src1, size_t src1_step, int m, double* src2, size_t src2_step, int n, bool* info) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }614//! @}615616/**617Performs singular value decomposition of \f$M\times N\f$(\f$M>N\f$) matrix \f$A = U*\Sigma*V^T\f$.618@param src pointer to input \f$M\times N\f$ matrix \f$A\f$ stored in column major order.619After finish of work src will be filled with rows of \f$U\f$ or not modified (depends of flag CV_HAL_SVD_MODIFY_A).620@param src_step number of bytes between two consequent columns of matrix \f$A\f$.621@param w pointer to array for singular values of matrix \f$A\f$ (i. e. first \f$N\f$ diagonal elements of matrix \f$\Sigma\f$).622@param u pointer to output \f$M\times N\f$ or \f$M\times M\f$ matrix \f$U\f$ (size depends of flags). Pointer must be valid if flag CV_HAL_SVD_MODIFY_A not used.623@param u_step number of bytes between two consequent rows of matrix \f$U\f$.624@param vt pointer to array for \f$N\times N\f$ matrix \f$V^T\f$.625@param vt_step number of bytes between two consequent rows of matrix \f$V^T\f$.626@param m number fo rows in matrix \f$A\f$.627@param n number of columns in matrix \f$A\f$.628@param flags algorithm options (combination of CV_HAL_SVD_FULL_UV, ...).629*/630//! @addtogroup core_hal_interface_decomp_svd Singular value matrix decomposition631//! @{632inline int hal_ni_SVD32f(float* src, size_t src_step, float* w, float* u, size_t u_step, float* vt, size_t vt_step, int m, int n, int flags) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }633inline int hal_ni_SVD64f(double* src, size_t src_step, double* w, double* u, size_t u_step, double* vt, size_t vt_step, int m, int n, int flags) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }634//! @}635636/**637Performs QR decomposition of \f$M\times N\f$(\f$M>N\f$) matrix \f$A = Q*R\f$ and solves matrix equation \f$A*X=B\f$.638@param src1 pointer to input matrix \f$A\f$ stored in row major order. After finish of work src1 contains upper triangular \f$N\times N\f$ matrix \f$R\f$.639Lower triangle of src1 will be filled with vectors of elementary reflectors. See @cite VandLec and Lapack's DGEQRF documentation for details.640@param src1_step number of bytes between two consequent rows of matrix \f$A\f$.641@param m number fo rows in matrix \f$A\f$.642@param n number of columns in matrix \f$A\f$.643@param k number of right-hand vectors in \f$M\times K\f$ matrix \f$B\f$.644@param src2 pointer to \f$M\times K\f$ matrix \f$B\f$ which is the right-hand side of system \f$A*X=B\f$. \f$B\f$ stored in row major order.645If src2 is null pointer only QR decomposition will be performed. Otherwise system will be solved and src1 will be used as temporary buffer, so646after finish of work src2 contains solution \f$X\f$ of system \f$A*X=B\f$.647@param src2_step number of bytes between two consequent rows of matrix \f$B\f$.648@param dst pointer to continiuos \f$N\times 1\f$ array for scalar factors of elementary reflectors. See @cite VandLec for details.649@param info indicates success of decomposition. If *info is zero decomposition failed.650*/651//! @addtogroup core_hal_interface_decomp_qr QR matrix decomposition652//! @{653inline int hal_ni_QR32f(float* src1, size_t src1_step, int m, int n, int k, float* src2, size_t src2_step, float* dst, int* info) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }654inline int hal_ni_QR64f(double* src1, size_t src1_step, int m, int n, int k, double* src2, size_t src2_step, double* dst, int* info) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }655//! @}656657658659//! @cond IGNORED660#define cv_hal_LU32f hal_ni_LU32f661#define cv_hal_LU64f hal_ni_LU64f662#define cv_hal_Cholesky32f hal_ni_Cholesky32f663#define cv_hal_Cholesky64f hal_ni_Cholesky64f664#define cv_hal_SVD32f hal_ni_SVD32f665#define cv_hal_SVD64f hal_ni_SVD64f666#define cv_hal_QR32f hal_ni_QR32f667#define cv_hal_QR64f hal_ni_QR64f668//! @endcond669670671/**672The function performs generalized matrix multiplication similar to the gemm functions in BLAS level 3:673\f$D = \alpha*AB+\beta*C\f$674675@param src1 pointer to input \f$M\times N\f$ matrix \f$A\f$ or \f$A^T\f$ stored in row major order.676@param src1_step number of bytes between two consequent rows of matrix \f$A\f$ or \f$A^T\f$.677@param src2 pointer to input \f$N\times K\f$ matrix \f$B\f$ or \f$B^T\f$ stored in row major order.678@param src2_step number of bytes between two consequent rows of matrix \f$B\f$ or \f$B^T\f$.679@param alpha \f$\alpha\f$ multiplier before \f$AB\f$680@param src3 pointer to input \f$M\times K\f$ matrix \f$C\f$ or \f$C^T\f$ stored in row major order.681@param src3_step number of bytes between two consequent rows of matrix \f$C\f$ or \f$C^T\f$.682@param beta \f$\beta\f$ multiplier before \f$C\f$683@param dst pointer to input \f$M\times K\f$ matrix \f$D\f$ stored in row major order.684@param dst_step number of bytes between two consequent rows of matrix \f$D\f$.685@param m number of rows in matrix \f$A\f$ or \f$A^T\f$, equals to number of rows in matrix \f$D\f$686@param n number of columns in matrix \f$A\f$ or \f$A^T\f$687@param k number of columns in matrix \f$B\f$ or \f$B^T\f$, equals to number of columns in matrix \f$D\f$688@param flags algorithm options (combination of CV_HAL_GEMM_1_T, ...).689*/690691//! @addtogroup core_hal_interface_matrix_multiplication Matrix multiplication692//! @{693inline int hal_ni_gemm32f(const float* src1, size_t src1_step, const float* src2, size_t src2_step,694float alpha, const float* src3, size_t src3_step, float beta, float* dst, size_t dst_step,695int m, int n, int k, int flags) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }696inline int hal_ni_gemm64f(const double* src1, size_t src1_step, const double* src2, size_t src2_step,697double alpha, const double* src3, size_t src3_step, double beta, double* dst, size_t dst_step,698int m, int n, int k, int flags) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }699inline int hal_ni_gemm32fc(const float* src1, size_t src1_step, const float* src2, size_t src2_step,700float alpha, const float* src3, size_t src3_step, float beta, float* dst, size_t dst_step,701int m, int n, int k, int flags) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }702inline int hal_ni_gemm64fc(const double* src1, size_t src1_step, const double* src2, size_t src2_step,703double alpha, const double* src3, size_t src3_step, double beta, double* dst, size_t dst_step,704int m, int n, int k, int flags) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }705//! @}706707//! @cond IGNORED708#define cv_hal_gemm32f hal_ni_gemm32f709#define cv_hal_gemm64f hal_ni_gemm64f710#define cv_hal_gemm32fc hal_ni_gemm32fc711#define cv_hal_gemm64fc hal_ni_gemm64fc712//! @endcond713714/**715@brief Finds the global minimum and maximum in an array.716@param src_data,src_step Source image717@param width,height Source image dimensions718@param depth Depth of source image719@param minVal,maxVal Pointer to the returned global minimum and maximum in an array.720@param minIdx,maxIdx Pointer to the returned minimum and maximum location.721@param mask Specified array region.722*/723inline int hal_ni_minMaxIdx(const uchar* src_data, size_t src_step, int width, int height, int depth, double* minVal, double* maxVal,724int* minIdx, int* maxIdx, uchar* mask) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }725726//! @cond IGNORED727#define cv_hal_minMaxIdx hal_ni_minMaxIdx728//! @endcond729730//! @}731732733#if defined __GNUC__734# pragma GCC diagnostic pop735#elif defined _MSC_VER736# pragma warning( pop )737#endif738739#include "hal_internal.hpp"740#include "custom_hal.hpp"741742//! @cond IGNORED743#define CALL_HAL_RET(name, fun, retval, ...) \744{ \745int res = __CV_EXPAND(fun(__VA_ARGS__, &retval)); \746if (res == CV_HAL_ERROR_OK) \747return retval; \748else if (res != CV_HAL_ERROR_NOT_IMPLEMENTED) \749CV_Error_(cv::Error::StsInternal, \750("HAL implementation " CVAUX_STR(name) " ==> " CVAUX_STR(fun) " returned %d (0x%08x)", res, res)); \751}752753754#define CALL_HAL(name, fun, ...) \755{ \756int res = __CV_EXPAND(fun(__VA_ARGS__)); \757if (res == CV_HAL_ERROR_OK) \758return; \759else if (res != CV_HAL_ERROR_NOT_IMPLEMENTED) \760CV_Error_(cv::Error::StsInternal, \761("HAL implementation " CVAUX_STR(name) " ==> " CVAUX_STR(fun) " returned %d (0x%08x)", res, res)); \762}763//! @endcond764765#endif766767768