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

ippiWarpPerspectiveQuad makes Exception in Purify

Marco_Bartiromo
Beginner
465 Views

Hi,

we use the Intel_IPPI_ippiWarpPerspectiveQuad_8u_C1R of Intel IPP V7.0 with the interpolation IPPI_INTER_CUBIC.

We tested the software with IBM Purify and it shows an exception and memoryleaks (in both debug and release).

If we use another interpolation like IPPI_INTER_LINEAR or IPPI_INTER_LANZCOS we have no exceptions and memoryleaks, so we think this is a bug of the IPPI.

I attached the purify result as a png image.

Best regards,

Marco

Here is a source code example:

#include <string>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
  int iNOL(2048);
  int iNOC(2048);
 
  Ipp8u* pSrc = new Ipp8u[iNOL*iNOC];
  int isrcStep = iNOC;
  IppiSize SrcSize;
  SrcSize.height = iNOL;
  SrcSize.width  = iNOC;

 
  IppiRect srcROI;
  srcROI.x = 0;
  srcROI.y = 0;
  srcROI.width  = iNOC;
  srcROI.height = iNOL;

  double srcQuad[4][2] = {
     {  878,  985 },
     { 1083,  980 },
     { 1083, 1014 },
     {  879, 1019 } };



  Ipp8u* pDst = new Ipp8u[iNOL*iNOC];
  int dstStep = iNOC;
  IppiRect dstROI;
  dstROI.x = 0;
  dstROI.y = 0;  
  dstROI.width = iNOC;
  dstROI.height = iNOL;


  const double dstQuad[4][2] = {
    { 0, 0},
    { iNOC - 1, 0},
    { iNOC - 1, iNOL - 1},
    { 0, iNOL - 1} };

  int interpolation = IPPI_INTER_CUBIC;//IPPI_INTER_NN;//IPPI_INTER_LINEAR;//IPPI_INTER_CUBIC; // IPPI_SMOOTH_EDGE

  // ippiWarpPerspectiveQuad_8u_C1R
  // IPPI_INTER_NN -> OK
  // IPPI_INTER_LINEAR -> No Exception but MemoryLeak
  // IPPI_INTER_CUBIC -> Exception and MemoryLeak
  // IPPI_INTER_SUPER -> OK
  // IPPI_INTER_LANCZOS -> OK

  // ippiWarpPerspective_8u_C1R
  // IPPI_INTER_NN -> OK
  // IPPI_INTER_LINEAR -> OK
  // IPPI_INTER_CUBIC -> Exception and MemoryLeak

  try
  {   
   IppStatus status = ippiWarpPerspectiveQuad_8u_C1R(pSrc, SrcSize, isrcStep, srcROI, srcQuad, pDst, dstStep, dstROI, dstQuad, interpolation);
    cout << "IppStatus: " << status << endl;
  }
  catch (...)
  {
    cerr << "Error :o(" << endl;
  }

  delete [] pDst;
  delete [] pSrc;


    return 0;
}

0 Kudos
5 Replies
Gennady_F_Intel
Moderator
465 Views

i checked the behaviour with the latest version of IPP (7.1 win32/64) with Inspector XE 2013 and I see no problems with code you provided. Please check it with Inspector and let us know the results. 

0 Kudos
SergeyKostrov
Valued Contributor II
465 Views
>>// IPPI_INTER_LINEAR -> No Exception but MemoryLeak >>// IPPI_INTER_CUBIC -> Exception and MemoryLeak >>... >>// IPPI_INTER_CUBIC -> Exception and MemoryLeak Could you post some technical details ( reports ) for these cases? Thanks.
0 Kudos
Marco_Bartiromo
Beginner
465 Views

Hi,

here is the image i wanted to send the first time. :-)

We have only the IPP 7.0 and can only test with this version.

Is there a change in this function between IPP 7.0 and IPP 7.1 ?

Best regards

Marco

0 Kudos
SergeyKostrov
Valued Contributor II
465 Views
The screenshot shows some part of the calls stack and could you post a complete log ( in txt-format, for example )?
0 Kudos
Igor_A_Intel
Employee
465 Views

Marco,

thorought testing of your example hasn't shown any issues in IPP - guess something is wrong with Purify tool. Can you reproduce exceptions/leaks in the real application? This is not the first such pseudo-issue with Purify - guess its logic breaks sometimes on non-trivial asm tricks...

Regards, Igor

0 Kudos
Reply