History

file a new commit

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.

Licai Guo committed 12 years ago

Commit f38111d1 parent 8df056625 files · +627 −1040Browse files

Showing the changes to codec/decoder/core/src/deblocking.cpp (1 of 25 files). Show all

Unified · Split

codec/decoder/core/src/deblocking.cpp+1−203
@@ -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
622void_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}
656void_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}
698void_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}
701void_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}
704void_t DeblockLumaEq4V_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
705 DeblockLumaEq4_c (pPix, iStride, 1, iAlpha, iBeta);
706}
707void_t DeblockLumaEq4H_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
708 DeblockLumaEq4_c (pPix, 1, iStride, iAlpha, iBeta);
709}
710void_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}
752void_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}
787void_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}
791void_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}
795void_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}
798void_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
803extern "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 layer622 * \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 WelsDec725} // namespace WelsDec

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t