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
618618 }
619619 }
620620
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
823621 /*!
824622 * \brief AVC slice deblocking filtering target layer
825623 *
@@ -924,4 +722,4 @@ void_t DeblockingInit (SDeblockingFunc* pFunc, int32_t iCpu) { · 98 unmodified lines
924722
925723 }
926724
927−} // namespace WelsDec
725+} // 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