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
583 FilteringEdgeChromaHV (pfDeblocking, pCurMb, pFilter);583 FilteringEdgeChromaHV (pfDeblocking, pCurMb, pFilter);
584}584}
585 585
586#if defined(HAVE_NEON) && defined(SINGLE_REF_FRAME)
587void 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
607void 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
586void DeblockingMbAvcbase (SWelsFuncPtrList* pFunc, SMB* pCurMb, SDeblockingFilter* pFilter) {636void DeblockingMbAvcbase (SWelsFuncPtrList* pFunc, SMB* pCurMb, SDeblockingFilter* pFilter) {
587 uint8_t uiBS[2][4][4] = {{{ 0 }}};637 uint8_t uiBS[2][4][4] = {{{ 0 }}};
588 638
@@ -605,49 +655,7 @@ void DeblockingMbAvcbase (SWelsFuncPtrList* pFunc, SMB* pCurMb, SDeblockingFilte · 16 unmodified lines
605 DeblockingIntraMb (&pFunc->pfDeblocking, pCurMb, pFilter);655 DeblockingIntraMb (&pFunc->pfDeblocking, pCurMb, pFilter);
606 break;656 break;
607 default:657 default:
608#if (defined(HAVE_NEON) && defined(SINGLE_REF_FRAME))658 pFunc->pfDeblocking.pfDeblockingBSCalc (pFunc, pCurMb, uiBS, uiCurMbType, iMbStride, iLeftFlag, iTopFlag);
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
651 DeblockingInterMb (&pFunc->pfDeblocking, pCurMb, pFilter, uiBS);659 DeblockingInterMb (&pFunc->pfDeblocking, pCurMb, pFilter, uiBS);
652 break;660 break;
653 }661 }
@@ -803,6 +811,8 @@ void DeblockingInit (DeblockingFunc* pFunc, int32_t iCpu) { · 149 unmodified lines
803 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_c;811 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_c;
804 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_c;812 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_c;
805 813
814 pFunc->pfDeblockingBSCalc = DeblockingBSCalc_c;
815
806 816
807#ifdef X86_ASM817#ifdef X86_ASM
808 if (iCpu & WELS_CPU_SSSE3) {818 if (iCpu & WELS_CPU_SSSE3) {
@@ -828,6 +838,10 @@ void DeblockingInit (DeblockingFunc* pFunc, int32_t iCpu) { · 19 unmodified lines
828 pFunc->pfChromaDeblockingEQ4Ver = DeblockChromaEq4V_neon;838 pFunc->pfChromaDeblockingEQ4Ver = DeblockChromaEq4V_neon;
829 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_neon;839 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_neon;
830 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_neon;840 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_neon;
841
842#if defined(SINGLE_REF_FRAME)
843 pFunc->pfDeblockingBSCalc = DeblockingBSCalc_neon;
844#endif
831 }845 }
832#endif846#endif
833}847}

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