Update to 2.0.0 tree from current Fremantle build
[opencv] / cxcore / src / cxcmp.cpp
diff --git a/cxcore/src/cxcmp.cpp b/cxcore/src/cxcmp.cpp
deleted file mode 100644 (file)
index e9ca9c2..0000000
+++ /dev/null
@@ -1,1557 +0,0 @@
-/*M///////////////////////////////////////////////////////////////////////////////////////
-//
-//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
-//
-//  By downloading, copying, installing or using the software you agree to this license.
-//  If you do not agree to this license, do not download, install,
-//  copy or use the software.
-//
-//
-//                        Intel License Agreement
-//                For Open Source Computer Vision Library
-//
-// Copyright (C) 2000, Intel Corporation, all rights reserved.
-// Third party copyrights are property of their respective owners.
-//
-// Redistribution and use in source and binary forms, with or without modification,
-// are permitted provided that the following conditions are met:
-//
-//   * Redistribution's of source code must retain the above copyright notice,
-//     this list of conditions and the following disclaimer.
-//
-//   * Redistribution's in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//
-//   * The name of Intel Corporation may not be used to endorse or promote products
-//     derived from this software without specific prior written permission.
-//
-// This software is provided by the copyright holders and contributors "as is" and
-// any express or implied warranties, including, but not limited to, the implied
-// warranties of merchantability and fitness for a particular purpose are disclaimed.
-// In no event shall the Intel Corporation or contributors be liable for any direct,
-// indirect, incidental, special, exemplary, or consequential damages
-// (including, but not limited to, procurement of substitute goods or services;
-// loss of use, data, or profits; or business interruption) however caused
-// and on any theory of liability, whether in contract, strict liability,
-// or tort (including negligence or otherwise) arising in any way out of
-// the use of this software, even if advised of the possibility of such damage.
-//
-//M*/
-
-/* ////////////////////////////////////////////////////////////////////
-//
-//  CvMat comparison functions: range checking, min, max
-//
-// */
-
-#include "_cxcore.h"
-
-/****************************************************************************************\
-*                                      InRange[S]                                        *
-\****************************************************************************************/
-
-#define ICV_DEF_IN_RANGE_CASE_C1( worktype, _toggle_macro_ )    \
-for( x = 0; x < size.width; x++ )                               \
-{                                                               \
-    worktype a1 = _toggle_macro_(src1[x]),                      \
-             a2 = src2[x], a3 = src3[x];                        \
-    dst[x] = (uchar)-(_toggle_macro_(a2) <= a1 &&               \
-                     a1 < _toggle_macro_(a3));                  \
-}
-
-
-#define ICV_DEF_IN_RANGE_CASE_C2( worktype, _toggle_macro_ )        \
-for( x = 0; x < size.width; x++ )                                   \
-{                                                                   \
-    worktype a1 = _toggle_macro_(src1[x*2]),                        \
-             a2 = src2[x*2], a3 = src3[x*2];                        \
-    int f = _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);    \
-    a1 = _toggle_macro_(src1[x*2+1]);                               \
-    a2 = src2[x*2+1];                                               \
-    a3 = src3[x*2+1];                                               \
-    f &= _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);       \
-    dst[x] = (uchar)-f;                                             \
-}
-
-
-#define ICV_DEF_IN_RANGE_CASE_C3( worktype, _toggle_macro_ )        \
-for( x = 0; x < size.width; x++ )                                   \
-{                                                                   \
-    worktype a1 = _toggle_macro_(src1[x*3]),                        \
-             a2 = src2[x*3], a3 = src3[x*3];                        \
-    int f = _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);    \
-    a1 = _toggle_macro_(src1[x*3+1]);                               \
-    a2 = src2[x*3+1];                                               \
-    a3 = src3[x*3+1];                                               \
-    f &= _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);       \
-    a1 = _toggle_macro_(src1[x*3+2]);                               \
-    a2 = src2[x*3+2];                                               \
-    a3 = src3[x*3+2];                                               \
-    f &= _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);       \
-    dst[x] = (uchar)-f;                                             \
-}
-
-
-#define ICV_DEF_IN_RANGE_CASE_C4( worktype, _toggle_macro_ )        \
-for( x = 0; x < size.width; x++ )                                   \
-{                                                                   \
-    worktype a1 = _toggle_macro_(src1[x*4]),                        \
-             a2 = src2[x*4], a3 = src3[x*4];                        \
-    int f = _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);    \
-    a1 = _toggle_macro_(src1[x*4+1]);                               \
-    a2 = src2[x*4+1];                                               \
-    a3 = src3[x*4+1];                                               \
-    f &= _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);       \
-    a1 = _toggle_macro_(src1[x*4+2]);                               \
-    a2 = src2[x*4+2];                                               \
-    a3 = src3[x*4+2];                                               \
-    f &= _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);       \
-    a1 = _toggle_macro_(src1[x*4+3]);                               \
-    a2 = src2[x*4+3];                                               \
-    a3 = src3[x*4+3];                                               \
-    f &= _toggle_macro_(a2) <= a1 && a1 < _toggle_macro_(a3);       \
-    dst[x] = (uchar)-f;                                             \
-}
-
-
-#define ICV_DEF_IN_RANGE_FUNC( flavor, arrtype, worktype,           \
-                               _toggle_macro_, cn )                 \
-static CvStatus CV_STDCALL                                          \
-icvInRange_##flavor##_C##cn##R( const arrtype* src1, int step1,     \
-                                const arrtype* src2, int step2,     \
-                                const arrtype* src3, int step3,     \
-                                uchar* dst, int step, CvSize size ) \
-{                                                                   \
-    step1 /= sizeof(src1[0]); step2 /= sizeof(src2[0]);             \
-    step3 /= sizeof(src3[0]); step /= sizeof(dst[0]);               \
-                                                                    \
-    for( ; size.height--; src1 += step1, src2 += step2,             \
-                          src3 += step3, dst += step )              \
-    {                                                               \
-        int x;                                                      \
-        ICV_DEF_IN_RANGE_CASE_C##cn( worktype, _toggle_macro_ )     \
-    }                                                               \
-                                                                    \
-    return CV_OK;                                                   \
-}
-
-
-#define ICV_DEF_IN_RANGE_CASE_CONST_C1( worktype, _toggle_macro_ )  \
-for( x = 0; x < size.width; x++ )                                   \
-{                                                                   \
-    worktype a1 = _toggle_macro_(src1[x]);                          \
-    dst[x] = (uchar)-(scalar[0] <= a1 && a1 < scalar[1]);           \
-}
-
-
-#define ICV_DEF_IN_RANGE_CASE_CONST_C2( worktype, _toggle_macro_ )  \
-for( x = 0; x < size.width; x++ )                                   \
-{                                                                   \
-    worktype a1 = _toggle_macro_(src1[x*2]);                        \
-    int f = scalar[0] <= a1 && a1 < scalar[2];                      \
-    a1 = _toggle_macro_(src1[x*2+1]);                               \
-    f &= scalar[1] <= a1 && a1 < scalar[3];                         \
-    dst[x] = (uchar)-f;                                             \
-}
-
-
-#define ICV_DEF_IN_RANGE_CASE_CONST_C3( worktype, _toggle_macro_ )  \
-for( x = 0; x < size.width; x++ )                                   \
-{                                                                   \
-    worktype a1 = _toggle_macro_(src1[x*3]);                        \
-    int f = scalar[0] <= a1 && a1 < scalar[3];                      \
-    a1 = _toggle_macro_(src1[x*3+1]);                               \
-    f &= scalar[1] <= a1 && a1 < scalar[4];                         \
-    a1 = _toggle_macro_(src1[x*3+2]);                               \
-    f &= scalar[2] <= a1 && a1 < scalar[5];                         \
-    dst[x] = (uchar)-f;                                             \
-}
-
-
-#define ICV_DEF_IN_RANGE_CASE_CONST_C4( worktype, _toggle_macro_ )  \
-for( x = 0; x < size.width; x++ )                                   \
-{                                                                   \
-    worktype a1 = _toggle_macro_(src1[x*4]);                        \
-    int f = scalar[0] <= a1 && a1 < scalar[4];                      \
-    a1 = _toggle_macro_(src1[x*4+1]);                               \
-    f &= scalar[1] <= a1 && a1 < scalar[5];                         \
-    a1 = _toggle_macro_(src1[x*4+2]);                               \
-    f &= scalar[2] <= a1 && a1 < scalar[6];                         \
-    a1 = _toggle_macro_(src1[x*4+3]);                               \
-    f &= scalar[3] <= a1 && a1 < scalar[7];                         \
-    dst[x] = (uchar)-f;                                             \
-}
-
-
-#define ICV_DEF_IN_RANGE_CONST_FUNC( flavor, arrtype, worktype,     \
-                                     _toggle_macro_, cn )           \
-static CvStatus CV_STDCALL                                          \
-icvInRangeC_##flavor##_C##cn##R( const arrtype* src1, int step1,    \
-                                 uchar* dst, int step, CvSize size, \
-                                 const worktype* scalar )           \
-{                                                                   \
-    step1 /= sizeof(src1[0]); step /= sizeof(dst[0]);               \
-                                                                    \
-    for( ; size.height--; src1 += step1, dst += step )              \
-    {                                                               \
-        int x;                                                      \
-        ICV_DEF_IN_RANGE_CASE_CONST_C##cn( worktype, _toggle_macro_)\
-    }                                                               \
-                                                                    \
-    return CV_OK;                                                   \
-}
-
-
-#define ICV_DEF_IN_RANGE_ALL( flavor, arrtype, worktype, _toggle_macro_ )   \
-ICV_DEF_IN_RANGE_FUNC( flavor, arrtype, worktype, _toggle_macro_, 1 )       \
-ICV_DEF_IN_RANGE_FUNC( flavor, arrtype, worktype, _toggle_macro_, 2 )       \
-ICV_DEF_IN_RANGE_FUNC( flavor, arrtype, worktype, _toggle_macro_, 3 )       \
-ICV_DEF_IN_RANGE_FUNC( flavor, arrtype, worktype, _toggle_macro_, 4 )       \
-                                                                            \
-ICV_DEF_IN_RANGE_CONST_FUNC( flavor, arrtype, worktype, _toggle_macro_, 1 ) \
-ICV_DEF_IN_RANGE_CONST_FUNC( flavor, arrtype, worktype, _toggle_macro_, 2 ) \
-ICV_DEF_IN_RANGE_CONST_FUNC( flavor, arrtype, worktype, _toggle_macro_, 3 ) \
-ICV_DEF_IN_RANGE_CONST_FUNC( flavor, arrtype, worktype, _toggle_macro_, 4 )
-
-ICV_DEF_IN_RANGE_ALL( 8u, uchar, int, CV_NOP )
-ICV_DEF_IN_RANGE_ALL( 16u, ushort, int, CV_NOP )
-ICV_DEF_IN_RANGE_ALL( 16s, short, int, CV_NOP )
-ICV_DEF_IN_RANGE_ALL( 32s, int, int, CV_NOP )
-ICV_DEF_IN_RANGE_ALL( 32f, float, float, CV_NOP )
-ICV_DEF_IN_RANGE_ALL( 64f, double, double, CV_NOP )
-
-#define icvInRange_8s_C1R 0
-#define icvInRange_8s_C2R 0
-#define icvInRange_8s_C3R 0
-#define icvInRange_8s_C4R 0
-
-#define icvInRangeC_8s_C1R 0
-#define icvInRangeC_8s_C2R 0
-#define icvInRangeC_8s_C3R 0
-#define icvInRangeC_8s_C4R 0
-
-CV_DEF_INIT_BIG_FUNC_TAB_2D( InRange, R )
-CV_DEF_INIT_BIG_FUNC_TAB_2D( InRangeC, R )
-
-typedef CvStatus (CV_STDCALL * CvInRangeCFunc)( const void* src, int srcstep,
-                                                uchar* dst, int dststep,
-                                                CvSize size, const void* scalar );
-
-/*************************************** InRange ****************************************/
-
-CV_IMPL void
-cvInRange( const void* srcarr1, const void* srcarr2,
-           const void* srcarr3, void* dstarr )
-{
-    static CvBigFuncTable inrange_tab;
-    static int inittab = 0;
-
-    CV_FUNCNAME( "cvInRange" );
-
-    __BEGIN__;
-
-    int type, coi = 0;
-    int src1_step, src2_step, src3_step, dst_step;
-    CvMat srcstub1, *src1 = (CvMat*)srcarr1;
-    CvMat srcstub2, *src2 = (CvMat*)srcarr2;
-    CvMat srcstub3, *src3 = (CvMat*)srcarr3;
-    CvMat dststub,  *dst = (CvMat*)dstarr;
-    CvSize size;
-    CvFunc2D_4A func;
-
-    if( !inittab )
-    {
-        icvInitInRangeRTable( &inrange_tab );
-        inittab = 1;
-    }
-
-    if( !CV_IS_MAT(src1) )
-    {
-        CV_CALL( src1 = cvGetMat( src1, &srcstub1, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(src2) )
-    {
-        CV_CALL( src2 = cvGetMat( src2, &srcstub2, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(src3) )
-    {
-        CV_CALL( src3 = cvGetMat( src3, &srcstub3, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(dst) )
-    {
-        CV_CALL( dst = cvGetMat( dst, &dststub, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_ARE_TYPES_EQ( src1, src2 ) ||
-        !CV_ARE_TYPES_EQ( src1, src3 ) )
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedFormats );
-
-    if( !CV_IS_MASK_ARR( dst ))
-        CV_ERROR( CV_StsUnsupportedFormat, "Destination image should be 8uC1 or 8sC1");
-
-    if( !CV_ARE_SIZES_EQ( src1, src2 ) ||
-        !CV_ARE_SIZES_EQ( src1, src3 ) ||
-        !CV_ARE_SIZES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    type = CV_MAT_TYPE(src1->type);
-    size = cvGetMatSize( src1 );
-
-    if( CV_IS_MAT_CONT( src1->type & src2->type & src3->type & dst->type ))
-    {
-        size.width *= size.height;
-        src1_step = src2_step = src3_step = dst_step = CV_STUB_STEP;
-        size.height = 1;
-    }
-    else
-    {
-        src1_step = src1->step;
-        src2_step = src2->step;
-        src3_step = src3->step;
-        dst_step = dst->step;
-    }
-
-    if( CV_MAT_CN(type) > 4 )
-        CV_ERROR( CV_StsOutOfRange, "The number of channels must be 1, 2, 3 or 4" );
-
-    func = (CvFunc2D_4A)(inrange_tab.fn_2d[type]);
-
-    if( !func )
-        CV_ERROR( CV_StsUnsupportedFormat, "" );
-
-    IPPI_CALL( func( src1->data.ptr, src1_step, src2->data.ptr, src2_step,
-                     src3->data.ptr, src3_step, dst->data.ptr, dst_step, size ));
-
-    __END__;
-}
-
-
-/************************************** InRangeS ****************************************/
-
-CV_IMPL void
-cvInRangeS( const void* srcarr, CvScalar lower, CvScalar upper, void* dstarr )
-{
-    static CvBigFuncTable inrange_tab;
-    static int inittab = 0;
-
-    CV_FUNCNAME( "cvInRangeS" );
-
-    __BEGIN__;
-
-    int sctype, type, coi = 0;
-    int src1_step, dst_step;
-    CvMat srcstub1, *src1 = (CvMat*)srcarr;
-    CvMat dststub,  *dst = (CvMat*)dstarr;
-    CvSize size;
-    CvInRangeCFunc func;
-    double buf[8];
-
-    if( !inittab )
-    {
-        icvInitInRangeCRTable( &inrange_tab );
-        inittab = 1;
-    }
-
-    if( !CV_IS_MAT(src1) )
-    {
-        CV_CALL( src1 = cvGetMat( src1, &srcstub1, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(dst) )
-    {
-        CV_CALL( dst = cvGetMat( dst, &dststub, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MASK_ARR( dst ))
-        CV_ERROR( CV_StsUnsupportedFormat, "Destination image should be 8uC1 or 8sC1");
-
-    if( !CV_ARE_SIZES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    sctype = type = CV_MAT_TYPE(src1->type);
-    if( CV_MAT_DEPTH(sctype) < CV_32S )
-        sctype = (type & CV_MAT_CN_MASK) | CV_32SC1;
-
-    size = cvGetMatSize( src1 );
-
-    if( CV_IS_MAT_CONT( src1->type & dst->type ))
-    {
-        size.width *= size.height;
-        src1_step = dst_step = CV_STUB_STEP;
-        size.height = 1;
-    }
-    else
-    {
-        src1_step = src1->step;
-        dst_step = dst->step;
-    }
-
-    if( CV_MAT_CN(type) > 4 )
-        CV_ERROR( CV_StsOutOfRange, "The number of channels must be 1, 2, 3 or 4" );
-
-    func = (CvInRangeCFunc)(inrange_tab.fn_2d[type]);
-
-    if( !func )
-        CV_ERROR( CV_StsUnsupportedFormat, "" );
-
-    cvScalarToRawData( &lower, buf, sctype, 0 );
-    cvScalarToRawData( &upper, (char*)buf + CV_ELEM_SIZE(sctype), sctype, 0 );
-
-    IPPI_CALL( func( src1->data.ptr, src1_step, dst->data.ptr,
-                     dst_step, size, buf ));
-
-    __END__;
-}
-
-
-/****************************************************************************************\
-*                                         Cmp                                            *
-\****************************************************************************************/
-
-#define ICV_DEF_CMP_CASE_C1( __op__, _toggle_macro_ )                   \
-for( x = 0; x <= size.width - 4; x += 4 )                               \
-{                                                                       \
-    int f0 = __op__( _toggle_macro_(src1[x]), _toggle_macro_(src2[x])); \
-    int f1 = __op__( _toggle_macro_(src1[x+1]), _toggle_macro_(src2[x+1])); \
-    dst[x] = (uchar)-f0;                                                \
-    dst[x+1] = (uchar)-f1;                                              \
-    f0 = __op__( _toggle_macro_(src1[x+2]), _toggle_macro_(src2[x+2])); \
-    f1 = __op__( _toggle_macro_(src1[x+3]), _toggle_macro_(src2[x+3])); \
-    dst[x+2] = (uchar)-f0;                                              \
-    dst[x+3] = (uchar)-f1;                                              \
-}                                                                       \
-                                                                        \
-for( ; x < size.width; x++ )                                            \
-{                                                                       \
-    int f0 = __op__( _toggle_macro_(src1[x]), _toggle_macro_(src2[x])); \
-    dst[x] = (uchar)-f0;                                                \
-}
-
-
-#define ICV_DEF_CMP_FUNC( __op__, name, flavor, arrtype,        \
-                          worktype, _toggle_macro_ )            \
-static CvStatus CV_STDCALL                                      \
-icv##name##_##flavor##_C1R( const arrtype* src1, int step1,     \
-                            const arrtype* src2, int step2,     \
-                            uchar* dst, int step, CvSize size ) \
-{                                                               \
-    step1 /= sizeof(src1[0]); step2 /= sizeof(src2[0]);         \
-    step /= sizeof(dst[0]);                                     \
-                                                                \
-    for( ; size.height--; src1 += step1, src2 += step2,         \
-                          dst += step )                         \
-    {                                                           \
-        int x;                                                  \
-        ICV_DEF_CMP_CASE_C1( __op__, _toggle_macro_ )           \
-    }                                                           \
-                                                                \
-    return CV_OK;                                               \
-}
-
-
-#define ICV_DEF_CMP_CONST_CASE_C1( __op__, _toggle_macro_ )     \
-for( x = 0; x <= size.width - 4; x += 4 )                       \
-{                                                               \
-    int f0 = __op__( _toggle_macro_(src1[x]), scalar );         \
-    int f1 = __op__( _toggle_macro_(src1[x+1]), scalar );       \
-    dst[x] = (uchar)-f0;                                        \
-    dst[x+1] = (uchar)-f1;                                      \
-    f0 = __op__( _toggle_macro_(src1[x+2]), scalar );           \
-    f1 = __op__( _toggle_macro_(src1[x+3]), scalar );           \
-    dst[x+2] = (uchar)-f0;                                      \
-    dst[x+3] = (uchar)-f1;                                      \
-}                                                               \
-                                                                \
-for( ; x < size.width; x++ )                                    \
-{                                                               \
-    int f0 = __op__( _toggle_macro_(src1[x]), scalar );         \
-    dst[x] = (uchar)-f0;                                        \
-}
-
-
-#define ICV_DEF_CMP_CONST_FUNC( __op__, name, flavor, arrtype,  \
-                                worktype, _toggle_macro_)       \
-static CvStatus CV_STDCALL                                      \
-icv##name##C_##flavor##_C1R( const arrtype* src1, int step1,    \
-                             uchar* dst, int step,              \
-                             CvSize size, worktype* pScalar )   \
-{                                                               \
-    worktype scalar = *pScalar;                                 \
-    step1 /= sizeof(src1[0]); step /= sizeof(dst[0]);           \
-                                                                \
-    for( ; size.height--; src1 += step1, dst += step )          \
-    {                                                           \
-        int x;                                                  \
-        ICV_DEF_CMP_CONST_CASE_C1( __op__, _toggle_macro_ )     \
-    }                                                           \
-                                                                \
-    return CV_OK;                                               \
-}
-
-
-#define ICV_DEF_CMP_ALL( flavor, arrtype, worktype, _toggle_macro_ )            \
-ICV_DEF_CMP_FUNC( CV_GT, CmpGT, flavor, arrtype, worktype, _toggle_macro_ )     \
-ICV_DEF_CMP_FUNC( CV_EQ, CmpEQ, flavor, arrtype, worktype, _toggle_macro_ )     \
-ICV_DEF_CMP_CONST_FUNC( CV_GT, CmpGT, flavor, arrtype, worktype, _toggle_macro_)\
-ICV_DEF_CMP_CONST_FUNC( CV_GE, CmpGE, flavor, arrtype, worktype, _toggle_macro_)\
-ICV_DEF_CMP_CONST_FUNC( CV_EQ, CmpEQ, flavor, arrtype, worktype, _toggle_macro_)
-
-ICV_DEF_CMP_ALL( 8u, uchar, int, CV_NOP )
-ICV_DEF_CMP_ALL( 16u, ushort, int, CV_NOP )
-ICV_DEF_CMP_ALL( 16s, short, int, CV_NOP )
-ICV_DEF_CMP_ALL( 32s, int, int, CV_NOP )
-ICV_DEF_CMP_ALL( 32f, float, double, CV_NOP )
-ICV_DEF_CMP_ALL( 64f, double, double, CV_NOP )
-
-#define icvCmpGT_8s_C1R     0
-#define icvCmpEQ_8s_C1R     0
-#define icvCmpGTC_8s_C1R    0
-#define icvCmpGEC_8s_C1R    0
-#define icvCmpEQC_8s_C1R    0
-
-CV_DEF_INIT_FUNC_TAB_2D( CmpGT, C1R )
-CV_DEF_INIT_FUNC_TAB_2D( CmpEQ, C1R )
-CV_DEF_INIT_FUNC_TAB_2D( CmpGTC, C1R )
-CV_DEF_INIT_FUNC_TAB_2D( CmpGEC, C1R )
-CV_DEF_INIT_FUNC_TAB_2D( CmpEQC, C1R )
-
-icvCompare_8u_C1R_t icvCompare_8u_C1R_p = 0;
-icvCompare_16s_C1R_t icvCompare_16s_C1R_p = 0;
-icvCompare_32f_C1R_t icvCompare_32f_C1R_p = 0;
-
-icvCompareC_8u_C1R_t icvCompareC_8u_C1R_p = 0;
-icvCompareC_16s_C1R_t icvCompareC_16s_C1R_p = 0;
-icvCompareC_32f_C1R_t icvCompareC_32f_C1R_p = 0;
-
-icvThreshold_GT_8u_C1R_t icvThreshold_GT_8u_C1R_p = 0;
-icvThreshold_GT_16s_C1R_t icvThreshold_GT_16s_C1R_p = 0;
-icvThreshold_GT_32f_C1R_t icvThreshold_GT_32f_C1R_p = 0;
-
-icvThreshold_LT_8u_C1R_t icvThreshold_LT_8u_C1R_p = 0;
-icvThreshold_LT_16s_C1R_t icvThreshold_LT_16s_C1R_p = 0;
-icvThreshold_LT_32f_C1R_t icvThreshold_LT_32f_C1R_p = 0;
-
-/***************************************** cvCmp ****************************************/
-
-CV_IMPL void
-cvCmp( const void* srcarr1, const void* srcarr2,
-       void* dstarr, int cmp_op )
-{
-    static CvFuncTable cmp_tab[2];
-    static int inittab = 0;
-
-    CV_FUNCNAME( "cvCmp" );
-
-    __BEGIN__;
-
-    int type, coi = 0;
-    int invflag = 0;
-    CvCmpOp ipp_cmp_op;
-    int src1_step, src2_step, dst_step;
-    CvMat srcstub1, *src1 = (CvMat*)srcarr1;
-    CvMat srcstub2, *src2 = (CvMat*)srcarr2;
-    CvMat dststub,  *dst = (CvMat*)dstarr;
-    CvMat *temp;
-    CvSize size;
-    CvFunc2D_3A func;
-
-    if( !inittab )
-    {
-        icvInitCmpGTC1RTable( &cmp_tab[0] );
-        icvInitCmpEQC1RTable( &cmp_tab[1] );
-        inittab = 1;
-    }
-
-    if( !CV_IS_MAT(src1) )
-    {
-        CV_CALL( src1 = cvGetMat( src1, &srcstub1, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(src2) )
-    {
-        CV_CALL( src2 = cvGetMat( src2, &srcstub2, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(dst) )
-    {
-        CV_CALL( dst = cvGetMat( dst, &dststub, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    switch( cmp_op )
-    {
-    case CV_CMP_GT:
-    case CV_CMP_EQ:
-        break;
-    case CV_CMP_GE:
-        CV_SWAP( src1, src2, temp );
-        invflag = 1;
-        break;
-    case CV_CMP_LT:
-        CV_SWAP( src1, src2, temp );
-        break;
-    case CV_CMP_LE:
-        invflag = 1;
-        break;
-    case CV_CMP_NE:
-        cmp_op = CV_CMP_EQ;
-        invflag = 1;
-        break;
-    default:
-        CV_ERROR( CV_StsBadArg, "Unknown comparison operation" );
-    }
-
-    if( !CV_ARE_TYPES_EQ( src1, src2 ) )
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedFormats );
-
-    if( CV_MAT_CN( src1->type ) != 1 )
-        CV_ERROR( CV_StsUnsupportedFormat, "Input arrays must be single-channel");
-
-    if( !CV_IS_MASK_ARR( dst ))
-        CV_ERROR( CV_StsUnsupportedFormat, "Destination array should be 8uC1 or 8sC1");
-
-    if( !CV_ARE_SIZES_EQ( src1, src2 ) ||
-        !CV_ARE_SIZES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    type = CV_MAT_TYPE(src1->type);
-    size = cvGetMatSize( src1 );
-
-    if( CV_IS_MAT_CONT( src1->type & src2->type & dst->type ))
-    {
-        size.width *= size.height;
-        src1_step = src2_step = dst_step = CV_STUB_STEP;
-        size.height = 1;
-    }
-    else
-    {
-        src1_step = src1->step;
-        src2_step = src2->step;
-        dst_step = dst->step;
-    }
-
-    func = (CvFunc2D_3A)(cmp_tab[cmp_op == CV_CMP_EQ].fn_2d[type]);
-
-    if( !func )
-        CV_ERROR( CV_StsUnsupportedFormat, "" );
-
-    ipp_cmp_op = cmp_op == CV_CMP_EQ ? cvCmpEq : cvCmpGreater;
-
-    if( type == CV_8U && icvCompare_8u_C1R_p )
-    {
-        IPPI_CALL( icvCompare_8u_C1R_p( src1->data.ptr, src1_step, src2->data.ptr,
-                            src2_step, dst->data.ptr, dst_step, size, ipp_cmp_op ));
-    }
-    else if( type == CV_16S && icvCompare_16s_C1R_p )
-    {
-        IPPI_CALL( icvCompare_16s_C1R_p( src1->data.s, src1_step, src2->data.s,
-                            src2_step, dst->data.s, dst_step, size, ipp_cmp_op ));
-    }
-    else if( type == CV_32F && icvCompare_32f_C1R_p )
-    {
-        IPPI_CALL( icvCompare_32f_C1R_p( src1->data.fl, src1_step, src2->data.fl,
-                            src2_step, dst->data.fl, dst_step, size, ipp_cmp_op ));
-    }
-    else
-    {
-        IPPI_CALL( func( src1->data.ptr, src1_step, src2->data.ptr, src2_step,
-                         dst->data.ptr, dst_step, size ));
-    }
-
-    if( invflag )
-        IPPI_CALL( icvNot_8u_C1R( dst->data.ptr, dst_step,
-                           dst->data.ptr, dst_step, size ));
-
-    __END__;
-}
-
-
-/*************************************** cvCmpS *****************************************/
-
-CV_IMPL void
-cvCmpS( const void* srcarr, double value, void* dstarr, int cmp_op )
-{
-    static CvFuncTable cmps_tab[3];
-    static int inittab = 0;
-
-    CV_FUNCNAME( "cvCmpS" );
-
-    __BEGIN__;
-
-    int y, type, coi = 0;
-    int invflag = 0, ipp_cmp_op;
-    int src1_step, dst_step;
-    CvMat srcstub1, *src1 = (CvMat*)srcarr;
-    CvMat dststub,  *dst = (CvMat*)dstarr;
-    CvSize size;
-    int ival = 0;
-
-    if( !inittab )
-    {
-        icvInitCmpEQCC1RTable( &cmps_tab[CV_CMP_EQ] );
-        icvInitCmpGTCC1RTable( &cmps_tab[CV_CMP_GT] );
-        icvInitCmpGECC1RTable( &cmps_tab[CV_CMP_GE] );
-        inittab = 1;
-    }
-
-    if( !CV_IS_MAT(src1) )
-    {
-        CV_CALL( src1 = cvGetMat( src1, &srcstub1, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(dst) )
-    {
-        CV_CALL( dst = cvGetMat( dst, &dststub, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    switch( cmp_op )
-    {
-    case CV_CMP_GT:
-    case CV_CMP_EQ:
-    case CV_CMP_GE:
-        break;
-    case CV_CMP_LT:
-        invflag = 1;
-        cmp_op = CV_CMP_GE;
-        break;
-    case CV_CMP_LE:
-        invflag = 1;
-        cmp_op = CV_CMP_GT;
-        break;
-    case CV_CMP_NE:
-        invflag = 1;
-        cmp_op = CV_CMP_EQ;
-        break;
-    default:
-        CV_ERROR( CV_StsBadArg, "Unknown comparison operation" );
-    }
-
-    if( !CV_IS_MASK_ARR( dst ))
-        CV_ERROR( CV_StsUnsupportedFormat, "Destination array should be 8uC1 or 8sC1");
-
-    if( CV_MAT_CN( src1->type ) != 1 )
-        CV_ERROR( CV_StsUnsupportedFormat, "Input array must be single-channel");
-
-    if( !CV_ARE_SIZES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    type = CV_MAT_TYPE(src1->type);
-    size = cvGetMatSize( src1 );
-
-    if( CV_IS_MAT_CONT( src1->type & dst->type ))
-    {
-        size.width *= size.height;
-        src1_step = dst_step = CV_STUB_STEP;
-        size.height = 1;
-    }
-    else
-    {
-        src1_step = src1->step;
-        dst_step = dst->step;
-    }
-
-    if( CV_MAT_DEPTH(type) <= CV_32S )
-    {
-        ival = cvRound(value);
-        if( type == CV_8U || type == CV_16S )
-        {
-            int minval = type == CV_8U ? 0 : -32768;
-            int maxval = type == CV_8U ? 255 : 32767;
-            int fillval = -1;
-            if( ival < minval )
-                fillval = cmp_op == CV_CMP_NE || cmp_op == CV_CMP_GE || cmp_op == CV_CMP_GT ? 255 : 0;
-            else if( ival > maxval )
-                fillval = cmp_op == CV_CMP_NE || cmp_op == CV_CMP_LE || cmp_op == CV_CMP_LT ? 255 : 0;
-            if( fillval >= 0 )
-            {
-                fillval ^= invflag ? 255 : 0;
-                for( y = 0; y < size.height; y++ )
-                    memset( dst->data.ptr + y*dst_step, fillval, size.width );
-                EXIT;
-            }
-        }
-    }
-
-    ipp_cmp_op = cmp_op == CV_CMP_EQ ? cvCmpEq :
-                 cmp_op == CV_CMP_GE ? cvCmpGreaterEq : cvCmpGreater;
-    if( type == CV_8U && icvCompare_8u_C1R_p )
-    {
-        IPPI_CALL( icvCompareC_8u_C1R_p( src1->data.ptr, src1_step, (uchar)ival,
-                                         dst->data.ptr, dst_step, size, ipp_cmp_op ));
-    }
-    else if( type == CV_16S && icvCompare_16s_C1R_p )
-    {
-        IPPI_CALL( icvCompareC_16s_C1R_p( src1->data.s, src1_step, (short)ival,
-                                          dst->data.s, dst_step, size, ipp_cmp_op ));
-    }
-    else if( type == CV_32F && icvCompare_32f_C1R_p )
-    {
-        IPPI_CALL( icvCompareC_32f_C1R_p( src1->data.fl, src1_step, (float)value,
-                                          dst->data.fl, dst_step, size, ipp_cmp_op ));
-    }
-    else
-    {
-        CvFunc2D_2A1P func = (CvFunc2D_2A1P)(cmps_tab[cmp_op].fn_2d[type]);
-        if( !func )
-            CV_ERROR( CV_StsUnsupportedFormat, "" );
-
-        if( type <= CV_32S )
-        {
-            IPPI_CALL( func( src1->data.ptr, src1_step, dst->data.ptr,
-                             dst_step, size, &ival ));
-        }
-        else
-        {
-            IPPI_CALL( func( src1->data.ptr, src1_step, dst->data.ptr,
-                             dst_step, size, &value ));
-        }
-    }
-
-    if( invflag )
-        IPPI_CALL( icvNot_8u_C1R( dst->data.ptr, dst_step,
-                           dst->data.ptr, dst_step, size ));
-
-    __END__;
-}
-
-
-/****************************************************************************************\
-*                                       Min/Max                                          *
-\****************************************************************************************/
-
-
-#define ICV_DEF_MINMAX_FUNC( __op__, name, flavor, arrtype, \
-                             worktype, _toggle_macro_ )     \
-static CvStatus CV_STDCALL                                  \
-icv##name##_##flavor##_C1R( const arrtype* src1, int step1, \
-    const arrtype* src2, int step2,                         \
-    arrtype* dst, int step, CvSize size )                   \
-{                                                           \
-    step1 /= sizeof(src1[0]); step2 /= sizeof(src2[0]);     \
-    step /= sizeof(dst[0]);                                 \
-                                                            \
-    for( ; size.height--; src1 += step1,                    \
-            src2 += step2, dst += step )                    \
-    {                                                       \
-        int x;                                              \
-        for( x = 0; x <= size.width - 4; x += 4 )           \
-        {                                                   \
-            worktype a0 = _toggle_macro_(src1[x]);          \
-            worktype b0 = _toggle_macro_(src2[x]);          \
-            worktype a1 = _toggle_macro_(src1[x+1]);        \
-            worktype b1 = _toggle_macro_(src2[x+1]);        \
-            a0 = __op__( a0, b0 );                          \
-            a1 = __op__( a1, b1 );                          \
-            dst[x] = (arrtype)_toggle_macro_(a0);           \
-            dst[x+1] = (arrtype)_toggle_macro_(a1);         \
-            a0 = _toggle_macro_(src1[x+2]);                 \
-            b0 = _toggle_macro_(src2[x+2]);                 \
-            a1 = _toggle_macro_(src1[x+3]);                 \
-            b1 = _toggle_macro_(src2[x+3]);                 \
-            a0 = __op__( a0, b0 );                          \
-            a1 = __op__( a1, b1 );                          \
-            dst[x+2] = (arrtype)_toggle_macro_(a0);         \
-            dst[x+3] = (arrtype)_toggle_macro_(a1);         \
-        }                                                   \
-                                                            \
-        for( ; x < size.width; x++ )                        \
-        {                                                   \
-            worktype a0 = _toggle_macro_(src1[x]);          \
-            worktype b0 = _toggle_macro_(src2[x]);          \
-            a0 = __op__( a0, b0 );                          \
-            dst[x] = (arrtype)_toggle_macro_(a0);           \
-        }                                                   \
-    }                                                       \
-                                                            \
-    return CV_OK;                                           \
-}
-
-
-#define ICV_DEF_MINMAX_CONST_FUNC( __op__, name,            \
-    flavor, arrtype, worktype, _toggle_macro_)              \
-static CvStatus CV_STDCALL                                  \
-icv##name##C_##flavor##_C1R( const arrtype* src1, int step1,\
-                             arrtype* dst, int step,        \
-                             CvSize size, worktype* pScalar)\
-{                                                           \
-    worktype scalar = _toggle_macro_(*pScalar);             \
-    step1 /= sizeof(src1[0]); step /= sizeof(dst[0]);       \
-                                                            \
-    for( ; size.height--; src1 += step1, dst += step )      \
-    {                                                       \
-        int x;                                              \
-        for( x = 0; x <= size.width - 4; x += 4 )           \
-        {                                                   \
-            worktype a0 = _toggle_macro_(src1[x]);          \
-            worktype a1 = _toggle_macro_(src1[x+1]);        \
-            a0 = __op__( a0, scalar );                      \
-            a1 = __op__( a1, scalar );                      \
-            dst[x] = (arrtype)_toggle_macro_(a0);           \
-            dst[x+1] = (arrtype)_toggle_macro_(a1);         \
-            a0 = _toggle_macro_(src1[x+2]);                 \
-            a1 = _toggle_macro_(src1[x+3]);                 \
-            a0 = __op__( a0, scalar );                      \
-            a1 = __op__( a1, scalar );                      \
-            dst[x+2] = (arrtype)_toggle_macro_(a0);         \
-            dst[x+3] = (arrtype)_toggle_macro_(a1);         \
-        }                                                   \
-                                                            \
-        for( ; x < size.width; x++ )                        \
-        {                                                   \
-            worktype a0 = _toggle_macro_(src1[x]);          \
-            a0 = __op__( a0, scalar );                      \
-            dst[x] = (arrtype)_toggle_macro_(a0);           \
-        }                                                   \
-    }                                                       \
-                                                            \
-    return CV_OK;                                           \
-}
-
-
-#define ICV_DEF_MINMAX_ALL( flavor, arrtype, worktype,                             \
-                            _toggle_macro_, _min_op_, _max_op_ )                   \
-ICV_DEF_MINMAX_FUNC( _min_op_, Min, flavor, arrtype, worktype, _toggle_macro_ )    \
-ICV_DEF_MINMAX_FUNC( _max_op_, Max, flavor, arrtype, worktype, _toggle_macro_ )    \
-ICV_DEF_MINMAX_CONST_FUNC(_min_op_, Min, flavor, arrtype, worktype, _toggle_macro_)\
-ICV_DEF_MINMAX_CONST_FUNC(_max_op_, Max, flavor, arrtype, worktype, _toggle_macro_)
-
-ICV_DEF_MINMAX_ALL( 8u, uchar, int, CV_NOP, CV_MIN_8U, CV_MAX_8U )
-ICV_DEF_MINMAX_ALL( 16u, ushort, int, CV_NOP, CV_IMIN, CV_IMAX )
-ICV_DEF_MINMAX_ALL( 16s, short, int, CV_NOP, CV_IMIN, CV_IMAX )
-ICV_DEF_MINMAX_ALL( 32s, int, int, CV_NOP, CV_IMIN, CV_IMAX )
-ICV_DEF_MINMAX_ALL( 32f, int, int, CV_TOGGLE_FLT, CV_IMIN, CV_IMAX )
-ICV_DEF_MINMAX_ALL( 64f, double, double, CV_NOP, MIN, MAX )
-
-#define icvMin_8s_C1R     0
-#define icvMax_8s_C1R     0
-#define icvMinC_8s_C1R    0
-#define icvMaxC_8s_C1R    0
-
-CV_DEF_INIT_FUNC_TAB_2D( Min, C1R )
-CV_DEF_INIT_FUNC_TAB_2D( Max, C1R )
-CV_DEF_INIT_FUNC_TAB_2D( MinC, C1R )
-CV_DEF_INIT_FUNC_TAB_2D( MaxC, C1R )
-
-/*********************************** cvMin & cvMax **************************************/
-
-static void
-icvMinMax( const void* srcarr1, const void* srcarr2,
-           void* dstarr, int is_max )
-{
-    static CvFuncTable minmax_tab[2];
-    static int inittab = 0;
-
-    CV_FUNCNAME( "icvMinMax" );
-
-    __BEGIN__;
-
-    int type, coi = 0;
-    int src1_step, src2_step, dst_step;
-    CvMat srcstub1, *src1 = (CvMat*)srcarr1;
-    CvMat srcstub2, *src2 = (CvMat*)srcarr2;
-    CvMat dststub,  *dst = (CvMat*)dstarr;
-    CvSize size;
-    CvFunc2D_3A func;
-
-    if( !inittab )
-    {
-        icvInitMinC1RTable( &minmax_tab[0] );
-        icvInitMaxC1RTable( &minmax_tab[1] );
-        inittab = 1;
-    }
-
-    if( !CV_IS_MAT(src1) )
-    {
-        CV_CALL( src1 = cvGetMat( src1, &srcstub1, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(src2) )
-    {
-        CV_CALL( src2 = cvGetMat( src2, &srcstub2, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(dst) )
-    {
-        CV_CALL( dst = cvGetMat( dst, &dststub, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_ARE_TYPES_EQ( src1, src2 ) ||
-        !CV_ARE_TYPES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedFormats );
-
-    if( CV_MAT_CN( src1->type ) != 1 )
-        CV_ERROR( CV_StsUnsupportedFormat, "Input arrays must be single-channel");
-
-    if( !CV_ARE_SIZES_EQ( src1, src2 ) ||
-        !CV_ARE_SIZES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    type = CV_MAT_TYPE(src1->type);
-    size = cvGetMatSize( src1 );
-
-    if( CV_IS_MAT_CONT( src1->type & src2->type & dst->type ))
-    {
-        size.width *= size.height;
-        src1_step = src2_step = dst_step = CV_STUB_STEP;
-        size.height = 1;
-    }
-    else
-    {
-        src1_step = src1->step;
-        src2_step = src2->step;
-        dst_step = dst->step;
-    }
-
-    func = (CvFunc2D_3A)(minmax_tab[is_max != 0].fn_2d[type]);
-
-    if( !func )
-        CV_ERROR( CV_StsUnsupportedFormat, "" );
-
-    IPPI_CALL( func( src1->data.ptr, src1_step, src2->data.ptr, src2_step,
-                     dst->data.ptr, dst_step, size ));
-
-    __END__;
-}
-
-
-CV_IMPL void
-cvMin( const void* srcarr1, const void* srcarr2, void* dstarr )
-{
-    icvMinMax( srcarr1, srcarr2, dstarr, 0 );
-}
-
-
-CV_IMPL void
-cvMax( const void* srcarr1, const void* srcarr2, void* dstarr )
-{
-    icvMinMax( srcarr1, srcarr2, dstarr, 1 );
-}
-
-
-/********************************* cvMinS / cvMaxS **************************************/
-
-static void
-icvMinMaxS( const void* srcarr, double value, void* dstarr, int is_max )
-{
-    static CvFuncTable minmaxs_tab[2];
-    static int inittab = 0;
-
-    CV_FUNCNAME( "icvMinMaxS" );
-
-    __BEGIN__;
-
-    int type, coi = 0;
-    int src1_step, dst_step;
-    CvMat srcstub1, *src1 = (CvMat*)srcarr;
-    CvMat dststub,  *dst = (CvMat*)dstarr;
-    CvSize size;
-    CvFunc2D_2A1P func;
-    union
-    {
-        int i;
-        float f;
-        double d;
-    }
-    buf;
-
-    if( !inittab )
-    {
-        icvInitMinCC1RTable( &minmaxs_tab[0] );
-        icvInitMaxCC1RTable( &minmaxs_tab[1] );
-        inittab = 1;
-    }
-
-    if( !CV_IS_MAT(src1) )
-    {
-        CV_CALL( src1 = cvGetMat( src1, &srcstub1, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_IS_MAT(dst) )
-    {
-        CV_CALL( dst = cvGetMat( dst, &dststub, &coi ));
-        if( coi != 0 )
-            CV_ERROR( CV_BadCOI, "" );
-    }
-
-    if( !CV_ARE_TYPES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedFormats );
-
-    if( CV_MAT_CN( src1->type ) != 1 )
-        CV_ERROR( CV_StsUnsupportedFormat, "Input array must be single-channel");
-
-    if( !CV_ARE_SIZES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    type = CV_MAT_TYPE(src1->type);
-
-    if( CV_MAT_DEPTH(type) <= CV_32S )
-    {
-        buf.i = cvRound(value);
-        if( CV_MAT_DEPTH(type) == CV_8U )
-            buf.i = CV_CAST_8U(buf.i);
-        else if( CV_MAT_DEPTH(type) == CV_8S )
-            buf.i = CV_CAST_8S(buf.i);
-        else if( CV_MAT_DEPTH(type) == CV_16U )
-            buf.i = CV_CAST_16U(buf.i);
-        else if( CV_MAT_DEPTH(type) == CV_16S )
-            buf.i = CV_CAST_16S(buf.i);
-    }
-    else if( CV_MAT_DEPTH(type) == CV_32F )
-        buf.f = (float)value;
-    else
-        buf.d = value;
-
-    size = cvGetMatSize( src1 );
-
-    if( CV_IS_MAT_CONT( src1->type & dst->type ))
-    {
-        size.width *= size.height;
-        src1_step = dst_step = CV_STUB_STEP;
-        size.height = 1;
-    }
-    else
-    {
-        src1_step = src1->step;
-        dst_step = dst->step;
-    }
-
-    func = (CvFunc2D_2A1P)(minmaxs_tab[is_max].fn_2d[type]);
-
-    if( !func )
-        CV_ERROR( CV_StsUnsupportedFormat, "" );
-
-    if( is_max )
-    {
-        if( type == CV_8U && icvThreshold_LT_8u_C1R_p )
-        {
-            IPPI_CALL( icvThreshold_LT_8u_C1R_p( src1->data.ptr, src1_step, dst->data.ptr,
-                                                 dst_step, size, (uchar)buf.i ));
-            EXIT;
-        }
-        else if( type == CV_16S && icvThreshold_LT_16s_C1R_p )
-        {
-            IPPI_CALL( icvThreshold_LT_16s_C1R_p( src1->data.s, src1_step, dst->data.s,
-                                                 dst_step, size, (short)buf.i ));
-            EXIT;
-        }
-        else if( type == CV_32F && icvThreshold_LT_32f_C1R_p )
-        {
-            IPPI_CALL( icvThreshold_LT_32f_C1R_p( src1->data.fl, src1_step, dst->data.fl,
-                                                 dst_step, size, buf.f ));
-            EXIT;
-        }
-    }
-    else
-    {
-        if( type == CV_8U && icvThreshold_GT_8u_C1R_p )
-        {
-            IPPI_CALL( icvThreshold_GT_8u_C1R_p( src1->data.ptr, src1_step, dst->data.ptr,
-                                                 dst_step, size, (uchar)buf.i ));
-            EXIT;
-        }
-        else if( type == CV_16S && icvThreshold_GT_16s_C1R_p )
-        {
-            IPPI_CALL( icvThreshold_GT_16s_C1R_p( src1->data.s, src1_step, dst->data.s,
-                                                 dst_step, size, (short)buf.i ));
-            EXIT;
-        }
-        else if( type == CV_32F && icvThreshold_GT_32f_C1R_p )
-        {
-            IPPI_CALL( icvThreshold_GT_32f_C1R_p( src1->data.fl, src1_step, dst->data.fl,
-                                                 dst_step, size, buf.f ));
-            EXIT;
-        }
-    }
-
-    if( type == CV_8U && size.width*size.height >= 1024 )
-    {
-        int i;
-        uchar tab[256];
-        CvMat _tab = cvMat( 1, 256, CV_8U, tab );
-
-        if( is_max )
-        {
-            for( i = 0; i < buf.i; i++ )
-                tab[i] = (uchar)buf.i;
-            for( ; i < 256; i++ )
-                tab[i] = (uchar)i;
-        }
-        else
-        {
-            for( i = 0; i < buf.i; i++ )
-                tab[i] = (uchar)i;
-            for( ; i < 256; i++ )
-                tab[i] = (uchar)buf.i;
-        }
-
-        cvLUT( src1, dst, &_tab );
-        EXIT;
-    }
-
-    IPPI_CALL( func( src1->data.ptr, src1_step, dst->data.ptr,
-                     dst_step, size, &buf ));
-
-    __END__;
-}
-
-
-CV_IMPL void
-cvMinS( const void* srcarr, double value, void* dstarr )
-{
-    icvMinMaxS( srcarr, value, dstarr, 0 );
-}
-
-
-CV_IMPL void
-cvMaxS( const void* srcarr, double value, void* dstarr )
-{
-    icvMinMaxS( srcarr, value, dstarr, 1 );
-}
-
-
-/****************************************************************************************\
-*                                  Absolute Difference                                   *
-\****************************************************************************************/
-
-#define  ICV_DEF_BIN_ABS_DIFF_2D(name, arrtype, temptype, abs_macro, cast_macro)\
-IPCVAPI_IMPL( CvStatus,                                 \
-name,( const arrtype* src1, int step1,                  \
-       const arrtype* src2, int step2,                  \
-       arrtype* dst, int step, CvSize size ),           \
-       (src1, step1, src2, step2, dst, step, size))     \
-{                                                       \
-    step1 /= sizeof(src1[0]); step2 /= sizeof(src2[0]); \
-    step /= sizeof(dst[0]);                             \
-                                                        \
-    for( ; size.height--; src1 += step1, src2 += step2, \
-                          dst += step )                 \
-    {                                                   \
-        int i;                                          \
-                                                        \
-        for( i = 0; i <= size.width - 4; i += 4 )       \
-        {                                               \
-            temptype t0 = src1[i] - src2[i];            \
-            temptype t1 = src1[i+1] - src2[i+1];        \
-                                                        \
-            t0 = (temptype)abs_macro(t0);               \
-            t1 = (temptype)abs_macro(t1);               \
-                                                        \
-            dst[i] = cast_macro(t0);                    \
-            dst[i+1] = cast_macro(t1);                  \
-                                                        \
-            t0 = src1[i+2] - src2[i+2];                 \
-            t1 = src1[i+3] - src2[i+3];                 \
-                                                        \
-            t0 = (temptype)abs_macro(t0);               \
-            t1 = (temptype)abs_macro(t1);               \
-                                                        \
-            dst[i+2] = cast_macro(t0);                  \
-            dst[i+3] = cast_macro(t1);                  \
-        }                                               \
-                                                        \
-        for( ; i < size.width; i++ )                    \
-        {                                               \
-            temptype t0 = src1[i] - src2[i];            \
-            t0 = (temptype)abs_macro(t0);               \
-            dst[i] = cast_macro(t0);                    \
-        }                                               \
-    }                                                   \
-                                                        \
-    return CV_OK;                                       \
-}
-
-
-#define  ICV_DEF_UN_ABS_DIFF_2D( name, arrtype, temptype, abs_macro, cast_macro)\
-static CvStatus CV_STDCALL                              \
-name( const arrtype* src0, int step1,                   \
-      arrtype* dst0, int step,                          \
-      CvSize size, const temptype* scalar )             \
-{                                                       \
-    step1 /= sizeof(src0[0]); step /= sizeof(dst0[0]);  \
-                                                        \
-    for( ; size.height--; src0 += step1, dst0 += step ) \
-    {                                                   \
-        int i, len = size.width;                        \
-        const arrtype* src = src0;                      \
-        arrtype* dst = dst0;                            \
-                                                        \
-        for( ; (len -= 12) >= 0; dst += 12, src += 12 ) \
-        {                                               \
-            temptype t0 = src[0] - scalar[0];           \
-            temptype t1 = src[1] - scalar[1];           \
-                                                        \
-            t0 = (temptype)abs_macro(t0);               \
-            t1 = (temptype)abs_macro(t1);               \
-                                                        \
-            dst[0] = cast_macro( t0 );                  \
-            dst[1] = cast_macro( t1 );                  \
-                                                        \
-            t0 = src[2] - scalar[2];                    \
-            t1 = src[3] - scalar[3];                    \
-                                                        \
-            t0 = (temptype)abs_macro(t0);               \
-            t1 = (temptype)abs_macro(t1);               \
-                                                        \
-            dst[2] = cast_macro( t0 );                  \
-            dst[3] = cast_macro( t1 );                  \
-                                                        \
-            t0 = src[4] - scalar[4];                    \
-            t1 = src[5] - scalar[5];                    \
-                                                        \
-            t0 = (temptype)abs_macro(t0);               \
-            t1 = (temptype)abs_macro(t1);               \
-                                                        \
-            dst[4] = cast_macro( t0 );                  \
-            dst[5] = cast_macro( t1 );                  \
-                                                        \
-            t0 = src[6] - scalar[6];                    \
-            t1 = src[7] - scalar[7];                    \
-                                                        \
-            t0 = (temptype)abs_macro(t0);               \
-            t1 = (temptype)abs_macro(t1);               \
-                                                        \
-            dst[6] = cast_macro( t0 );                  \
-            dst[7] = cast_macro( t1 );                  \
-                                                        \
-            t0 = src[8] - scalar[8];                    \
-            t1 = src[9] - scalar[9];                    \
-                                                        \
-            t0 = (temptype)abs_macro(t0);               \
-            t1 = (temptype)abs_macro(t1);               \
-                                                        \
-            dst[8] = cast_macro( t0 );                  \
-            dst[9] = cast_macro( t1 );                  \
-                                                        \
-            t0 = src[10] - scalar[10];                  \
-            t1 = src[11] - scalar[11];                  \
-                                                        \
-            t0 = (temptype)abs_macro(t0);               \
-            t1 = (temptype)abs_macro(t1);               \
-                                                        \
-            dst[10] = cast_macro( t0 );                 \
-            dst[11] = cast_macro( t1 );                 \
-        }                                               \
-                                                        \
-        for( (len) += 12, i = 0; i < (len); i++ )       \
-        {                                               \
-            temptype t0 = src[i] - scalar[i];           \
-            t0 = (temptype)abs_macro(t0);               \
-            dst[i] = cast_macro( t0 );                  \
-        }                                               \
-    }                                                   \
-                                                        \
-    return CV_OK;                                       \
-}
-
-
-#define  ICV_TO_8U(x)     ((uchar)(x))
-#define  ICV_TO_16U(x)    ((ushort)(x))
-
-ICV_DEF_BIN_ABS_DIFF_2D( icvAbsDiff_8u_C1R, uchar, int, CV_IABS, ICV_TO_8U )
-ICV_DEF_BIN_ABS_DIFF_2D( icvAbsDiff_16u_C1R, ushort, int, CV_IABS, ICV_TO_16U )
-ICV_DEF_BIN_ABS_DIFF_2D( icvAbsDiff_16s_C1R, short, int, CV_IABS, CV_CAST_16S )
-ICV_DEF_BIN_ABS_DIFF_2D( icvAbsDiff_32s_C1R, int, int, CV_IABS, CV_CAST_32S )
-ICV_DEF_BIN_ABS_DIFF_2D( icvAbsDiff_32f_C1R, float, float, fabs, CV_CAST_32F )
-ICV_DEF_BIN_ABS_DIFF_2D( icvAbsDiff_64f_C1R, double, double, fabs, CV_CAST_64F )
-
-ICV_DEF_UN_ABS_DIFF_2D( icvAbsDiffC_8u_CnR, uchar, int, CV_IABS, CV_CAST_8U )
-ICV_DEF_UN_ABS_DIFF_2D( icvAbsDiffC_16u_CnR, ushort, int, CV_IABS, CV_CAST_16U )
-ICV_DEF_UN_ABS_DIFF_2D( icvAbsDiffC_16s_CnR, short, int, CV_IABS, CV_CAST_16S )
-ICV_DEF_UN_ABS_DIFF_2D( icvAbsDiffC_32s_CnR, int, int, CV_IABS, CV_CAST_32S )
-ICV_DEF_UN_ABS_DIFF_2D( icvAbsDiffC_32f_CnR, float, float, fabs, CV_CAST_32F )
-ICV_DEF_UN_ABS_DIFF_2D( icvAbsDiffC_64f_CnR, double, double, fabs, CV_CAST_64F )
-
-
-#define  ICV_INIT_MINI_FUNC_TAB_2D( FUNCNAME, suffix )          \
-static void icvInit##FUNCNAME##Table( CvFuncTable* tab )        \
-{                                                               \
-    tab->fn_2d[CV_8U] = (void*)icv##FUNCNAME##_8u_##suffix;     \
-    tab->fn_2d[CV_16U] = (void*)icv##FUNCNAME##_16u_##suffix;   \
-    tab->fn_2d[CV_16S] = (void*)icv##FUNCNAME##_16s_##suffix;   \
-    tab->fn_2d[CV_32S] = (void*)icv##FUNCNAME##_32s_##suffix;   \
-    tab->fn_2d[CV_32F] = (void*)icv##FUNCNAME##_32f_##suffix;   \
-    tab->fn_2d[CV_64F] = (void*)icv##FUNCNAME##_64f_##suffix;   \
-}
-
-
-ICV_INIT_MINI_FUNC_TAB_2D( AbsDiff, C1R )
-ICV_INIT_MINI_FUNC_TAB_2D( AbsDiffC, CnR )
-
-
-CV_IMPL  void
-cvAbsDiff( const void* srcarr1, const void* srcarr2, void* dstarr )
-{
-    static CvFuncTable adiff_tab;
-    static int inittab = 0;
-
-    CV_FUNCNAME( "cvAbsDiff" );
-
-    __BEGIN__;
-
-    int coi1 = 0, coi2 = 0, coi3 = 0;
-    CvMat srcstub1, *src1 = (CvMat*)srcarr1;
-    CvMat srcstub2, *src2 = (CvMat*)srcarr2;
-    CvMat dststub,  *dst = (CvMat*)dstarr;
-    int src1_step, src2_step, dst_step;
-    CvSize size;
-    int type;
-
-    if( !inittab )
-    {
-        icvInitAbsDiffTable( &adiff_tab );
-        inittab = 1;
-    }
-
-    CV_CALL( src1 = cvGetMat( src1, &srcstub1, &coi1 ));
-    CV_CALL( src2 = cvGetMat( src2, &srcstub2, &coi2 ));
-    CV_CALL( dst = cvGetMat( dst, &dststub, &coi3 ));
-
-    if( coi1 != 0 || coi2 != 0 || coi3 != 0 )
-        CV_ERROR( CV_BadCOI, "" );
-
-    if( !CV_ARE_SIZES_EQ( src1, src2 ) )
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    size = cvGetMatSize( src1 );
-    type = CV_MAT_TYPE(src1->type);
-
-    if( !CV_ARE_SIZES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    if( !CV_ARE_TYPES_EQ( src1, src2 ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedFormats );
-
-    if( !CV_ARE_TYPES_EQ( src1, dst ))
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedFormats );
-
-    size.width *= CV_MAT_CN( type );
-
-    src1_step = src1->step;
-    src2_step = src2->step;
-    dst_step = dst->step;
-
-    if( CV_IS_MAT_CONT( src1->type & src2->type & dst->type ))
-    {
-        size.width *= size.height;
-        size.height = 1;
-        src1_step = src2_step = dst_step = CV_STUB_STEP;
-    }
-
-    {
-        CvFunc2D_3A func = (CvFunc2D_3A)
-            (adiff_tab.fn_2d[CV_MAT_DEPTH(type)]);
-
-        if( !func )
-            CV_ERROR( CV_StsUnsupportedFormat, "" );
-
-        IPPI_CALL( func( src1->data.ptr, src1_step, src2->data.ptr, src2_step,
-                         dst->data.ptr, dst_step, size ));
-    }
-
-    __END__;
-}
-
-
-CV_IMPL void
-cvAbsDiffS( const void* srcarr, void* dstarr, CvScalar scalar )
-{
-    static CvFuncTable adiffs_tab;
-    static int inittab = 0;
-
-    CV_FUNCNAME( "cvAbsDiffS" );
-
-    __BEGIN__;
-
-    int coi1 = 0, coi2 = 0;
-    int type, sctype;
-    CvMat srcstub, *src = (CvMat*)srcarr;
-    CvMat dststub, *dst = (CvMat*)dstarr;
-    int src_step, dst_step;
-    double buf[12];
-    CvSize size;
-
-    if( !inittab )
-    {
-        icvInitAbsDiffCTable( &adiffs_tab );
-        inittab = 1;
-    }
-
-    CV_CALL( src = cvGetMat( src, &srcstub, &coi1 ));
-    CV_CALL( dst = cvGetMat( dst, &dststub, &coi2 ));
-
-    if( coi1 != 0 || coi2 != 0 )
-        CV_ERROR( CV_BadCOI, "" );
-
-    if( !CV_ARE_TYPES_EQ(src, dst) )
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedFormats );
-
-    if( !CV_ARE_SIZES_EQ(src, dst) )
-        CV_ERROR_FROM_CODE( CV_StsUnmatchedSizes );
-
-    sctype = type = CV_MAT_TYPE( src->type );
-    if( CV_MAT_DEPTH(type) < CV_32S )
-        sctype = (type & CV_MAT_CN_MASK) | CV_32SC1;
-
-    size = cvGetMatSize( src );
-    size.width *= CV_MAT_CN( type );
-
-    src_step = src->step;
-    dst_step = dst->step;
-
-    if( CV_IS_MAT_CONT( src->type & dst->type ))
-    {
-        size.width *= size.height;
-        size.height = 1;
-        src_step = dst_step = CV_STUB_STEP;
-    }
-
-    CV_CALL( cvScalarToRawData( &scalar, buf, sctype, 1 ));
-
-    {
-        CvFunc2D_2A1P func = (CvFunc2D_2A1P)
-            (adiffs_tab.fn_2d[CV_MAT_DEPTH(type)]);
-
-        if( !func )
-            CV_ERROR( CV_StsUnsupportedFormat, "" );
-
-        IPPI_CALL( func( src->data.ptr, src_step, dst->data.ptr,
-                         dst_step, size, buf ));
-    }
-
-    __END__;
-}
-
-/* End of file. */