};
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
-#if 0
-static bool IPPMorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kernel,
- const Size& ksize, const Point &anchor, bool rectKernel)
-{
- int type = src.type();
- const Mat* _src = &src;
- Mat temp;
- if (src.data == dst.data)
- {
- src.copyTo(temp);
- _src = &temp;
- }
- //DEPRECATED. Allocates and initializes morphology state structure for erosion or dilation operation.
-// typedef IppStatus (CV_STDCALL* ippicviMorphologyInitAllocFunc)(int, const void*, IppiSize, IppiPoint, IppiMorphState **);
- typedef IppStatus (CV_STDCALL* ippicviMorphologyGetSizeFunc)(int, const Ipp8u*, IppiSize, int*);
- typedef IppStatus (CV_STDCALL* ippicviMorphologyInit)(int, const Ipp8u*, IppiSize, IppiPoint, IppiMorphState*);
- typedef IppStatus (CV_STDCALL* ippicviMorphologyBorderReplicateFunc)(const void*, int, void *, int, IppiSize, IppiBorderType, IppiMorphState *);
- typedef IppStatus (CV_STDCALL* ippicviMorphologyBorderFunc8u)(const Ipp8u*, int, Ipp8u*, int, IppiSize, IppiBorderType, Ipp8u, IppiMorphState*, Ipp8u*);
- typedef IppStatus (CV_STDCALL* ippicviMorphologyBorderFunc32f)(const Ipp32f*, int, Ipp32f*, int, IppiSize, IppiBorderType, Ipp32f, IppiMorphState*, Ipp8u*);
- typedef IppStatus (CV_STDCALL* ippicviFilterMinMaxGetBufferSizeFunc)(int, IppiSize, int*);
- typedef IppStatus (CV_STDCALL* ippicviFilterMinMaxBorderReplicateFunc)(const void*, int, void*, int, IppiSize, IppiSize, IppiPoint, void*);
-
- //ippicviMorphologyInitAllocFunc initAllocFunc = 0;
- ippicviMorphologyGetSizeFunc getSizeFunc = 0;
- ippicviMorphologyInit initFunc = 0;
- ippicviMorphologyBorderReplicateFunc morphFunc = 0;
- ippicviFilterMinMaxGetBufferSizeFunc getBufSizeFunc = 0;
- ippicviFilterMinMaxBorderReplicateFunc morphRectFunc = 0;
-
- #define IPP_MORPH_CASE(type, flavor, datatype) \
- case type: \
-/* initAllocFunc = (ippicviMorphologyInitAllocFunc)ippicviMorphologyInitAlloc_##flavor; */\
- getSizeFunc = (ippicviMorphologyGetSizeFunc)ippicviMorphologyGetSize_##flavor ; \
- initFunc = (ippicviMorphologyInit)ippicviMorphologyInit_##flavor ; \
- morphFunc = op == MORPH_ERODE ? (ippicviMorphologyBorderReplicateFunc)ippicviErodeBorderReplicate_##flavor : \
- (ippicviMorphologyBorderReplicateFunc)ippicviDilateBorderReplicate_##flavor; \
- getBufSizeFunc = (ippicviFilterMinMaxGetBufferSizeFunc)ippicviFilterMinGetBufferSize_##flavor; \
- morphRectFunc = op == MORPH_ERODE ? (ippicviFilterMinMaxBorderReplicateFunc)ippicviFilterMinBorderReplicate_##flavor : \
- (ippicviFilterMinMaxBorderReplicateFunc)ippicviFilterMaxBorderReplicate_##flavor; \
- break
-
- switch( type )
- {
- IPP_MORPH_CASE(CV_8UC1, 8u_C1R, 8u);
- IPP_MORPH_CASE(CV_8UC3, 8u_C3R, 8u);
- IPP_MORPH_CASE(CV_8UC4, 8u_C4R, 8u);
- IPP_MORPH_CASE(CV_32FC1, 32f_C1R, 32f);
- IPP_MORPH_CASE(CV_32FC3, 32f_C3R, 32f);
- IPP_MORPH_CASE(CV_32FC4, 32f_C4R, 32f);
- default:
- return false;
- }
- #undef IPP_MORPH_CASE
-
- IppiSize roiSize = {src.cols, src.rows};
- IppiSize kernelSize = {ksize.width, ksize.height};
- IppiPoint point = {anchor.x, anchor.y};
-
- if( !rectKernel && morphFunc && getSizeFunc && initFunc)
- {
- //IppiMorphState* pState;
- //if( initAllocFunc( roiSize.width, kernel.data, kernelSize, point, &pState ) < 0 )
- // return false;
- int stateSize = 0;
- if (getSizeFunc(roiSize.width, kernel.data, kernelSize, &stateSize) < 0)
- return false;
-
- bool ok = false;
- IppiMorphState* pState = (IppiMorphState*)ippicvMalloc(stateSize);
- if (initFunc(roiSize.width, kernel.data, kernelSize, point, pState) >= 0)
- {
- ok = morphFunc( _src->data, (int)_src->step[0],
- dst.data, (int)dst.step[0],
- roiSize, ippBorderRepl, pState ) >= 0;
- }
- ippicvFree(pState);
- //ippicviMorphologyFree(pState);
- return ok;
- }
- else if( rectKernel && morphRectFunc && getBufSizeFunc )
- {
- int bufSize = 0;
- if( getBufSizeFunc( src.cols, kernelSize, &bufSize) < 0 )
- return false;
- AutoBuffer<uchar> buf(bufSize + 64);
- uchar* buffer = alignPtr((uchar*)buf, 32);
- return morphRectFunc(_src->data, (int)_src->step[0], dst.data, (int)dst.step[0],
- roiSize, kernelSize, point, buffer) >= 0;
- }
- return false;
-}
-#endif
static bool IPPMorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kernel,
const Size& ksize, const Point &anchor, bool rectKernel)
{