Mercurial > libavcodec.hg
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; |
