Problem using ippiDCTInv_8x8_16s_I() (IPP 3.0 Linux on PXA255 processor)

Problem using ippiDCTInv_8x8_16s_I() (IPP 3.0 Linux on PXA255 processor)

Hi,
I've met the problem using ippiDCTInv_8x8_16s_I()/ippiDCTInv_8x8_16s() : it returns incorrect result. My environment is IPP 3.0, Linux on PXA255 processor. The source code and results are below. I checked ippiDCTFwd_8x8_16s_I() works correctly (I compared results with my "C" FwdDCT()). What could be the problem?

short __attribute__ ((__aligned__ (32))) shBlock[64];
short __attribute__ ((__aligned__ (32))) shBlock_orig[64];

/* Prepare (fill) shBlock */
...
/* Save original shBlock */
for(i=0; i<64; i++)
shBlock_orig[i]= shBlock[i];
/* Forward DCT (in place) */
ret= ippiDCTFwd_8x8_16s_I( (Ipp16s *) shBlock);
if(ret != ippStsNoErr)
fatal_error(-1 , "IPP error: %d
", ret);
/* Inverse DCT (in place) */
ret= ippiDCTInv_8x8_16s_I( (Ipp16s *) shBlock);
if(ret != ippStsNoErr)
fatal_error(-1 , "IPP error: %d
", ret);
/* Display results */
for(i=0; i<64; i++)
printf("%s [%d]=%d %d
", (shBlock_orig[i] != shBlock[i])? "!!!" : " ", i, shBlock_orig[i], shBlock[i]);

Output:
!!! [0]=140 311
!!! [1]=124 195
!!! [2]=124 52
!!! [3]=132 -43
!!! [4]=130 -32
!!! [5]=139 61
!!! [6]=102 182
!!! [7]=88 253
!!! [8]=140 313
!!! [9]=123 193
!!! [10]=126 47
!!! [11]=132 -38
!!! [12]=134 -32
!!! [13]=134 70
!!! [14]=88 159
!!! [15]=117 280
!!! [16]=143 320
!!! [17]=126 199
!!! [18]=126 43
!!! [19]=133 -43
!!! [20]=134 -28
!!! [21]=138 69
!!! [22]=81 160
!!! [23]=82 244
!!! [24]=148 326
!!! [25]=126 195
!!! [26]=128 46
!!! [27]=136 -38
!!! [28]=137 -31
!!! [29]=134 77
!!! [30]=79 150
!!! [31]=130 293
!!! [32]=147 319
!!! [33]=128 199
!!! [34]=126 65
!!! [35]=137 -39
!!! [36]=138 -41
!!! [37]=145 63
!!! [38]=132 203
!!! [39]=144 328
!!! [40]=147 318
!!! [41]=131 197
!!! [42]=123 69
!!! [43]=138 -40
!!! [44]=137 -41
!!! [45]=140 58
!!! [46]=145 214
!!! [47]=137 322
!!! [48]=142 317
!!! [49]=135 203
!!! [50]=122 64
!!! [51]=137 -43
!!! [52]=140 -39
!!! [53]=138 58
!!! [54]=143 213
!!! [55]=112 298
!!! [56]=140 313
!!! [57]=138 207
!!! [58]=125 67
!!! [59]=137 -40
!!! [60]=140 -44
!!! [61]=140 61
!!! [62]=148 216
!!! [63]=143 331

Message Edited by alexander.ivanov on 05-19-2004 04:02 AM

3 Beiträge / 0 neu
Letzter Beitrag
Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.

Dear Customer,
Please submit this issue into Intel Premier Support at https://premier.intel.com for further assistance.

Thanks,
Ying S
Intel IPP

Hi,

did you look to MPEG4 decoder sample, which is available for PCA255 under linux? It is used DCT functions, so you can look how to call them.

I guess your problem might be connected with implementation details for inverse DCT function. If it used AAN algorithm, you can get restored results after DCT Fwd/Inv only with using Quantization function, because AAN assume some pre-multiplications of DCT coefficients before DCT.These pre-multiplicationsare doingin Quantization functions.

Regards,
Vladimir

Melden Sie sich an, um einen Kommentar zu hinterlassen.