Mercurial > libavcodec.hg
comparison dsputil.c @ 256:4c1cec7c3c7c libavcodec
q-pel mc fixed
author | michaelni |
---|---|
date | Sat, 09 Mar 2002 14:22:21 +0000 |
parents | db20b987c32d |
children | 944632089814 |
comparison
equal
deleted
inserted
replaced
255:db20b987c32d | 256:4c1cec7c3c7c |
---|---|
13 * GNU General Public License for more details. | 13 * GNU General Public License for more details. |
14 * | 14 * |
15 * You should have received a copy of the GNU General Public License | 15 * You should have received a copy of the GNU General Public License |
16 * along with this program; if not, write to the Free Software | 16 * along with this program; if not, write to the Free Software |
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
18 * | |
19 * gmc & q-pel support by Michael Niedermayer <michaelni@gmx.at> | |
18 */ | 20 */ |
19 #include <stdlib.h> | 21 #include <stdlib.h> |
20 #include <stdio.h> | 22 #include <stdio.h> |
21 #include <math.h> | 23 #include <math.h> |
22 #include "avcodec.h" | 24 #include "avcodec.h" |
467 dst[6]= (src1[6] + src2[6] + src3[6] + src4[6] + r)>>2; | 469 dst[6]= (src1[6] + src2[6] + src3[6] + src4[6] + r)>>2; |
468 dst[7]= (src1[7] + src2[7] + src3[7] + src4[7] + r)>>2; | 470 dst[7]= (src1[7] + src2[7] + src3[7] + src4[7] + r)>>2; |
469 dst+=dstStride; | 471 dst+=dstStride; |
470 src1+=srcStride; | 472 src1+=srcStride; |
471 src2+=8; | 473 src2+=8; |
472 src3+=9; | 474 src3+=8; |
473 src4+=8; | 475 src4+=8; |
474 } | 476 } |
475 } | 477 } |
476 | 478 |
477 #define QPEL_MC(r, name) \ | 479 #define QPEL_MC(r, name) \ |
518 avg2_block(dst, src+srcStride, half, dstStride, srcStride, 1-r);\ | 520 avg2_block(dst, src+srcStride, half, dstStride, srcStride, 1-r);\ |
519 }\ | 521 }\ |
520 static void qpel_mc11_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ | 522 static void qpel_mc11_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ |
521 {\ | 523 {\ |
522 UINT8 halfH[72];\ | 524 UINT8 halfH[72];\ |
523 UINT8 halfV[72];\ | 525 UINT8 halfV[64];\ |
524 UINT8 halfHV[64];\ | 526 UINT8 halfHV[64];\ |
525 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ | 527 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ |
526 qpel_v_lowpass(halfV, src, 9, srcStride, 9, 128-r);\ | 528 qpel_v_lowpass(halfV, src, 8, srcStride, 8, 128-r);\ |
527 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ | 529 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ |
528 avg4_block(dst, src, halfH, halfV, halfHV, dstStride, srcStride, 2-r);\ | 530 avg4_block(dst, src, halfH, halfV, halfHV, dstStride, srcStride, 2-r);\ |
529 }\ | 531 }\ |
530 static void qpel_mc31_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ | 532 static void qpel_mc31_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ |
531 {\ | 533 {\ |
532 UINT8 halfH[72];\ | 534 UINT8 halfH[72];\ |
533 UINT8 halfV[72];\ | 535 UINT8 halfV[64];\ |
534 UINT8 halfHV[64];\ | 536 UINT8 halfHV[64];\ |
535 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ | 537 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ |
536 qpel_v_lowpass(halfV, src, 9, srcStride, 9, 128-r);\ | 538 qpel_v_lowpass(halfV, src+1, 8, srcStride, 8, 128-r);\ |
537 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ | 539 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ |
538 avg4_block(dst, src+1, halfH, halfV, halfHV, dstStride, srcStride, 2-r);\ | 540 avg4_block(dst, src+1, halfH, halfV, halfHV, dstStride, srcStride, 2-r);\ |
539 }\ | 541 }\ |
540 static void qpel_mc13_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ | 542 static void qpel_mc13_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ |
541 {\ | 543 {\ |
542 UINT8 halfH[72];\ | 544 UINT8 halfH[72];\ |
543 UINT8 halfV[72];\ | 545 UINT8 halfV[64];\ |
544 UINT8 halfHV[64];\ | 546 UINT8 halfHV[64];\ |
545 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ | 547 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ |
546 qpel_v_lowpass(halfV, src, 9, srcStride, 9, 128-r);\ | 548 qpel_v_lowpass(halfV, src, 8, srcStride, 8, 128-r);\ |
547 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ | 549 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ |
548 avg4_block(dst, src+srcStride, halfH, halfV, halfHV, dstStride, srcStride, 2-r);\ | 550 avg4_block(dst, src+srcStride, halfH+8, halfV, halfHV, dstStride, srcStride, 2-r);\ |
549 }\ | 551 }\ |
550 static void qpel_mc33_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ | 552 static void qpel_mc33_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ |
551 {\ | 553 {\ |
552 UINT8 halfH[72];\ | 554 UINT8 halfH[72];\ |
553 UINT8 halfV[72];\ | 555 UINT8 halfV[64];\ |
554 UINT8 halfHV[64];\ | 556 UINT8 halfHV[64];\ |
555 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ | 557 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ |
556 qpel_v_lowpass(halfV, src, 9, srcStride, 9, 128-r);\ | 558 qpel_v_lowpass(halfV, src+1, 8, srcStride, 8, 128-r);\ |
557 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ | 559 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ |
558 avg4_block(dst, src+srcStride+1, halfH, halfV, halfHV, dstStride, srcStride, 2-r);\ | 560 avg4_block(dst, src+srcStride+1, halfH+8, halfV, halfHV, dstStride, srcStride, 2-r);\ |
559 }\ | 561 }\ |
560 static void qpel_mc21_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ | 562 static void qpel_mc21_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ |
561 {\ | 563 {\ |
562 UINT8 halfH[72];\ | 564 UINT8 halfH[72];\ |
563 UINT8 halfHV[64];\ | 565 UINT8 halfHV[64];\ |
574 avg2_block(dst, halfH+8, halfHV, dstStride, 8, 1-r);\ | 576 avg2_block(dst, halfH+8, halfHV, dstStride, 8, 1-r);\ |
575 }\ | 577 }\ |
576 static void qpel_mc12_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ | 578 static void qpel_mc12_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ |
577 {\ | 579 {\ |
578 UINT8 halfH[72];\ | 580 UINT8 halfH[72];\ |
579 UINT8 halfV[72];\ | 581 UINT8 halfV[64];\ |
580 UINT8 halfHV[64];\ | 582 UINT8 halfHV[64];\ |
581 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ | 583 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ |
582 qpel_v_lowpass(halfV, src, 9, srcStride, 9, 128-r);\ | 584 qpel_v_lowpass(halfV, src, 8, srcStride, 8, 128-r);\ |
583 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ | 585 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ |
584 avg2_block(dst, halfV, halfHV, dstStride, 9, 1-r);\ | 586 avg2_block(dst, halfV, halfHV, dstStride, 8, 1-r);\ |
585 }\ | 587 }\ |
586 static void qpel_mc32_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ | 588 static void qpel_mc32_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ |
587 {\ | 589 {\ |
588 UINT8 halfH[72];\ | 590 UINT8 halfH[72];\ |
589 UINT8 halfV[72];\ | 591 UINT8 halfV[64];\ |
590 UINT8 halfHV[64];\ | 592 UINT8 halfHV[64];\ |
591 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ | 593 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ |
592 qpel_v_lowpass(halfV, src, 9, srcStride, 9, 128-r);\ | 594 qpel_v_lowpass(halfV, src+1, 8, srcStride, 8, 128-r);\ |
593 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ | 595 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 128-r);\ |
594 avg2_block(dst, halfV+1, halfHV, dstStride, 9, 1-r);\ | 596 avg2_block(dst, halfV, halfHV, dstStride, 8, 1-r);\ |
595 }\ | 597 }\ |
596 static void qpel_mc22_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ | 598 static void qpel_mc22_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\ |
597 {\ | 599 {\ |
598 UINT8 halfH[72];\ | 600 UINT8 halfH[72];\ |
599 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ | 601 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 128-r);\ |