Changeset 296 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComLoopFilter.cpp
- Timestamp:
- 20 Feb 2013, 22:07:43 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibCommon/TComLoopFilter.cpp
r56 r296 85 85 // Public member functions 86 86 // ==================================================================================================================== 87 #if DBL_CONTROL88 87 Void TComLoopFilter::setCfg( Bool DeblockingFilterControlPresent, UInt uiDisableDblkIdc, Int iBetaOffset_div2, Int iTcOffset_div2, Bool bLFCrossTileBoundary) 89 #else 90 Void TComLoopFilter::setCfg( UInt uiDisableDblkIdc, Int iBetaOffset_div2, Int iTcOffset_div2, Bool bLFCrossTileBoundary) 91 #endif 92 { 93 #if !DBL_CONTROL 94 m_uiDisableDeblockingFilterIdc = uiDisableDblkIdc; 95 #endif 88 { 96 89 m_bLFCrossTileBoundary = bLFCrossTileBoundary; 97 90 98 #if DBL_CONTROL99 91 if (DeblockingFilterControlPresent) 100 92 { … … 109 101 m_tcOffsetDiv2 = 0; 110 102 } 111 #else112 m_betaOffsetDiv2 = iBetaOffset_div2;113 m_tcOffsetDiv2 = iTcOffset_div2;114 #endif115 103 } 116 104 … … 439 427 440 428 //-- Set BS for Intra MB : BS = 4 or 3 441 if ( pcCUP->isIntra(uiPartP) || pcCUQ->isIntra(uiPartQ) ) 429 if ( pcCUP->isIntra(uiPartP) || pcCUQ->isIntra(uiPartQ) 430 #if MERL_VSP_C0152 431 || pcCUP->getVSPIndex(uiPartP) || pcCUQ->getVSPIndex(uiPartQ) 432 #endif 433 ) 442 434 { 443 435 uiBs = 2; … … 445 437 446 438 //-- Set BS for not Intra MB : BS = 2 or 1 or 0 447 if ( !pcCUP->isIntra(uiPartP) && !pcCUQ->isIntra(uiPartQ) ) 448 { 449 #if NSQT_LFFIX 439 if ( !pcCUP->isIntra(uiPartP) && !pcCUQ->isIntra(uiPartQ) 440 #if MERL_VSP_C0152 441 && !pcCUP->getVSPIndex(uiPartP) && !pcCUQ->getVSPIndex(uiPartQ) 442 #endif 443 ) 444 { 450 445 UInt nsPartQ = uiPartQ; 451 446 UInt nsPartP = uiPartP; … … 460 455 461 456 if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( nsPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(nsPartQ)) != 0 || pcCUP->getCbf( nsPartP, TEXT_LUMA, pcCUP->getTransformIdx(nsPartP) ) != 0) ) 462 #else463 if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( uiPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(uiPartQ)) != 0 || pcCUP->getCbf( uiPartP, TEXT_LUMA, pcCUP->getTransformIdx(uiPartP) ) != 0) )464 #endif465 457 { 466 458 uiBs = 1; … … 542 534 } // enf of "if( not Intra )" 543 535 536 #if MERL_VSP_C0152 537 if ( pcCUP->getVSPIndex(uiPartP) || pcCUQ->getVSPIndex(uiPartQ)) 538 { 539 uiBs = 0; 540 } 541 #endif 542 544 543 m_aapucBS[iDir][uiAbsPartIdx] = uiBs; 545 544 } … … 559 558 560 559 UInt uiPelsInPart = g_uiMaxCUWidth >> g_uiMaxCUDepth; 561 #if !DBL_H0473_PART_1562 UInt PartIdxIncr = DEBLOCK_SMALLEST_BLOCK / uiPelsInPart ? DEBLOCK_SMALLEST_BLOCK / uiPelsInPart : 1;563 UInt uiBlocksInPart = uiPelsInPart / DEBLOCK_SMALLEST_BLOCK ? uiPelsInPart / DEBLOCK_SMALLEST_BLOCK : 1;564 #endif565 560 UInt uiBsAbsIdx = 0, uiBs = 0; 566 561 Int iOffset, iSrcStep; … … 587 582 } 588 583 589 #if !DBL_H0473_PART_1590 for ( UInt iIdx = 0; iIdx < uiNumParts; iIdx+=PartIdxIncr )591 {592 uiBs = 0;593 for (UInt iIdxInside = 0; iIdxInside<PartIdxIncr; iIdxInside++)594 {595 uiBsAbsIdx = xCalcBsIdx( pcCU, uiAbsZorderIdx, iDir, iEdge, iIdx+iIdxInside);596 if (uiBs < m_aapucBS[iDir][uiBsAbsIdx])597 {598 uiBs = m_aapucBS[iDir][uiBsAbsIdx];599 }600 }601 602 #else603 584 for ( UInt iIdx = 0; iIdx < uiNumParts; iIdx++ ) 604 585 { 605 586 uiBsAbsIdx = xCalcBsIdx( pcCU, uiAbsZorderIdx, iDir, iEdge, iIdx); 606 587 uiBs = m_aapucBS[iDir][uiBsAbsIdx]; 607 #endif608 588 if ( uiBs ) 609 589 { … … 643 623 644 624 645 #if !DBL_H0473_PART_1646 for (UInt iBlkIdx = 0; iBlkIdx< uiBlocksInPart; iBlkIdx ++)647 {648 Int dp0 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+0), iOffset);649 Int dq0 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+0), iOffset);650 Int dp3 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+3), iOffset);651 Int dq3 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+3), iOffset);652 Int d0 = dp0 + dq0;653 Int d3 = dp3 + dq3;654 655 Int dp4 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+4), iOffset);656 Int dq4 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+4), iOffset);657 Int dp7 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+7), iOffset);658 Int dq7 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+7), iOffset);659 Int d4 = dp4 + dq4;660 Int d7 = dp7 + dq7;661 #else662 625 Int dp0 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0), iOffset); 663 626 Int dq0 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0), iOffset); … … 670 633 Int dq = dq0 + dq3; 671 634 Int d = d0 + d3; 672 #endif673 635 674 636 if (bPCMFilter) … … 683 645 bPartQNoFilter = bPartQNoFilter || (pcCU->isLosslessCoded(uiAbsZorderIdx) ); 684 646 #endif 685 #if !DBL_H0473_PART_1686 if (d0+d3 < iBeta)687 {688 Bool bFilterP = (dp0+dp3 < iSideThreshold);689 Bool bFilterQ = (dq0+dq3 < iSideThreshold);690 691 Bool sw = xUseStrongFiltering( iOffset, 2*d0, iBeta, iTc , piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+0))692 && xUseStrongFiltering( iOffset, 2*d3, iBeta, iTc , piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+3));693 694 #else695 647 if (d < iBeta) 696 648 { … … 700 652 Bool sw = xUseStrongFiltering( iOffset, 2*d0, iBeta, iTc, piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0)) 701 653 && xUseStrongFiltering( iOffset, 2*d3, iBeta, iTc, piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+3)); 702 #endif703 654 704 655 for ( Int i = 0; i < DEBLOCK_SMALLEST_BLOCK/2; i++) 705 656 { 706 #if !DBL_H0473_PART_1707 xPelFilterLuma( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+i), iOffset, d0+d3, iBeta, iTc, sw, bPartPNoFilter, bPartQNoFilter, iThrCut, bFilterP, bFilterQ);708 #else709 657 xPelFilterLuma( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+i), iOffset, d, iBeta, iTc, sw, bPartPNoFilter, bPartQNoFilter, iThrCut, bFilterP, bFilterQ); 710 #endif711 658 712 659 } 713 660 } 714 #if !DBL_H0473_PART_1715 if (d4+d7 < iBeta)716 {717 Bool bFilterP = (dp4+dp7 < iSideThreshold);718 Bool bFilterQ = (dq4+dq7 < iSideThreshold);719 720 Bool sw = xUseStrongFiltering( iOffset, 2*d4, iBeta, iTc , piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+4))721 && xUseStrongFiltering( iOffset, 2*d7, iBeta, iTc , piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+7));722 for ( Int i = DEBLOCK_SMALLEST_BLOCK/2; i < DEBLOCK_SMALLEST_BLOCK; i++)723 {724 xPelFilterLuma( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+i), iOffset, d4+d7, iBeta, iTc, sw, bPartPNoFilter, bPartQNoFilter, iThrCut, bFilterP, bFilterQ);725 }726 }727 }728 #endif729 661 } 730 662 } … … 878 810 if (sw) 879 811 { 880 #if DBL_STRONG_FILTER_CLIP881 812 piSrc[-iOffset] = Clip3(m3-2*tc, m3+2*tc, ((m1 + 2*m2 + 2*m3 + 2*m4 + m5 + 4) >> 3)); 882 813 piSrc[0] = Clip3(m4-2*tc, m4+2*tc, ((m2 + 2*m3 + 2*m4 + 2*m5 + m6 + 4) >> 3)); … … 885 816 piSrc[-iOffset*3] = Clip3(m1-2*tc, m1+2*tc, ((2*m0 + 3*m1 + m2 + m3 + m4 + 4 )>>3)); 886 817 piSrc[ iOffset*2] = Clip3(m6-2*tc, m6+2*tc, ((m3 + m4 + m5 + 3*m6 + 2*m7 +4 )>>3)); 887 #else888 piSrc[-iOffset] = ( m1 + 2*m2 + 2*m3 + 2*m4 + m5 + 4) >> 3;889 piSrc[0] = ( m2 + 2*m3 + 2*m4 + 2*m5 + m6 + 4) >> 3;890 891 piSrc[-iOffset*2] = ( m1 + m2 + m3 + m4 + 2)>>2;892 piSrc[ iOffset] = ( m3 + m4 + m5 + m6 + 2)>>2;893 894 piSrc[-iOffset*3] = ( 2*m0 + 3*m1 + m2 + m3 + m4 + 4 )>>3;895 piSrc[ iOffset*2] = ( m3 + m4 + m5 + 3*m6 + 2*m7 +4 )>>3;896 #endif897 818 } 898 819 else
Note: See TracChangeset for help on using the changeset viewer.