Squashed commit of the following: commit 26be4c66686d2d75ba1eb381ae562d30474429b2 Merge: 91bde82 8df0566 Author: Licai Guo <guolicai@gmail.com> Date: Wed Jan 8 16:56:49 2014 -0800 Merge remote-tracking branch 'upstream/master' into move_to_common Conflicts: codec/common/targets.mk codec/console/dec/targets.mk codec/decoder/targets.mk codec/encoder/targets.mk codec/processing/targets.mk commit 91bde8209dad40eaa0b26cc75467e4ce52b4c8ae Merge: c827054 cc2ffee Author: Licai Guo <guolicai@gmail.com> Date: Tue Jan 7 20:16:11 2014 -0800 Merge remote-tracking branch 'upstream/master' into move_to_common commit c8270543fab8e40cb4aebf62d7646068afe19484 Author: Licai Guo <guolicai@gmail.com> Date: Mon Jan 6 19:12:39 2014 -0800 enable WelsScan4x4DcAc_ssse3 commit c8d2823d54e54cab146098302441ef44a4638382 Author: Licai Guo <guolicai@gmail.com> Date: Mon Jan 6 18:46:06 2014 -0800 remove trailing white spaces commit 39866a9cf54db6120aabd6a01afd4aedbead8af0 Author: Licai Guo <guolicai@gmail.com> Date: Mon Jan 6 18:06:10 2014 -0800 move common code(deblocking and cpu) to common, rename decoder's Intra-prediction functions prefix.
Showing the changes to codec/decoder/core/src/deblocking.cpp (1 of 25 files). Show all
Unified · Split
| @@ -618,208 +618,6 @@ void_t WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32 · 617 unmodified lines | |||
| 618 | } | 618 | } |
| 619 | } | 619 | } |
| 620 | 620 | ||
| 621 | // C code only | ||
| 622 | void_t DeblockLumaLt4_c (uint8_t* pPix, int32_t iStrideX, int32_t iStrideY, int32_t iAlpha, int32_t iBeta, | ||
| 623 | int8_t* pTc) { | ||
| 624 | for (int32_t i = 0; i < 16; i++) { | ||
| 625 | int32_t iTc0 = pTc[i >> 2]; | ||
| 626 | if (iTc0 >= 0) { | ||
| 627 | int32_t p0 = pPix[-iStrideX]; | ||
| 628 | int32_t p1 = pPix[-2 * iStrideX]; | ||
| 629 | int32_t p2 = pPix[-3 * iStrideX]; | ||
| 630 | int32_t q0 = pPix[0]; | ||
| 631 | int32_t q1 = pPix[iStrideX]; | ||
| 632 | int32_t q2 = pPix[2 * iStrideX]; | ||
| 633 | bool_t bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha; | ||
| 634 | bool_t bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta; | ||
| 635 | bool_t bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta; | ||
| 636 | int32_t iTc = iTc0; | ||
| 637 | if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) { | ||
| 638 | bool_t bDetaP2P0 = WELS_ABS (p2 - p0) < iBeta; | ||
| 639 | bool_t bDetaQ2Q0 = WELS_ABS (q2 - q0) < iBeta; | ||
| 640 | if (bDetaP2P0) { | ||
| 641 | pPix[-2 * iStrideX] = p1 + WELS_CLIP3 ((p2 + ((p0 + q0 + 1) >> 1) - (p1 << 1)) >> 1, -iTc0, iTc0); | ||
| 642 | iTc++; | ||
| 643 | } | ||
| 644 | if (bDetaQ2Q0) { | ||
| 645 | pPix[iStrideX] = q1 + WELS_CLIP3 ((q2 + ((p0 + q0 + 1) >> 1) - (q1 << 1)) >> 1, -iTc0, iTc0); | ||
| 646 | iTc++; | ||
| 647 | } | ||
| 648 | int32_t iDeta = WELS_CLIP3 ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3, -iTc, iTc); | ||
| 649 | pPix[-iStrideX] = WELS_CLIP1 (p0 + iDeta); /* p0' */ | ||
| 650 | pPix[0] = WELS_CLIP1 (q0 - iDeta); /* q0' */ | ||
| 651 | } | ||
| 652 | } | ||
| 653 | pPix += iStrideY; | ||
| 654 | } | ||
| 655 | } | ||
| 656 | void_t DeblockLumaEq4_c (uint8_t* pPix, int32_t iStrideX, int32_t iStrideY, int32_t iAlpha, int32_t iBeta) { | ||
| 657 | int32_t p0, p1, p2, q0, q1, q2; | ||
| 658 | int32_t iDetaP0Q0; | ||
| 659 | bool_t bDetaP1P0, bDetaQ1Q0; | ||
| 660 | for (int32_t i = 0; i < 16; i++) { | ||
| 661 | p0 = pPix[-iStrideX]; | ||
| 662 | p1 = pPix[-2 * iStrideX]; | ||
| 663 | p2 = pPix[-3 * iStrideX]; | ||
| 664 | q0 = pPix[0]; | ||
| 665 | q1 = pPix[iStrideX]; | ||
| 666 | q2 = pPix[2 * iStrideX]; | ||
| 667 | iDetaP0Q0 = WELS_ABS (p0 - q0); | ||
| 668 | bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta; | ||
| 669 | bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta; | ||
| 670 | if ((iDetaP0Q0 < iAlpha) && bDetaP1P0 && bDetaQ1Q0) { | ||
| 671 | if (iDetaP0Q0 < ((iAlpha >> 2) + 2)) { | ||
| 672 | bool_t bDetaP2P0 = WELS_ABS (p2 - p0) < iBeta; | ||
| 673 | bool_t bDetaQ2Q0 = WELS_ABS (q2 - q0) < iBeta; | ||
| 674 | if (bDetaP2P0) { | ||
| 675 | const int32_t p3 = pPix[-4 * iStrideX]; | ||
| 676 | pPix[-iStrideX] = (p2 + (p1 << 1) + (p0 << 1) + (q0 << 1) + q1 + 4) >> 3; //p0 | ||
| 677 | pPix[-2 * iStrideX] = (p2 + p1 + p0 + q0 + 2) >> 2; //p1 | ||
| 678 | pPix[-3 * iStrideX] = ((p3 << 1) + p2 + (p2 << 1) + p1 + p0 + q0 + 4) >> 3;//p2 | ||
| 679 | } else { | ||
| 680 | pPix[-1 * iStrideX] = ((p1 << 1) + p0 + q1 + 2) >> 2; //p0 | ||
| 681 | } | ||
| 682 | if (bDetaQ2Q0) { | ||
| 683 | const int32_t q3 = pPix[3 * iStrideX]; | ||
| 684 | pPix[0] = (p1 + (p0 << 1) + (q0 << 1) + (q1 << 1) + q2 + 4) >> 3; //q0 | ||
| 685 | pPix[iStrideX] = (p0 + q0 + q1 + q2 + 2) >> 2; //q1 | ||
| 686 | pPix[2 * iStrideX] = ((q3 << 1) + q2 + (q2 << 1) + q1 + q0 + p0 + 4) >> 3;//q2 | ||
| 687 | } else { | ||
| 688 | pPix[0] = ((q1 << 1) + q0 + p1 + 2) >> 2; //q0 | ||
| 689 | } | ||
| 690 | } else { | ||
| 691 | pPix[-iStrideX] = ((p1 << 1) + p0 + q1 + 2) >> 2; //p0 | ||
| 692 | pPix[ 0] = ((q1 << 1) + q0 + p1 + 2) >> 2; //q0 | ||
| 693 | } | ||
| 694 | } | ||
| 695 | pPix += iStrideY; | ||
| 696 | } | ||
| 697 | } | ||
| 698 | void_t DeblockLumaLt4V_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta, int8_t* tc) { | ||
| 699 | DeblockLumaLt4_c (pPix, iStride, 1, iAlpha, iBeta, tc); | ||
| 700 | } | ||
| 701 | void_t DeblockLumaLt4H_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta, int8_t* tc) { | ||
| 702 | DeblockLumaLt4_c (pPix, 1, iStride, iAlpha, iBeta, tc); | ||
| 703 | } | ||
| 704 | void_t DeblockLumaEq4V_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta) { | ||
| 705 | DeblockLumaEq4_c (pPix, iStride, 1, iAlpha, iBeta); | ||
| 706 | } | ||
| 707 | void_t DeblockLumaEq4H_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta) { | ||
| 708 | DeblockLumaEq4_c (pPix, 1, iStride, iAlpha, iBeta); | ||
| 709 | } | ||
| 710 | void_t DeblockChromaLt4_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStrideX, int32_t iStrideY, int32_t iAlpha, | ||
| 711 | int32_t iBeta, int8_t* pTc) { | ||
| 712 | int32_t p0, p1, q0, q1, iDeta; | ||
| 713 | bool_t bDetaP0Q0, bDetaP1P0, bDetaQ1Q0; | ||
| 714 | |||
| 715 | for (int32_t i = 0; i < 8; i++) { | ||
| 716 | int32_t iTc0 = pTc[i >> 1]; | ||
| 717 | if (iTc0 > 0) { | ||
| 718 | p0 = pPixCb[-iStrideX]; | ||
| 719 | p1 = pPixCb[-2 * iStrideX]; | ||
| 720 | q0 = pPixCb[0]; | ||
| 721 | q1 = pPixCb[iStrideX]; | ||
| 722 | |||
| 723 | bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha; | ||
| 724 | bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta; | ||
| 725 | bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta; | ||
| 726 | if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) { | ||
| 727 | iDeta = WELS_CLIP3 ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3, -iTc0, iTc0); | ||
| 728 | pPixCb[-iStrideX] = WELS_CLIP1 (p0 + iDeta); /* p0' */ | ||
| 729 | pPixCb[0] = WELS_CLIP1 (q0 - iDeta); /* q0' */ | ||
| 730 | } | ||
| 731 | |||
| 732 | |||
| 733 | p0 = pPixCr[-iStrideX]; | ||
| 734 | p1 = pPixCr[-2 * iStrideX]; | ||
| 735 | q0 = pPixCr[0]; | ||
| 736 | q1 = pPixCr[iStrideX]; | ||
| 737 | |||
| 738 | bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha; | ||
| 739 | bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta; | ||
| 740 | bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta; | ||
| 741 | |||
| 742 | if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) { | ||
| 743 | iDeta = WELS_CLIP3 ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3, -iTc0, iTc0); | ||
| 744 | pPixCr[-iStrideX] = WELS_CLIP1 (p0 + iDeta); /* p0' */ | ||
| 745 | pPixCr[0] = WELS_CLIP1 (q0 - iDeta); /* q0' */ | ||
| 746 | } | ||
| 747 | } | ||
| 748 | pPixCb += iStrideY; | ||
| 749 | pPixCr += iStrideY; | ||
| 750 | } | ||
| 751 | } | ||
| 752 | void_t DeblockChromaEq4_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStrideX, int32_t iStrideY, int32_t iAlpha, | ||
| 753 | int32_t iBeta) { | ||
| 754 | int32_t i = 0, d = 0; | ||
| 755 | int32_t p0, p1, q0, q1; | ||
| 756 | bool_t bDetaP0Q0, bDetaP1P0, bDetaQ1Q0; | ||
| 757 | for (int32_t i = 0; i < 8; i++) { | ||
| 758 | //cb | ||
| 759 | p0 = pPixCb[-iStrideX]; | ||
| 760 | p1 = pPixCb[-2 * iStrideX]; | ||
| 761 | q0 = pPixCb[0]; | ||
| 762 | q1 = pPixCb[iStrideX]; | ||
| 763 | bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha; | ||
| 764 | bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta; | ||
| 765 | bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta; | ||
| 766 | if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) { | ||
| 767 | pPixCb[-iStrideX] = ((p1 << 1) + p0 + q1 + 2) >> 2; /* p0' */ | ||
| 768 | pPixCb[0] = ((q1 << 1) + q0 + p1 + 2) >> 2; /* q0' */ | ||
| 769 | } | ||
| 770 | |||
| 771 | //cr | ||
| 772 | p0 = pPixCr[-iStrideX]; | ||
| 773 | p1 = pPixCr[-2 * iStrideX]; | ||
| 774 | q0 = pPixCr[0]; | ||
| 775 | q1 = pPixCr[iStrideX]; | ||
| 776 | bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha; | ||
| 777 | bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta; | ||
| 778 | bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta; | ||
| 779 | if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) { | ||
| 780 | pPixCr[-iStrideX] = ((p1 << 1) + p0 + q1 + 2) >> 2; /* p0' */ | ||
| 781 | pPixCr[0] = ((q1 << 1) + q0 + p1 + 2) >> 2; /* q0' */ | ||
| 782 | } | ||
| 783 | pPixCr += iStrideY; | ||
| 784 | pPixCb += iStrideY; | ||
| 785 | } | ||
| 786 | } | ||
| 787 | void_t DeblockChromaLt4V_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, int32_t iAlpha, int32_t iBeta, | ||
| 788 | int8_t* tc) { | ||
| 789 | DeblockChromaLt4_c (pPixCb, pPixCr, iStride, 1, iAlpha, iBeta, tc); | ||
| 790 | } | ||
| 791 | void_t DeblockChromaLt4H_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, int32_t iAlpha, int32_t iBeta, | ||
| 792 | int8_t* tc) { | ||
| 793 | DeblockChromaLt4_c (pPixCb, pPixCr, 1, iStride, iAlpha, iBeta, tc); | ||
| 794 | } | ||
| 795 | void_t DeblockChromaEq4V_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, int32_t iAlpha, int32_t iBeta) { | ||
| 796 | DeblockChromaEq4_c (pPixCb, pPixCr, iStride, 1, iAlpha, iBeta); | ||
| 797 | } | ||
| 798 | void_t DeblockChromaEq4H_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, int32_t iAlpha, int32_t iBeta) { | ||
| 799 | DeblockChromaEq4_c (pPixCb, pPixCr, 1, iStride, iAlpha, iBeta); | ||
| 800 | } | ||
| 801 | |||
| 802 | #ifdef X86_ASM | ||
| 803 | extern "C" { | ||
| 804 | void DeblockLumaLt4H_sse2 (uint8_t* pPixY, int32_t iStride, int32_t iAlpha, int32_t iBeta, int8_t* pTc) { | ||
| 805 | FORCE_STACK_ALIGN_1D (uint8_t, uiBuf, 16 * 8, 16); | ||
| 806 | |||
| 807 | DeblockLumaTransposeH2V_sse2 (pPixY - 4, iStride, &uiBuf[0]); | ||
| 808 | DeblockLumaLt4V_sse2 (&uiBuf[4 * 16], 16, iAlpha, iBeta, pTc); | ||
| 809 | DeblockLumaTransposeV2H_sse2 (pPixY - 4, iStride, &uiBuf[0]); | ||
| 810 | } | ||
| 811 | |||
| 812 | void DeblockLumaEq4H_sse2 (uint8_t* pPixY, int32_t iStride, int32_t iAlpha, int32_t iBeta) { | ||
| 813 | FORCE_STACK_ALIGN_1D (uint8_t, uiBuf, 16 * 8, 16); | ||
| 814 | |||
| 815 | DeblockLumaTransposeH2V_sse2 (pPixY - 4, iStride, &uiBuf[0]); | ||
| 816 | DeblockLumaEq4V_sse2 (&uiBuf[4 * 16], 16, iAlpha, iBeta); | ||
| 817 | DeblockLumaTransposeV2H_sse2 (pPixY - 4, iStride, &uiBuf[0]); | ||
| 818 | } | ||
| 819 | |||
| 820 | } | ||
| 821 | |||
| 822 | #endif | ||
| 823 | /*! | 621 | /*! |
| 824 | * \brief AVC slice deblocking filtering target layer | 622 | * \brief AVC slice deblocking filtering target layer |
| 825 | * | 623 | * |
| @@ -924,4 +722,4 @@ void_t DeblockingInit (SDeblockingFunc* pFunc, int32_t iCpu) { · 98 unmodified lines | |||
| 924 | 722 | ||
| 925 | } | 723 | } |
| 926 | 724 | ||
| 927 | } // namespace WelsDec | 725 | } // namespace WelsDec |