ok so i got it working here is a the 2D cross correlation in IPP FFT Version
I am also going to work on on the convolution version as well but later. If anybody sees something i missed let me know.
the data is from an image that is 16 bit so the conversion is necessary and FFT quadrants need to be swapped for easy of viewing. This is not normalized.
[cpp]
_inline void IPPSwapQuadrents4(Ipp32f* ptr,IppiSize size)
{
//quads
//1 2
//4 3
int stridef = size.width*sizeof(float);
Ipp32f* temp= (Ipp32f*)ippMalloc(size.width*size.height*sizeof(float));
IppiSize halfs = {size.width/2,size.height/2};
//copy quad 1 to 3
ippiCopy_32f_C1R(ptr,stridef,temp+(halfs.height*size.width+halfs.width),stridef,halfs);
//copy quad 3 to 1
ippiCopy_32f_C1R(ptr+(halfs.height*size.width+halfs.width),stridef,temp,stridef,halfs);
//copy 2 to 4
ippiCopy_32f_C1R(ptr+halfs.width,stridef,temp + halfs.height*size.width,stridef,halfs);
//copy 4 to 2
ippiCopy_32f_C1R(ptr + halfs.height*size.width,stridef,temp+halfs.width,stridef,halfs);
//copy the whole thing back
ippiCopy_32f_C1R(temp,stridef,ptr,stridef,size);
ippFree(temp);
}
IppStatus status;
int stridef = img_size.width*sizeof(float);
Ipp32f* image_data = (Ipp32f*)ippMalloc(stridef*img_size.height);
Ipp32f* image_data2 = (Ipp32f*)ippMalloc(stridef*img_size.height);
ipp_result = (Ipp32f*)ippMalloc(img_size.width*img_size.height*sizeof(float));
status = ippiConvert_16u32f_C1R(ipp_ptr_org,stridei,image_data,stridef,img_size);
IppiRect irect = {0,0,img_size.width,img_size.height};
status = ippiRotateCenter_16u_C1R(ipp_ptr_org2,img_size,stridei,irect,ipp_ptr_org,stridei,irect,180,img_size.width/2,img_size.height/2,IPPI_INTER_LINEAR);
status = ippiConvert_16u32f_C1R(ipp_ptr_org,stridei,image_data2,stridef,img_size);
IppiFFTSpec_R_32f *spec;
status = ippiFFTInitAlloc_R_32f(&spec, 9, 9, IPP_FFT_DIV_INV_BY_N , ippAlgHintAccurate);
status = ippiFFTFwd_RToPack_32f_C1IR(image_data,stridef,spec,0);
status = ippiFFTFwd_RToPack_32f_C1IR(image_data2,stridef,spec,0);
status = ippiMulPackConj_32f_C1IR(image_data,stridef,image_data2,stridef,img_size);
status = ippiFFTInv_PackToR_32f_C1R(image_data2,stridef,ipp_result,stridef,spec,0);
IPPSwapQuadrents4(ipp_result,img_size);
status = ippiFFTFree_R_32f( spec );
[/cpp]