Community
cancel
Showing results for 
Search instead for 
Did you mean: 
bungeetux
Beginner
267 Views

ippiErode_1u_C1R_L , minimum example crashing

I did not find an example online, so I figure out by myself how to use it from header file, but
the SIGSEGV recalls me that I need to better understand.

So here is the example and the output , I use compilers_and_libraries_2017.1.132 

#include <iostream>
#include <dlfcn.h>
#include <ippbase.h>
#include <ipptypes.h>
#include <ipp.h>


using std::cout;
using std::endl;

void erodeAlongXAxis(Ipp8u *input,int w, int h, int kernelWidth) {
    IppiSizeL roiSizeL;
    roiSizeL.width = w;
    roiSizeL.height = h;

    IppiSize roiSize;
    roiSize.width = w;
    roiSize.height = h;

    int w8 = w / 8;
    cout << "w8 " << w8 << endl;
    Ipp8u *bitMask = ippsMalloc_8u(w8 * h);
    IppStatus status = ippiGrayToBin_8u1u_C1R(input, w, bitMask, w8, 0, roiSize, 1);
    cout << "ippiGrayToBin_8u1u_C1R status " << status << endl;


    Ipp8u *sliceBitMask = ippsMalloc_8u(w8 * h);

    Ipp8u borderValue[1];
    borderValue[0] = (Ipp8u) 0;

    IppiSizeL maskSize;
    maskSize.width = kernelWidth;
    maskSize.height = 1;

    IppSizeL specSize;
    status = ippiErodeGetSpecSize_L(roiSizeL, maskSize, &specSize);
    cout << "ippiErodeGetSpecSize_L status " << status << endl;

    IppiMorphStateL *pMorphSpec = (IppiMorphStateL *) (ippsMalloc_8u(specSize));

    IppSizeL bufferSize;
    ippiErodeGetBufferSize_L(roiSizeL, maskSize, ipp1u, 1, &bufferSize);
    Ipp8u *pBuffer = ippsMalloc_8u(bufferSize);


    Ipp8u *pMask = ippsMalloc_8u(maskSize.width * maskSize.height);
    for (int i = 0; i < maskSize.width * maskSize.height; i++) {
        pMask = 1;
    }

    status = ippiErodeInit_L(roiSizeL, pMask, maskSize, pMorphSpec);
    cout << "ippiErodeInit_L status " << status << endl;

    status = ippiErode_1u_C1R_L(bitMask , w8, 0, sliceBitMask, w8, 0, roiSizeL, ippBorderConst,
                       borderValue, pMorphSpec, pBuffer);
    cout << "ippiErode_1u_C1R_L status " << status << endl;
}


int main(int argc, char *argv[])
{
    const int w = 16;
    const int h = 5;
    Ipp8u *input = ippsMalloc_8u(w*h);

    for(int i = 0; i < w*h; i++) { // create diagonal stripe
        input = ((i/w)+(i%w)) % (h+4) < h ? 1 : 0;
    }
    for(int y = 0 ; y < h; y++) {
        for(int x = 0; x < w ; x++) {
            cout << "\t" << (0+input[x+y*w]);
        }
        cout << endl;
    }

    erodeAlongXAxis(input, w, h, 3);
}

/home/bgy/work2017/Test/cmake-build-debug/TestErode
    1    1    1    1    1    0    0    0    0    1    1    1    1    1    0    0
    1    1    1    1    0    0    0    0    1    1    1    1    1    0    0    0
    1    1    1    0    0    0    0    1    1    1    1    1    0    0    0    0
    1    1    0    0    0    0    1    1    1    1    1    0    0    0    0    1
    1    0    0    0    0    1    1    1    1    1    0    0    0    0    1    1
w8 2
ippiGrayToBin_8u1u_C1R status 0
ippiErodeGetSpecSize_L status 0
ippiErodeInit_L status 0

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

 

0 Kudos
3 Replies
Jonghak_K_Intel
Employee
267 Views

Hi Benoit, 

 

I tested your code and it went through with no error. 

 

i just commented out #include <dlfcn.h> . 

 

Would you mind trying upgrade your IPP to IPP 2018 U1 and try once more? 

 

thank you

bungeetux
Beginner
267 Views

I have try again with new ipp2018 U1, and there is no more problem.

/home/bgy/work2017/itk-boxes/Thresh_Clean_Peak/cmake-build-debug/TestErode
    1    1    1    1    1    0    0    0    0    1    1    1    1    1    0    0
    1    1    1    1    0    0    0    0    1    1    1    1    1    0    0    0
    1    1    1    0    0    0    0    1    1    1    1    1    0    0    0    0
    1    1    0    0    0    0    1    1    1    1    1    0    0    0    0    1
    1    0    0    0    0    1    1    1    1    1    0    0    0    0    1    1
w8 2
ippiGrayToBin_8u1u_C1R status 0
ippiErodeGetSpecSize_L status 0
ippiErodeInit_L status 0
ippiErode_1u_C1R_L status 0

Process finished with exit code 0

Chao_Y_Intel
Employee
267 Views

thanks for your confirmation.  Feel free to contact us if you have questions. 

regards,
Chao

Reply