MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / idct248_ref

Function idct248_ref

libavcodec/dct-test.c:384–462  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

382DECLARE_ALIGNED(8, static uint8_t, img_dest1)[64];
383
384static void idct248_ref(uint8_t *dest, int linesize, int16_t *block)
385{
386 static int init;
387 static double c8[8][8];
388 static double c4[4][4];
389 double block1[64], block2[64], block3[64];
390 double s, sum, v;
391 int i, j, k;
392
393 if (!init) {
394 init = 1;
395
396 for(i=0;i<8;i++) {
397 sum = 0;
398 for(j=0;j<8;j++) {
399 s = (i==0) ? sqrt(1.0/8.0) : sqrt(1.0/4.0);
400 c8[i][j] = s * cos(M_PI * i * (j + 0.5) / 8.0);
401 sum += c8[i][j] * c8[i][j];
402 }
403 }
404
405 for(i=0;i<4;i++) {
406 sum = 0;
407 for(j=0;j<4;j++) {
408 s = (i==0) ? sqrt(1.0/4.0) : sqrt(1.0/2.0);
409 c4[i][j] = s * cos(M_PI * i * (j + 0.5) / 4.0);
410 sum += c4[i][j] * c4[i][j];
411 }
412 }
413 }
414
415 /* butterfly */
416 s = 0.5 * sqrt(2.0);
417 for(i=0;i<4;i++) {
418 for(j=0;j<8;j++) {
419 block1[8*(2*i)+j] = (block[8*(2*i)+j] + block[8*(2*i+1)+j]) * s;
420 block1[8*(2*i+1)+j] = (block[8*(2*i)+j] - block[8*(2*i+1)+j]) * s;
421 }
422 }
423
424 /* idct8 on lines */
425 for(i=0;i<8;i++) {
426 for(j=0;j<8;j++) {
427 sum = 0;
428 for(k=0;k<8;k++)
429 sum += c8[k][j] * block1[8*i+k];
430 block2[8*i+j] = sum;
431 }
432 }
433
434 /* idct4 */
435 for(i=0;i<8;i++) {
436 for(j=0;j<4;j++) {
437 /* top */
438 sum = 0;
439 for(k=0;k<4;k++)
440 sum += c4[k][j] * block2[8*(2*k)+i];
441 block3[8*(2*j)+i] = sum;

Callers 1

idct248_errorFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected