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

ippiGaussianBorder now only supports const borders

Rob_Ottenhoff
New Contributor I
537 Views

Hi,

I'm switching to the new Composer 2015 package containing IPP 8.2. I ran into a 'bug' straight away. A crucial part of my application suddenly didn't work anymore. Cause: see the title. I use mirrored borders...:-(. I cannot find any information on this change, and I am also worried that there will be more of this kind of surprises. Is there a list of functions of which the functionality has been limited?

Btw. I am worried about the future of IPP. I seems Intel is planning to deprecate the about the whole product. I also think that Intel should supply examples of how to code alternatives for deprecated functions in the documentation.

Regards,

Rob

 

 

0 Kudos
6 Replies
Igor_A_Intel
Employee
537 Views

Hi Rob,

this function supports several border types - in mem, replicate and const. Mirror border is not supported by any other IPP function with border suffix. Is such border support critical for you? Any border type except of real border in mem generates some synthetic pixels in the output image. Your concerns on the whole product deprecation are not based on the real state of things.

regards, Igor

0 Kudos
Rob_Ottenhoff
New Contributor I
537 Views

Hi Igor,

You got me there, I looked in the documentation of the GaussianBorder function instead of the GaussBorder function. What remains is that my function which has worked perfectly fine for years with different IPP versions, the latest being 7.0.6. suddenly fails. The parameters are absolutely correct, my alternative( the opencv implementation) also works fine with the same input.The 8.2 implementation gives an result with only zeros. This than seems a bug.

Regards,

Rob

0 Kudos
Gennady_F_Intel
Moderator
537 Views

Rob,

how we can reproduce the problem? Can you prepare the example and check how it will work on our side?

--Gennady

0 Kudos
Rob_Ottenhoff
New Contributor I
537 Views

Hi Gennady,

Here is a silly VS2013 program that replicates the problem:

Btw: the filter does not return zeros, but probably does nothing: the destination is filled with all -431602080's. But it does not give an error.ippBorderConst will work correctly.

int N = 4;

void Show(Ipp32f pBuf[4*4])
{
    for (int i = 0; i < N*N; ++i)
    {
        printf("%f, ", pBuf);
    }
    printf("\n");
}

int _tmain(int argc, _TCHAR* argv[])
{
    Ipp32f pSrc[4*4];
    Ipp32f pDst[4*4];
    int step = N * sizeof(Ipp32f);

    IppiSize roiSize = { N, N };
    IppStatus stat = ippStsNoErr;
    int kernelSize = 7;
    for (int i = 0; i < N*N; ++i)
    {
        pSrc = 1;
    }
    Show(pSrc);

    int bufSize;
    stat = ippiFilterGaussGetBufferSize_32f_C1R(roiSize, 7, &bufSize);
    Ipp8u* pBuf = new Ipp8u[bufSize];
    if (stat != ippStsNoErr)
    {
        printf("  ERROR calculating buffer size !!! \n");
        return 1;
    }
    stat = ippiFilterGaussBorder_32f_C1R(pSrc, step, pDst, step, roiSize,
                                         kernelSize, 5.0f,
                                         ippBorderMirror, 0, pBuf);

    if (stat != ippStsNoErr)
    {
        printf("  ERROR applying filter !!! \n");
        return 1;
    }
    Show(pDst);
    
    delete pBuf;
    return 0;
}

 

0 Kudos
Gennady_F_Intel
Moderator
537 Views

thanks for the example - we will  check 

0 Kudos
Gennady_F_Intel
Moderator
537 Views

yes, the issue is reproduced on out side. it's escalated. we will let you know when the problem would be fixed.

0 Kudos
Reply