Changeset 296 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComLoopFilter.cpp


Ignore:
Timestamp:
20 Feb 2013, 22:07:43 (12 years ago)
Author:
tech
Message:

Reintegrated branch 5.1-dev0 rev. 295.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibCommon/TComLoopFilter.cpp

    r56 r296  
    8585// Public member functions
    8686// ====================================================================================================================
    87 #if DBL_CONTROL
    8887Void 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{
    9689  m_bLFCrossTileBoundary = bLFCrossTileBoundary;
    9790
    98 #if DBL_CONTROL
    9991  if (DeblockingFilterControlPresent)
    10092  {
     
    109101    m_tcOffsetDiv2 = 0;
    110102  }
    111 #else
    112   m_betaOffsetDiv2 = iBetaOffset_div2;
    113   m_tcOffsetDiv2 = iTcOffset_div2;
    114 #endif
    115103}
    116104
     
    439427 
    440428  //-- 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     )
    442434  {
    443435    uiBs = 2;
     
    445437 
    446438  //-- 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  {
    450445    UInt nsPartQ = uiPartQ;
    451446    UInt nsPartP = uiPartP;
     
    460455
    461456    if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( nsPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(nsPartQ)) != 0 || pcCUP->getCbf( nsPartP, TEXT_LUMA, pcCUP->getTransformIdx(nsPartP) ) != 0) )
    462 #else
    463     if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( uiPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(uiPartQ)) != 0 || pcCUP->getCbf( uiPartP, TEXT_LUMA, pcCUP->getTransformIdx(uiPartP) ) != 0) )
    464 #endif
    465457    {
    466458      uiBs = 1;
     
    542534  }   // enf of "if( not Intra )"
    543535 
     536#if MERL_VSP_C0152
     537  if ( pcCUP->getVSPIndex(uiPartP) || pcCUQ->getVSPIndex(uiPartQ))
     538  {
     539    uiBs = 0;
     540  }
     541#endif
     542
    544543  m_aapucBS[iDir][uiAbsPartIdx] = uiBs;
    545544}
     
    559558 
    560559  UInt  uiPelsInPart = g_uiMaxCUWidth >> g_uiMaxCUDepth;
    561 #if !DBL_H0473_PART_1
    562   UInt  PartIdxIncr = DEBLOCK_SMALLEST_BLOCK / uiPelsInPart ? DEBLOCK_SMALLEST_BLOCK / uiPelsInPart : 1;
    563   UInt  uiBlocksInPart = uiPelsInPart / DEBLOCK_SMALLEST_BLOCK ? uiPelsInPart / DEBLOCK_SMALLEST_BLOCK : 1;
    564 #endif
    565560  UInt  uiBsAbsIdx = 0, uiBs = 0;
    566561  Int   iOffset, iSrcStep;
     
    587582  }
    588583 
    589 #if !DBL_H0473_PART_1
    590   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 #else
    603584  for ( UInt iIdx = 0; iIdx < uiNumParts; iIdx++ )
    604585  {
    605586    uiBsAbsIdx = xCalcBsIdx( pcCU, uiAbsZorderIdx, iDir, iEdge, iIdx);
    606587    uiBs = m_aapucBS[iDir][uiBsAbsIdx];
    607 #endif
    608588    if ( uiBs )
    609589    {
     
    643623     
    644624     
    645 #if !DBL_H0473_PART_1     
    646       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 #else
    662625        Int dp0 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0), iOffset);
    663626        Int dq0 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0), iOffset);
     
    670633        Int dq = dq0 + dq3;
    671634        Int d =  d0 + d3;
    672 #endif
    673635       
    674636        if (bPCMFilter)
     
    683645        bPartQNoFilter = bPartQNoFilter || (pcCU->isLosslessCoded(uiAbsZorderIdx) );
    684646#endif
    685 #if !DBL_H0473_PART_1         
    686         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 #else
    695647        if (d < iBeta)
    696648        {
     
    700652          Bool sw =  xUseStrongFiltering( iOffset, 2*d0, iBeta, iTc, piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0))
    701653                  && xUseStrongFiltering( iOffset, 2*d3, iBeta, iTc, piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+3));
    702 #endif
    703654
    704655          for ( Int i = 0; i < DEBLOCK_SMALLEST_BLOCK/2; i++)
    705656          {
    706 #if !DBL_H0473_PART_1         
    707             xPelFilterLuma( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+i), iOffset, d0+d3, iBeta, iTc, sw, bPartPNoFilter, bPartQNoFilter, iThrCut, bFilterP, bFilterQ);
    708 #else
    709657            xPelFilterLuma( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+i), iOffset, d, iBeta, iTc, sw, bPartPNoFilter, bPartQNoFilter, iThrCut, bFilterP, bFilterQ);
    710 #endif
    711658
    712659          }
    713660        }
    714 #if !DBL_H0473_PART_1             
    715         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 #endif
    729661    }
    730662  }
     
    878810  if (sw)
    879811  {
    880 #if DBL_STRONG_FILTER_CLIP
    881812    piSrc[-iOffset]   = Clip3(m3-2*tc, m3+2*tc, ((m1 + 2*m2 + 2*m3 + 2*m4 + m5 + 4) >> 3));
    882813    piSrc[0]          = Clip3(m4-2*tc, m4+2*tc, ((m2 + 2*m3 + 2*m4 + 2*m5 + m6 + 4) >> 3));
     
    885816    piSrc[-iOffset*3] = Clip3(m1-2*tc, m1+2*tc, ((2*m0 + 3*m1 + m2 + m3 + m4 + 4 )>>3));
    886817    piSrc[ iOffset*2] = Clip3(m6-2*tc, m6+2*tc, ((m3 + m4 + m5 + 3*m6 + 2*m7 +4 )>>3));
    887 #else
    888     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 #endif
    897818  }
    898819  else
Note: See TracChangeset for help on using the changeset viewer.