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 | 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 | |