Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

ippiMorphOpenBorder_32f_C1R

giacomo_c_
Beginner
870 Views

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

0 Kudos
8 Replies
Gennady_F_Intel
Moderator
870 Views

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

 

0 Kudos
Gennady_F_Intel
Moderator
870 Views

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

0 Kudos
giacomo_c_
Beginner
870 Views

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

0 Kudos
pvonkaenel
New Contributor III
870 Views

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

0 Kudos
Andrey_B_Intel
Employee
870 Views

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.

0 Kudos
pvonkaenel
New Contributor III
870 Views

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

0 Kudos
Andrey_B_Intel
Employee
870 Views

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]

 

0 Kudos
pvonkaenel
New Contributor III
870 Views

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

Peter

 

0 Kudos
Reply