ippiMorphOpenBorder_32f_C1R

ippiMorphOpenBorder_32f_C1R

Hi,

I'm porting from Ipp 7.0.6 to Ipp 8.1.0 a function that use ippiMorphOpenBorder_32f_C1R. Code doesn't compile with this error

error C2660: 'ippiMorphOpenBorder_32f_C1R' : function does not take 7 arguments.

I've find a difference from Ipp 8.1.0 documentation and function prototype in ippcv.h

Documentation states :

IppStatus ippiMorphOpenBorder_<mod>(const Ipp<datatype>* pSrc, int srcStep, Ipp<datatype>* pDst, int dstStep, IppiSize roiSize, IppiBorderType borderType, IppiMorphAdvState* pState);

Header function definition :

IPPAPI( IppStatus, ippiMorphOpenBorder_32f_C1R,(

                const Ipp32f* pSrc, int srcStep, Ipp32f* pDst, int dstStep,
                IppiSize roiSize, IppiBorderType borderType, Ipp32f borderValue, const IppiMorphAdvState* pMorthSpec, Ipp8u* pBuffer ))

Assuming that the header definition is right it's not clear for me which is the size of pBuffer and which function I must call to obtain this size.

Thank's in advance

9 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

pls look here -- you will see the example how to make the call of this function - http://software.intel.com/en-us/forums/topic/293581

 

regard to documentation - It looks like the description is not correct - we will check it. Thanks for the issue.

The example at http://software.intel.com/en-us/forums/topic/293581 seam broken ....

// I got ippStsMemAllocErr error over here. 
// I am not sure about this error (error on the pMask or pState?).
stat = ippiMorphAdvInitAlloc_32f_C1R(&pState, imgSz, pMask, maskSz, anchorPt); 

and probably (year 2009) refer to Ipp version before 8.1!!

The right function prototype now is :

IPPAPI( IppStatus, ippiMorphOpenBorder_32f_C1R,(

                const Ipp32f* pSrc, int srcStep, Ipp32f* pDst, int dstStep,
                IppiSize roiSize, IppiBorderType borderType, Ipp32f borderValue, const IppiMorphAdvState* pMorthSpec, Ipp8u* pBuffer ))

and my problem is how to calculate pBuffer size. Now I'm using ippiMorphAdvGetSize_32f_C1R but I'm not sure.

Regards

Is there an update on this topic?  I also just ran into the upgrade error listed here, and was not able to find any useful documentation on this API change.  Note that I have never run into an IPP API change before .. deprecation yes, but never a change.  Is this a bug or was it intentional?  Note that there also seems to be problems with the #pragmas in 8.1 which identify how to link with the different libraries (static vs. dynamic, and sequential vs. threaded).

Thanks,

Peter

Hi pvonkaenel.
I am so sorry about inconvinience for you. But we are trying to do IPP library as best as possible.
In one recent version of IPP libray the some new advanced mophology functions were added. For example
IPPAPI( IppStatus, ippiMorphOpenBorder_16u_C1R,(
                const Ipp16u* pSrc, int srcStep, Ipp16u* pDst, int dstStep,
                IppiSize roiSize, IppiBorderType borderType, Ipp16u borderValue, const IppiMorphAdvState* pMorthSpec, Ipp8u* pBuffer ))
It supports InMemory,Replicate and Const border types and allows processing images in parallel mode.
To add the same support of borders the API of already presented functions was changed too.

To call ippiMorphOpenBorder_32f_C1R please use pipeline below

{
                    IppStatus status;
                    int specSize = 0, bufferSize = 0;
                    IppiMorphAdvState* pState;
                    Ipp8u* pBuffer;
                    status = ippiMorphAdvGetSize_32f_C1R( roiSize, maskSize, &specSize, &bufferSize );
                    pState = (IppiMorphAdvState*)ippsMalloc_8u(specSize);
                    pBuffer = (Ipp8u*)ippsMalloc_8u(bufferSize);
                    status = ippiMorphAdvInit_32f_C1R( roiSize, pMask, maskSize, pState, pBuffer );
                    status = ippiMorphOpenBorder_32f_C1R (pSrc, srcStep, pDst, dstStep,  roiSize, border, borderValue, pState, pBuffer);
                    return status;
}

In nearest release, the documentation will be aligned with headers.
Thank you for using IPP.

Hi Andrey,

Thanks for the response - it does help a bit in figuring out how to change my existing call.  Is it fair to say that the parameters for the new 16u_C1R call should match the functionality for the changed parameters in the 8u_C1R call I have been using?

Thanks again,

Peter

Hi pvonkaenel.

For ippiMorphOpenBorder_8u_C1R and ippiMorphOpenBorder_16u_C1R uses the same pipeline as for 32f.

The difference is pMorthSpec instead of pState and borderType allowed to be one of ippBorderConst / ippBorderRepl / ippBorderInMem[Left
 | Right | Top | Bottom]

 

Thanks.  I've been able to change my call.

Peter

 

Leave a Comment

Please sign in to add a comment. Not a member? Join today