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 post / 0 nuovi
Ultimo contenuto
Per informazioni complete sulle ottimizzazioni del compilatore, consultare l'Avviso sull'ottimizzazione

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

Thanks,
Ying S
Intel IPP

Ritratto di Community Admin

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

Accedere per lasciare un commento.