Ticket #485: deblocking_parameter.patch

File deblocking_parameter.patch, 8.6 KB (added by ksuehring, 11 years ago)
  • source/Lib/TLibCommon/TComLoopFilter.cpp

     
    7575// ====================================================================================================================
    7676
    7777TComLoopFilter::TComLoopFilter()
    78 : m_disableDeblockingFilterFlag(false)
    79 , m_betaOffsetDiv2(0)
    80 , m_tcOffsetDiv2(0)
    81 , m_uiNumPartitions(0)
     78: m_uiNumPartitions(0)
    8279, m_bLFCrossTileBoundary(true)
    8380{
    8481  for( UInt uiDir = 0; uiDir < 2; uiDir++ )
     
    9895// ====================================================================================================================
    9996// Public member functions
    10097// ====================================================================================================================
    101 Void TComLoopFilter::setCfg( Bool deblockingFilterControlPresentFlag, Bool disableDeblockingFilterFlag, Int betaOffsetDiv2, Int tcOffsetDiv2, Bool bLFCrossTileBoundary )
     98Void TComLoopFilter::setCfg( Bool bLFCrossTileBoundary )
    10299{
    103100  m_bLFCrossTileBoundary = bLFCrossTileBoundary;
    104 
    105   if (deblockingFilterControlPresentFlag)
    106   {
    107     m_disableDeblockingFilterFlag  = disableDeblockingFilterFlag;
    108     m_betaOffsetDiv2 = betaOffsetDiv2;
    109     m_tcOffsetDiv2 = tcOffsetDiv2;
    110   }
    111   else // use default values
    112   {
    113     m_disableDeblockingFilterFlag = false;
    114     m_betaOffsetDiv2 = 0;
    115     m_tcOffsetDiv2 = 0;
    116   }
    117101}
    118102
    119103Void TComLoopFilter::create( UInt uiMaxCUDepth )
     
    157141 */
    158142Void TComLoopFilter::loopFilterPic( TComPic* pcPic )
    159143{
    160   if ( m_disableDeblockingFilterFlag )
    161   {
    162     return;
    163   }
    164  
    165144  // Horizontal filtering
    166145  for ( UInt uiCUAddr = 0; uiCUAddr < pcPic->getNumCUsInFrame(); uiCUAddr++ )
    167146  {
     
    389368  TComDataCU* pcTempCU;
    390369  UInt        uiTempPartIdx;
    391370
    392   m_stLFCUParam.bInternalEdge = !m_disableDeblockingFilterFlag;
     371  m_stLFCUParam.bInternalEdge = ! pcCU->getSlice()->getDeblockingFilterDisable();
    393372 
    394   if ( (uiX == 0) || m_disableDeblockingFilterFlag )
     373  if ( (uiX == 0) || pcCU->getSlice()->getDeblockingFilterDisable() )
    395374  {
    396375    m_stLFCUParam.bLeftEdge = false;
    397376  }
     
    412391    }
    413392  }
    414393 
    415   if ( (uiY == 0 ) || m_disableDeblockingFilterFlag )
     394  if ( (uiY == 0 ) || pcCU->getSlice()->getDeblockingFilterDisable() )
    416395  {
    417396    m_stLFCUParam.bTopEdge = false;
    418397  }
     
    587566  UInt  uiPartQIdx = 0;
    588567  TComDataCU* pcCUP = pcCU;
    589568  TComDataCU* pcCUQ = pcCU;
    590  
     569  Int  betaOffsetDiv2 = pcCUQ->getSlice()->getDeblockingFilterBetaOffsetDiv2();
     570  Int  tcOffsetDiv2 = pcCUQ->getSlice()->getDeblockingFilterTcOffsetDiv2();
     571
    591572  if (iDir == EDGE_VER)
    592573  {
    593574    iOffset = 1;
     
    627608      iQP = (iQP_P + iQP_Q + 1) >> 1;
    628609      Int iBitdepthScale = 1 << (g_bitDepthY-8);
    629610     
    630       Int iIndexTC = Clip3(0, MAX_QP+DEFAULT_INTRA_TC_OFFSET, Int(iQP + DEFAULT_INTRA_TC_OFFSET*(uiBs-1) + (m_tcOffsetDiv2 << 1)));
    631       Int iIndexB = Clip3(0, MAX_QP, iQP + (m_betaOffsetDiv2 << 1));
     611      Int iIndexTC = Clip3(0, MAX_QP+DEFAULT_INTRA_TC_OFFSET, Int(iQP + DEFAULT_INTRA_TC_OFFSET*(uiBs-1) + (tcOffsetDiv2 << 1)));
     612      Int iIndexB = Clip3(0, MAX_QP, iQP + (betaOffsetDiv2 << 1));
    632613     
    633614      Int iTc =  tctable_8x8[iIndexTC]*iBitdepthScale;
    634615      Int iBeta = betatable_8x8[iIndexB]*iBitdepthScale;
     
    702683  UInt  uiPartQIdx;
    703684  TComDataCU* pcCUP;
    704685  TComDataCU* pcCUQ = pcCU;
     686  Int tcOffsetDiv2 = pcCU->getSlice()->getDeblockingFilterTcOffsetDiv2();
    705687 
    706688  // Vertical Position
    707689  UInt uiEdgeNumInLCUVert = g_auiZscanToRaster[uiAbsZorderIdx]%uiLCUWidthInBaseUnits + iEdge;
     
    766748      iQP = QpUV((iQP_P + iQP_Q + 1) >> 1);
    767749      Int iBitdepthScale = 1 << (g_bitDepth-8);
    768750     
    769       Int iIndexTC = Clip3(0, MAX_QP+DEFAULT_INTRA_TC_OFFSET, iQP + DEFAULT_INTRA_TC_OFFSET*(ucBs - 1) + (m_tcOffsetDiv2 << 1));
     751      Int iIndexTC = Clip3(0, MAX_QP+DEFAULT_INTRA_TC_OFFSET, iQP + DEFAULT_INTRA_TC_OFFSET*(ucBs - 1) + (tcOffsetDiv2 << 1));
    770752      Int iTc =  tctable_8x8[iIndexTC]*iBitdepthScale;
    771753#endif
    772754     
     
    790772        iQP = QpUV( ((iQP_P + iQP_Q + 1) >> 1) + chromaQPOffset );
    791773        Int iBitdepthScale = 1 << (g_bitDepthC-8);
    792774
    793         Int iIndexTC = Clip3(0, MAX_QP+DEFAULT_INTRA_TC_OFFSET, iQP + DEFAULT_INTRA_TC_OFFSET*(ucBs - 1) + (m_tcOffsetDiv2 << 1));
     775        Int iIndexTC = Clip3(0, MAX_QP+DEFAULT_INTRA_TC_OFFSET, iQP + DEFAULT_INTRA_TC_OFFSET*(ucBs - 1) + (tcOffsetDiv2 << 1));
    794776        Int iTc =  tctable_8x8[iIndexTC]*iBitdepthScale;
    795777
    796778        for ( UInt uiStep = 0; uiStep < uiPelsInPartChroma; uiStep++ )
  • source/Lib/TLibCommon/TComLoopFilter.h

     
    110110  Void  destroy                   ();
    111111 
    112112  /// set configuration
    113   Void setCfg( Bool deblockingFilterControlPresentFlag, Bool disableDeblockingFilterFlag, Int betaOffsetDiv2, Int tcOffsetDiv2, Bool bLFCrossTileBoundary );
     113  Void setCfg( Bool bLFCrossTileBoundary );
    114114 
    115115  /// picture-level deblocking filter
    116116  Void loopFilterPic( TComPic* pcPic );
  • source/Lib/TLibCommon/TComSlice.h

     
    958958  UInt     m_encCABACTableIdx;           // Used to transmit table selection across slices
    959959
    960960  Bool     m_sliceHeaderExtensionPresentFlag;
    961   Bool        m_loopFilterAcrossSlicesEnabledFlag;
     961  Bool     m_loopFilterAcrossSlicesEnabledFlag;
    962962  Bool     m_deblockingFilterControlPresentFlag;
    963963  Bool     m_deblockingFilterOverrideEnabledFlag;
    964964  Bool     m_picDisableDeblockingFilterFlag;
  • source/Lib/TLibDecoder/TDecGop.cpp

     
    177177
    178178  // deblocking filter
    179179  Bool bLFCrossTileBoundary = pcSlice->getPPS()->getLoopFilterAcrossTilesEnabledFlag();
    180   m_pcLoopFilter->setCfg(pcSlice->getPPS()->getDeblockingFilterControlPresentFlag(), pcSlice->getDeblockingFilterDisable(), pcSlice->getDeblockingFilterBetaOffsetDiv2(), pcSlice->getDeblockingFilterTcOffsetDiv2(), bLFCrossTileBoundary);
     180  m_pcLoopFilter->setCfg(bLFCrossTileBoundary);
    181181  m_pcLoopFilter->loopFilterPic( rpcPic );
    182182
    183183  pcSlice = rpcPic->getSlice(0);
  • source/Lib/TLibEncoder/TEncGOP.cpp

     
    743743
    744744    //-- Loop filter
    745745    Bool bLFCrossTileBoundary = pcSlice->getPPS()->getLoopFilterAcrossTilesEnabledFlag();
    746     m_pcLoopFilter->setCfg(pcSlice->getPPS()->getDeblockingFilterControlPresentFlag(), pcSlice->getDeblockingFilterDisable(), pcSlice->getDeblockingFilterBetaOffsetDiv2(), pcSlice->getDeblockingFilterTcOffsetDiv2(), bLFCrossTileBoundary);
     746    m_pcLoopFilter->setCfg(bLFCrossTileBoundary);
    747747    m_pcLoopFilter->loopFilterPic( pcPic );
    748748
    749749    pcSlice = pcPic->getSlice(0);
     
    15181518  TComSlice* pcSlice = pcPic->getSlice(pcPic->getCurrSliceIdx());
    15191519  Bool bCalcDist = false;
    15201520#if VARYING_DBL_PARAMS
    1521   m_pcLoopFilter->setCfg(pcSlice->getPPS()->getDeblockingFilterControlPresentFlag(), pcSlice->getDeblockingFilterDisable(), pcSlice->getDeblockingFilterBetaOffsetDiv2(), pcSlice->getDeblockingFilterTcOffsetDiv2(), m_pcCfg->getLFCrossTileBoundaryFlag());
     1521  m_pcLoopFilter->setCfg(m_pcCfg->getLFCrossTileBoundaryFlag());
    15221522#else
    1523   m_pcLoopFilter->setCfg(pcSlice->getPPS()->getDeblockingFilterControlPresentFlag(), pcSlice->getDeblockingFilterDisable(), m_pcCfg->getLoopFilterBetaOffset(), m_pcCfg->getLoopFilterTcOffset(), m_pcCfg->getLFCrossTileBoundaryFlag());
     1523  m_pcLoopFilter->setCfg(m_pcCfg->getLFCrossTileBoundaryFlag());
    15241524#endif
    15251525  m_pcLoopFilter->loopFilterPic( pcPic );
    15261526 
  • source/Lib/TLibEncoder/TEncSlice.cpp

     
    412412#endif
    413413    }
    414414  }
     415  else
     416  {
     417    rpcSlice->setDeblockingFilterOverrideFlag( false );
     418    rpcSlice->setDeblockingFilterDisable( false );
     419    rpcSlice->setDeblockingFilterBetaOffsetDiv2( 0 );
     420    rpcSlice->setDeblockingFilterTcOffsetDiv2( 0 );
     421  }
    415422
    416423  rpcSlice->setDepth            ( depth );
    417424