Mercurial > libavcodec.hg
comparison dct-test.c @ 722:ff90043f4a2d libavcodec
in fact IDCT248 needs to be normalized as I suspected
author | bellard |
---|---|
date | Thu, 03 Oct 2002 21:03:59 +0000 |
parents | 409bdaa0b964 |
children | 0c32f81b42b2 |
comparison
equal
deleted
inserted
replaced
721:71f669e9f633 | 722:ff90043f4a2d |
---|---|
297 } | 297 } |
298 } | 298 } |
299 } | 299 } |
300 | 300 |
301 /* butterfly */ | 301 /* butterfly */ |
302 s = 0.5 * sqrt(2.0); | |
302 for(i=0;i<4;i++) { | 303 for(i=0;i<4;i++) { |
303 for(j=0;j<8;j++) { | 304 for(j=0;j<8;j++) { |
304 block1[8*(2*i)+j] = (block[8*(2*i)+j] + block[8*(2*i+1)+j]) * 0.5; | 305 block1[8*(2*i)+j] = (block[8*(2*i)+j] + block[8*(2*i+1)+j]) * s; |
305 block1[8*(2*i+1)+j] = (block[8*(2*i)+j] - block[8*(2*i+1)+j]) * 0.5; | 306 block1[8*(2*i+1)+j] = (block[8*(2*i)+j] - block[8*(2*i+1)+j]) * s; |
306 } | 307 } |
307 } | 308 } |
308 | 309 |
309 /* idct8 on lines */ | 310 /* idct8 on lines */ |
310 for(i=0;i<8;i++) { | 311 for(i=0;i<8;i++) { |
334 } | 335 } |
335 | 336 |
336 /* clamp and store the result */ | 337 /* clamp and store the result */ |
337 for(i=0;i<8;i++) { | 338 for(i=0;i<8;i++) { |
338 for(j=0;j<8;j++) { | 339 for(j=0;j<8;j++) { |
339 v = block3[8*i+j] + 128.0; | 340 v = block3[8*i+j]; |
340 if (v < 0) | 341 if (v < 0) |
341 v = 0; | 342 v = 0; |
342 else if (v > 255) | 343 else if (v > 255) |
343 v = 255; | 344 v = 255; |
344 dest[i * linesize + j] = (int)rint(v); | 345 dest[i * linesize + j] = (int)rint(v); |
355 | 356 |
356 /* just one test to see if code is correct (precision is less | 357 /* just one test to see if code is correct (precision is less |
357 important here) */ | 358 important here) */ |
358 err_max = 0; | 359 err_max = 0; |
359 for(it=0;it<NB_ITS;it++) { | 360 for(it=0;it<NB_ITS;it++) { |
360 for(i=0;i<64;i++) | |
361 block1[i] = (random() % 512) - 256; | |
362 | 361 |
362 /* XXX: use forward transform to generate values */ | |
363 for(i=0;i<64;i++) | |
364 block1[i] = (random() % 256) - 128; | |
365 block1[0] += 1024; | |
366 | |
363 for(i=0; i<64; i++) | 367 for(i=0; i<64; i++) |
364 block[i]= block1[i]; | 368 block[i]= block1[i]; |
365 idct248_ref(img_dest1, 8, block); | 369 idct248_ref(img_dest1, 8, block); |
366 | 370 |
371 for(i=0; i<64; i++) | |
372 block[i]= block1[i]; | |
373 idct248_put(img_dest, 8, block); | |
374 | |
375 for(i=0;i<64;i++) { | |
376 v = abs((int)img_dest[i] - (int)img_dest1[i]); | |
377 if (v == 255) | |
378 printf("%d %d\n", img_dest[i], img_dest1[i]); | |
379 if (v > err_max) | |
380 err_max = v; | |
381 } | |
367 #if 0 | 382 #if 0 |
368 printf("ref=\n"); | 383 printf("ref=\n"); |
369 for(i=0;i<8;i++) { | 384 for(i=0;i<8;i++) { |
370 int j; | 385 int j; |
371 for(j=0;j<8;j++) { | 386 for(j=0;j<8;j++) { |
372 printf(" %3d", img_dest1[i*8+j]); | 387 printf(" %3d", img_dest1[i*8+j]); |
373 } | 388 } |
374 printf("\n"); | 389 printf("\n"); |
375 } | 390 } |
376 #endif | |
377 | 391 |
378 for(i=0; i<64; i++) | |
379 block[i]= block1[i]; | |
380 idct248_put(img_dest, 8, block); | |
381 | |
382 #if 0 | |
383 printf("out=\n"); | 392 printf("out=\n"); |
384 for(i=0;i<8;i++) { | 393 for(i=0;i<8;i++) { |
385 int j; | 394 int j; |
386 for(j=0;j<8;j++) { | 395 for(j=0;j<8;j++) { |
387 printf(" %3d", img_dest[i*8+j]); | 396 printf(" %3d", img_dest[i*8+j]); |
388 } | 397 } |
389 printf("\n"); | 398 printf("\n"); |
390 } | 399 } |
391 #endif | 400 #endif |
392 for(i=0;i<64;i++) { | |
393 v = abs(img_dest[i] - img_dest1[i]); | |
394 if (v > err_max) | |
395 err_max = v; | |
396 } | |
397 } | 401 } |
398 printf("%s %s: err_inf=%d\n", | 402 printf("%s %s: err_inf=%d\n", |
399 1 ? "IDCT248" : "DCT248", | 403 1 ? "IDCT248" : "DCT248", |
400 name, err_max); | 404 name, err_max); |
401 | 405 |