comparison libpostproc/postprocess_template.c @ 334:3912b37ba121 libavcodec

x1 deblocking filter bugfix
author michael
date Mon, 22 Apr 2002 15:53:24 +0000
parents 8b3e70afa2ba
children ff766a367974
comparison
equal deleted inserted replaced
333:8aa87f1dfc52 334:3912b37ba121
501 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW) 501 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
502 src+= stride*3; 502 src+= stride*3;
503 503
504 asm volatile( 504 asm volatile(
505 "pxor %%mm7, %%mm7 \n\t" // 0 505 "pxor %%mm7, %%mm7 \n\t" // 0
506 // "movq "MANGLE(b80)", %%mm6 \n\t" // MIN_SIGNED_BYTE
507 "leal (%0, %1), %%eax \n\t" 506 "leal (%0, %1), %%eax \n\t"
508 "leal (%%eax, %1, 4), %%ebx \n\t" 507 "leal (%%eax, %1, 4), %%ebx \n\t"
509 // 0 1 2 3 4 5 6 7 8 9 508 // 0 1 2 3 4 5 6 7 8 9
510 // %0 eax eax+%1 eax+2%1 %0+4%1 ebx ebx+%1 ebx+2%1 %0+8%1 ebx+4%1 509 // %0 eax eax+%1 eax+2%1 %0+4%1 ebx ebx+%1 ebx+2%1 %0+8%1 ebx+4%1
511 "movq (%%eax, %1, 2), %%mm0 \n\t" // line 3 510 "movq (%%eax, %1, 2), %%mm0 \n\t" // line 3
513 "movq %%mm1, %%mm2 \n\t" // line 4 512 "movq %%mm1, %%mm2 \n\t" // line 4
514 "psubusb %%mm0, %%mm1 \n\t" 513 "psubusb %%mm0, %%mm1 \n\t"
515 "psubusb %%mm2, %%mm0 \n\t" 514 "psubusb %%mm2, %%mm0 \n\t"
516 "por %%mm1, %%mm0 \n\t" // |l2 - l3| 515 "por %%mm1, %%mm0 \n\t" // |l2 - l3|
517 "movq (%%ebx), %%mm3 \n\t" // line 5 516 "movq (%%ebx), %%mm3 \n\t" // line 5
518 "movq (%%ebx, %1), %%mm4 \n\t" // line 6 517 "movq (%%ebx, %1), %%mm4 \n\t" // line 6
519 "movq %%mm3, %%mm5 \n\t" // line 5 518 "movq %%mm3, %%mm5 \n\t" // line 5
520 "psubusb %%mm4, %%mm3 \n\t" 519 "psubusb %%mm4, %%mm3 \n\t"
521 "psubusb %%mm5, %%mm4 \n\t" 520 "psubusb %%mm5, %%mm4 \n\t"
522 "por %%mm4, %%mm3 \n\t" // |l5 - l6| 521 "por %%mm4, %%mm3 \n\t" // |l5 - l6|
523 PAVGB(%%mm3, %%mm0) // (|l2 - l3| + |l5 - l6|)/2 522 PAVGB(%%mm3, %%mm0) // (|l2 - l3| + |l5 - l6|)/2
527 "pcmpeqb %%mm7, %%mm2 \n\t" // (l4 - l5) <= 0 ? -1 : 0 526 "pcmpeqb %%mm7, %%mm2 \n\t" // (l4 - l5) <= 0 ? -1 : 0
528 "psubusb %%mm1, %%mm5 \n\t" 527 "psubusb %%mm1, %%mm5 \n\t"
529 "por %%mm5, %%mm4 \n\t" // |l4 - l5| 528 "por %%mm5, %%mm4 \n\t" // |l4 - l5|
530 "psubusb %%mm0, %%mm4 \n\t" //d = MAX(0, |l4-l5| - (|l2-l3| + |l5-l6|)/2) 529 "psubusb %%mm0, %%mm4 \n\t" //d = MAX(0, |l4-l5| - (|l2-l3| + |l5-l6|)/2)
531 "movq %%mm4, %%mm3 \n\t" // d 530 "movq %%mm4, %%mm3 \n\t" // d
532 "psubusb "MANGLE(pQPb)", %%mm4 \n\t" 531 "movq "MANGLE(pQPb)", %%mm0 \n\t"
532 "paddusb %%mm0, %%mm0 \n\t"
533 "psubusb %%mm0, %%mm4 \n\t"
533 "pcmpeqb %%mm7, %%mm4 \n\t" // d <= QP ? -1 : 0 534 "pcmpeqb %%mm7, %%mm4 \n\t" // d <= QP ? -1 : 0
534 "psubusb "MANGLE(b01)", %%mm3 \n\t" 535 "psubusb "MANGLE(b01)", %%mm3 \n\t"
535 "pand %%mm4, %%mm3 \n\t" // d <= QP ? d : 0 536 "pand %%mm4, %%mm3 \n\t" // d <= QP ? d : 0
536 537
537 PAVGB(%%mm7, %%mm3) // d/2 538 PAVGB(%%mm7, %%mm3) // d/2
604 int c= src[l5] - src[l6]; 605 int c= src[l5] - src[l6];
605 606
606 int d= ABS(b) - ((ABS(a) + ABS(c))>>1); 607 int d= ABS(b) - ((ABS(a) + ABS(c))>>1);
607 d= MAX(d, 0); 608 d= MAX(d, 0);
608 609
609 if(d < QP) 610 if(d < QP*2)
610 { 611 {
611 int v = d * SIGN(-b); 612 int v = d * SIGN(-b);
612 613
613 src[l2] +=v>>3; 614 src[l2] +=v>>3;
614 src[l3] +=v>>2; 615 src[l3] +=v>>2;