Ticket #485: deblocking_parameter.patch
File deblocking_parameter.patch, 8.6 KB (added by ksuehring, 11 years ago) |
---|
-
source/Lib/TLibCommon/TComLoopFilter.cpp
75 75 // ==================================================================================================================== 76 76 77 77 TComLoopFilter::TComLoopFilter() 78 : m_disableDeblockingFilterFlag(false) 79 , m_betaOffsetDiv2(0) 80 , m_tcOffsetDiv2(0) 81 , m_uiNumPartitions(0) 78 : m_uiNumPartitions(0) 82 79 , m_bLFCrossTileBoundary(true) 83 80 { 84 81 for( UInt uiDir = 0; uiDir < 2; uiDir++ ) … … 98 95 // ==================================================================================================================== 99 96 // Public member functions 100 97 // ==================================================================================================================== 101 Void TComLoopFilter::setCfg( Bool deblockingFilterControlPresentFlag, Bool disableDeblockingFilterFlag, Int betaOffsetDiv2, Int tcOffsetDiv2, BoolbLFCrossTileBoundary )98 Void TComLoopFilter::setCfg( Bool bLFCrossTileBoundary ) 102 99 { 103 100 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 values112 {113 m_disableDeblockingFilterFlag = false;114 m_betaOffsetDiv2 = 0;115 m_tcOffsetDiv2 = 0;116 }117 101 } 118 102 119 103 Void TComLoopFilter::create( UInt uiMaxCUDepth ) … … 157 141 */ 158 142 Void TComLoopFilter::loopFilterPic( TComPic* pcPic ) 159 143 { 160 if ( m_disableDeblockingFilterFlag )161 {162 return;163 }164 165 144 // Horizontal filtering 166 145 for ( UInt uiCUAddr = 0; uiCUAddr < pcPic->getNumCUsInFrame(); uiCUAddr++ ) 167 146 { … … 389 368 TComDataCU* pcTempCU; 390 369 UInt uiTempPartIdx; 391 370 392 m_stLFCUParam.bInternalEdge = ! m_disableDeblockingFilterFlag;371 m_stLFCUParam.bInternalEdge = ! pcCU->getSlice()->getDeblockingFilterDisable(); 393 372 394 if ( (uiX == 0) || m_disableDeblockingFilterFlag)373 if ( (uiX == 0) || pcCU->getSlice()->getDeblockingFilterDisable() ) 395 374 { 396 375 m_stLFCUParam.bLeftEdge = false; 397 376 } … … 412 391 } 413 392 } 414 393 415 if ( (uiY == 0 ) || m_disableDeblockingFilterFlag)394 if ( (uiY == 0 ) || pcCU->getSlice()->getDeblockingFilterDisable() ) 416 395 { 417 396 m_stLFCUParam.bTopEdge = false; 418 397 } … … 587 566 UInt uiPartQIdx = 0; 588 567 TComDataCU* pcCUP = pcCU; 589 568 TComDataCU* pcCUQ = pcCU; 590 569 Int betaOffsetDiv2 = pcCUQ->getSlice()->getDeblockingFilterBetaOffsetDiv2(); 570 Int tcOffsetDiv2 = pcCUQ->getSlice()->getDeblockingFilterTcOffsetDiv2(); 571 591 572 if (iDir == EDGE_VER) 592 573 { 593 574 iOffset = 1; … … 627 608 iQP = (iQP_P + iQP_Q + 1) >> 1; 628 609 Int iBitdepthScale = 1 << (g_bitDepthY-8); 629 610 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)); 632 613 633 614 Int iTc = tctable_8x8[iIndexTC]*iBitdepthScale; 634 615 Int iBeta = betatable_8x8[iIndexB]*iBitdepthScale; … … 702 683 UInt uiPartQIdx; 703 684 TComDataCU* pcCUP; 704 685 TComDataCU* pcCUQ = pcCU; 686 Int tcOffsetDiv2 = pcCU->getSlice()->getDeblockingFilterTcOffsetDiv2(); 705 687 706 688 // Vertical Position 707 689 UInt uiEdgeNumInLCUVert = g_auiZscanToRaster[uiAbsZorderIdx]%uiLCUWidthInBaseUnits + iEdge; … … 766 748 iQP = QpUV((iQP_P + iQP_Q + 1) >> 1); 767 749 Int iBitdepthScale = 1 << (g_bitDepth-8); 768 750 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)); 770 752 Int iTc = tctable_8x8[iIndexTC]*iBitdepthScale; 771 753 #endif 772 754 … … 790 772 iQP = QpUV( ((iQP_P + iQP_Q + 1) >> 1) + chromaQPOffset ); 791 773 Int iBitdepthScale = 1 << (g_bitDepthC-8); 792 774 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)); 794 776 Int iTc = tctable_8x8[iIndexTC]*iBitdepthScale; 795 777 796 778 for ( UInt uiStep = 0; uiStep < uiPelsInPartChroma; uiStep++ ) -
source/Lib/TLibCommon/TComLoopFilter.h
110 110 Void destroy (); 111 111 112 112 /// set configuration 113 Void setCfg( Bool deblockingFilterControlPresentFlag, Bool disableDeblockingFilterFlag, Int betaOffsetDiv2, Int tcOffsetDiv2, BoolbLFCrossTileBoundary );113 Void setCfg( Bool bLFCrossTileBoundary ); 114 114 115 115 /// picture-level deblocking filter 116 116 Void loopFilterPic( TComPic* pcPic ); -
source/Lib/TLibCommon/TComSlice.h
958 958 UInt m_encCABACTableIdx; // Used to transmit table selection across slices 959 959 960 960 Bool m_sliceHeaderExtensionPresentFlag; 961 Bool 961 Bool m_loopFilterAcrossSlicesEnabledFlag; 962 962 Bool m_deblockingFilterControlPresentFlag; 963 963 Bool m_deblockingFilterOverrideEnabledFlag; 964 964 Bool m_picDisableDeblockingFilterFlag; -
source/Lib/TLibDecoder/TDecGop.cpp
177 177 178 178 // deblocking filter 179 179 Bool bLFCrossTileBoundary = pcSlice->getPPS()->getLoopFilterAcrossTilesEnabledFlag(); 180 m_pcLoopFilter->setCfg( pcSlice->getPPS()->getDeblockingFilterControlPresentFlag(), pcSlice->getDeblockingFilterDisable(), pcSlice->getDeblockingFilterBetaOffsetDiv2(), pcSlice->getDeblockingFilterTcOffsetDiv2(),bLFCrossTileBoundary);180 m_pcLoopFilter->setCfg(bLFCrossTileBoundary); 181 181 m_pcLoopFilter->loopFilterPic( rpcPic ); 182 182 183 183 pcSlice = rpcPic->getSlice(0); -
source/Lib/TLibEncoder/TEncGOP.cpp
743 743 744 744 //-- Loop filter 745 745 Bool bLFCrossTileBoundary = pcSlice->getPPS()->getLoopFilterAcrossTilesEnabledFlag(); 746 m_pcLoopFilter->setCfg( pcSlice->getPPS()->getDeblockingFilterControlPresentFlag(), pcSlice->getDeblockingFilterDisable(), pcSlice->getDeblockingFilterBetaOffsetDiv2(), pcSlice->getDeblockingFilterTcOffsetDiv2(),bLFCrossTileBoundary);746 m_pcLoopFilter->setCfg(bLFCrossTileBoundary); 747 747 m_pcLoopFilter->loopFilterPic( pcPic ); 748 748 749 749 pcSlice = pcPic->getSlice(0); … … 1518 1518 TComSlice* pcSlice = pcPic->getSlice(pcPic->getCurrSliceIdx()); 1519 1519 Bool bCalcDist = false; 1520 1520 #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()); 1522 1522 #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()); 1524 1524 #endif 1525 1525 m_pcLoopFilter->loopFilterPic( pcPic ); 1526 1526 -
source/Lib/TLibEncoder/TEncSlice.cpp
412 412 #endif 413 413 } 414 414 } 415 else 416 { 417 rpcSlice->setDeblockingFilterOverrideFlag( false ); 418 rpcSlice->setDeblockingFilterDisable( false ); 419 rpcSlice->setDeblockingFilterBetaOffsetDiv2( 0 ); 420 rpcSlice->setDeblockingFilterTcOffsetDiv2( 0 ); 421 } 415 422 416 423 rpcSlice->setDepth ( depth ); 417 424