History

Check for WELS_CPU_NEON before calling DeblockingBSCalcEnc_neon

Checking HAVE_NEON is not enough; e.g. android devices with armeabi-v7a are not required to have NEON, so every use of such functions should be check WELS_CPU_NEON in the cpu features as well.

Martin Storsjö committed 12 years ago

Commit 00a72401 parent c0d21a22 files · +60 −43Browse files

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

Unified · Split

codec/encoder/core/src/deblocking.cpp+57−43
@@ -583,6 +583,56 @@ void DeblockingIntraMb (DeblockingFunc* pfDeblocking, SMB* pCurMb, SDeblockingFi · 582 unmodified lines
583583 FilteringEdgeChromaHV (pfDeblocking, pCurMb, pFilter);
584584 }
585585
586+#if defined(HAVE_NEON) && defined(SINGLE_REF_FRAME)
587+void DeblockingBSCalc_neon (SWelsFuncPtrList* pFunc, SMB* pCurMb, uint8_t uiBS[2][4][4], Mb_Type uiCurMbType,
588+ int32_t iMbStride, int32_t iLeftFlag, int32_t iTopFlag) {
589+ DeblockingBSCalcEnc_neon (pCurMb->pNonZeroCount, pCurMb->sMv, pCurMb->uiNeighborAvail, iMbStride, uiBS);
590+ if (iLeftFlag) {
591+ if (IS_INTRA ((pCurMb - 1)->uiMbType)) {
592+ * (uint32_t*)uiBS[0][0] = 0x04040404;
593+ }
594+ } else {
595+ * (uint32_t*)uiBS[0][0] = 0;
596+ }
597+ if (iTopFlag) {
598+ if (IS_INTRA ((pCurMb - iMbStride)->uiMbType)) {
599+ * (uint32_t*)uiBS[1][0] = 0x04040404;
600+ }
601+ } else {
602+ * (uint32_t*)uiBS[1][0] = 0;
603+ }
604+}
605+#endif
606+
607+void DeblockingBSCalc_c (SWelsFuncPtrList* pFunc, SMB* pCurMb, uint8_t uiBS[2][4][4], Mb_Type uiCurMbType,
608+ int32_t iMbStride, int32_t iLeftFlag, int32_t iTopFlag) {
609+ if (iLeftFlag) {
610+ * (uint32_t*)uiBS[0][0] = IS_INTRA ((pCurMb - 1)->uiMbType) ? 0x04040404 : DeblockingBSMarginalMBAvcbase (pCurMb,
611+ pCurMb - 1, 0);
612+ } else {
613+ * (uint32_t*)uiBS[0][0] = 0;
614+ }
615+ if (iTopFlag) {
616+ * (uint32_t*)uiBS[1][0] = IS_INTRA ((pCurMb - iMbStride)->uiMbType) ? 0x04040404 : DeblockingBSMarginalMBAvcbase (
617+ pCurMb, (pCurMb - iMbStride), 1);
618+ } else {
619+ * (uint32_t*)uiBS[1][0] = 0;
620+ }
621+ //SKIP MB_16x16 or others
622+ if (uiCurMbType != MB_TYPE_SKIP) {
623+ pFunc->pfSetNZCZero (pCurMb->pNonZeroCount); // set all none-zero nzc to 1; dbk can be opti!
624+
625+ if (uiCurMbType == MB_TYPE_16x16) {
626+ DeblockingBSInsideMBAvsbase (pCurMb->pNonZeroCount, uiBS, 1);
627+ } else {
628+ DeblockingBSInsideMBNormal (pCurMb, uiBS, pCurMb->pNonZeroCount);
629+ }
630+ } else {
631+ * (uint32_t*)uiBS[0][1] = * (uint32_t*)uiBS[0][2] = * (uint32_t*)uiBS[0][3] =
632+ * (uint32_t*)uiBS[1][1] = * (uint32_t*)uiBS[1][2] = * (uint32_t*)uiBS[1][3] = 0;
633+ }
634+}
635+
586636 void DeblockingMbAvcbase (SWelsFuncPtrList* pFunc, SMB* pCurMb, SDeblockingFilter* pFilter) {
587637 uint8_t uiBS[2][4][4] = {{{ 0 }}};
588638
@@ -605,49 +655,7 @@ void DeblockingMbAvcbase (SWelsFuncPtrList* pFunc, SMB* pCurMb, SDeblockingFilte · 16 unmodified lines
605655 DeblockingIntraMb (&pFunc->pfDeblocking, pCurMb, pFilter);
606656 break;
607657 default:
608−#if (defined(HAVE_NEON) && defined(SINGLE_REF_FRAME))
609− DeblockingBSCalcEnc_neon(pCurMb->pNonZeroCount, pCurMb->sMv, pCurMb->uiNeighborAvail, iMbStride, uiBS);
610− if (iLeftFlag){
611− if (IS_INTRA((pCurMb-1)->uiMbType)) {
612− *(uint32_t*)uiBS[0][0] = 0x04040404;
613− }
614− } else {
615− *(uint32_t*)uiBS[0][0] = 0;
616− }
617− if (iTopFlag) {
618− if (IS_INTRA((pCurMb-iMbStride)->uiMbType)) {
619− *(uint32_t*)uiBS[1][0] = 0x04040404;
620− }
621− } else {
622− *(uint32_t*)uiBS[1][0] = 0;
623− }
624−#else
625− if (iLeftFlag) {
626− * (uint32_t*)uiBS[0][0] = IS_INTRA ((pCurMb - 1)->uiMbType) ? 0x04040404 : DeblockingBSMarginalMBAvcbase (pCurMb,
627− pCurMb - 1, 0);
628− } else {
629− * (uint32_t*)uiBS[0][0] = 0;
630− }
631− if (iTopFlag) {
632− * (uint32_t*)uiBS[1][0] = IS_INTRA ((pCurMb - iMbStride)->uiMbType) ? 0x04040404 : DeblockingBSMarginalMBAvcbase (
633− pCurMb, (pCurMb - iMbStride), 1);
634− } else {
635− * (uint32_t*)uiBS[1][0] = 0;
636− }
637− //SKIP MB_16x16 or others
638− if (uiCurMbType != MB_TYPE_SKIP) {
639− pFunc->pfSetNZCZero (pCurMb->pNonZeroCount); // set all none-zero nzc to 1; dbk can be opti!
640−
641− if (uiCurMbType == MB_TYPE_16x16) {
642− DeblockingBSInsideMBAvsbase (pCurMb->pNonZeroCount, uiBS, 1);
643− } else {
644− DeblockingBSInsideMBNormal (pCurMb, uiBS, pCurMb->pNonZeroCount);
645− }
646− } else {
647− * (uint32_t*)uiBS[0][1] = * (uint32_t*)uiBS[0][2] = * (uint32_t*)uiBS[0][3] =
648− * (uint32_t*)uiBS[1][1] = * (uint32_t*)uiBS[1][2] = * (uint32_t*)uiBS[1][3] = 0;
649− }
650−#endif
658+ pFunc->pfDeblocking.pfDeblockingBSCalc (pFunc, pCurMb, uiBS, uiCurMbType, iMbStride, iLeftFlag, iTopFlag);
651659 DeblockingInterMb (&pFunc->pfDeblocking, pCurMb, pFilter, uiBS);
652660 break;
653661 }
@@ -803,6 +811,8 @@ void DeblockingInit (DeblockingFunc* pFunc, int32_t iCpu) { · 149 unmodified lines
803811 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_c;
804812 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_c;
805813
814+ pFunc->pfDeblockingBSCalc = DeblockingBSCalc_c;
815+
806816
807817 #ifdef X86_ASM
808818 if (iCpu & WELS_CPU_SSSE3) {
@@ -828,6 +838,10 @@ void DeblockingInit (DeblockingFunc* pFunc, int32_t iCpu) { · 19 unmodified lines
828838 pFunc->pfChromaDeblockingEQ4Ver = DeblockChromaEq4V_neon;
829839 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_neon;
830840 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_neon;
841+
842+#if defined(SINGLE_REF_FRAME)
843+ pFunc->pfDeblockingBSCalc = DeblockingBSCalc_neon;
844+#endif
831845 }
832846 #endif
833847 }

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