I'm trying to run a multi-rate FIR filter in version 8.1 on some data but I am getting strange memory errors. Running it under valgrind shows various invalid reads/writes occurring within the call to ippsFIR_32fc. I have tried both with differing source/destinations as well as a shared source/dest.
Here is basically what I am doing:
int upFactor = 1;
int downFactor = 2;
int phase = 0;
int numTaps = 21;
int dataSize = 1024;
Ipp32fc* pSrcDst = new Ipp32fc[dataSize]; // dataSize * 10 gets rid of memory errors here
ippsFIRMRGetStateSize_32fc(numTaps, upFactor, downFactor, &stateBufSize);
pStateBuf = new Ipp8u[stateBufSize];
ippsFIRMRInit_32fc(&pState, aTaps, numTaps, upFactor, phase, downFactor, phase, NULL, pStateBuf);
ippsFIR_32fc(pSrcDst, pSrcDst, dataSize, pState);
None of the calls return any errors, but valgrind reports many read/write errors and I get segfaults on some systems. The only way I've found to get rid of the valgrind errors is to increase the size of my src/dst array(s) by 10x (9x isn't good enough). Am I missing something? The documentation says that source should be numIters*downFactor and dest should be numIters*upFactor. For whatever reason that is still 5x smaller than what I truly need.