Ticket #454: num_ref_idx_default_active.patch
File num_ref_idx_default_active.patch, 6.4 KB (added by rickard, 11 years ago) |
---|
-
source/Lib/TLibCommon/TComSlice.cpp
1457 1457 , m_uiMinCuDQPSize (0) 1458 1458 , m_iChromaQpOffset (0) 1459 1459 , m_iChromaQpOffset2nd (0) 1460 , m_uiNumRefIdxL0DefaultActive (1) 1461 , m_uiNumRefIdxL1DefaultActive (1) 1460 1462 #if !RPS_IN_SPS 1461 1463 , m_bLongTermRefsPresent (false) 1462 1464 #endif -
source/Lib/TLibCommon/TComSlice.h
624 624 Int m_iChromaQpOffset; 625 625 Int m_iChromaQpOffset2nd; 626 626 627 UInt m_uiNumRefIdxL0DefaultActive; 628 UInt m_uiNumRefIdxL1DefaultActive; 629 627 630 #if !RPS_IN_SPS 628 631 Bool m_bLongTermRefsPresent; 629 632 #endif … … 724 727 Void setChromaQpOffset2nd( Int i ) { m_iChromaQpOffset2nd = i; } 725 728 Int getChromaQpOffset2nd() { return m_iChromaQpOffset2nd;} 726 729 730 Void setNumRefIdxL0DefaultActive(UInt ui) { m_uiNumRefIdxL0DefaultActive=ui; } 731 UInt getNumRefIdxL0DefaultActive() { return m_uiNumRefIdxL0DefaultActive; } 732 Void setNumRefIdxL1DefaultActive(UInt ui) { m_uiNumRefIdxL1DefaultActive=ui; } 733 UInt getNumRefIdxL1DefaultActive() { return m_uiNumRefIdxL1DefaultActive; } 734 727 735 Bool getUseWP () { return m_bUseWeightPred; } 728 736 UInt getWPBiPredIdc () { return m_uiBiPredIdc; } 729 737 -
source/Lib/TLibDecoder/TDecCAVLC.cpp
1185 1185 } 1186 1186 #endif 1187 1187 1188 // num_ref_idx_l0_default_active_minus1 1189 // num_ref_idx_l1_default_active_minus1 1188 READ_CODE(3,uiCode, "num_ref_idx_l0_default_active_minus1"); pcPPS->setNumRefIdxL0DefaultActive(uiCode+1); 1189 READ_CODE(3,uiCode, "num_ref_idx_l1_default_active_minus1"); pcPPS->setNumRefIdxL1DefaultActive(uiCode+1); 1190 1190 1191 READ_SVLC(iCode, "pic_init_qp_minus26" ); pcPPS->setPicInitQPMinus26(iCode); 1191 1192 READ_FLAG( uiCode, "constrained_intra_pred_flag" ); pcPPS->setConstrainedIntraPred( uiCode ? true : false ); 1192 1193 READ_FLAG( uiCode, "enable_temporal_mvp_flag" ); pcPPS->setEnableTMVPFlag( uiCode ? true : false ); … … 1809 1810 } 1810 1811 else 1811 1812 { 1812 rpcSlice->setNumRefIdx(REF_PIC_LIST_0, 0); 1813 rpcSlice->setNumRefIdx(REF_PIC_LIST_1, 0); 1813 rpcSlice->setNumRefIdx(REF_PIC_LIST_0, rpcSlice->getPPS()->getNumRefIdxL0DefaultActive()); 1814 if (rpcSlice->isInterB()) 1815 { 1816 rpcSlice->setNumRefIdx(REF_PIC_LIST_1, rpcSlice->getPPS()->getNumRefIdxL1DefaultActive()); 1817 } 1818 else 1819 { 1820 rpcSlice->setNumRefIdx(REF_PIC_LIST_1,0); 1821 } 1814 1822 } 1815 1823 } 1816 1824 // } -
source/Lib/TLibEncoder/TEncCavlc.cpp
299 299 WRITE_FLAG( pcPPS->getTLayerSwitchingFlag( i ) ? 1 : 0 , "temporal_layer_switching_point_flag" ); 300 300 } 301 301 #endif 302 // num_ref_idx_l0_default_active_minus1 303 // num_ref_idx_l1_default_active_minus1 302 WRITE_CODE( pcPPS->getNumRefIdxL0DefaultActive()-1, 3, "num_ref_idx_l0_default_active_minus1"); 303 WRITE_CODE( pcPPS->getNumRefIdxL1DefaultActive()-1, 3, "num_ref_idx_l1_default_active_minus1"); 304 304 305 WRITE_SVLC( pcPPS->getPicInitQPMinus26(), "pic_init_qp_minus26"); 305 306 WRITE_FLAG( pcPPS->getConstrainedIntraPred() ? 1 : 0, "constrained_intra_pred_flag" ); 306 307 WRITE_FLAG( pcPPS->getEnableTMVPFlag() ? 1 : 0, "enable_temporal_mvp_flag" ); … … 745 746 WRITE_UVLC( pcSlice->getAPS()->getAPSID(), "aps_id"); 746 747 } 747 748 748 // we always set num_ref_idx_active_override_flag equal to one. this might be done in a more intelligent way 749 //check if numrefidxes match the defaults. If not, override 750 Bool bOverride = (pcSlice->getNumRefIdx( REF_PIC_LIST_0 )!=pcSlice->getPPS()->getNumRefIdxL0DefaultActive()||(pcSlice->isInterB()&&pcSlice->getNumRefIdx( REF_PIC_LIST_1 )!=pcSlice->getPPS()->getNumRefIdxL1DefaultActive())); 749 751 if (!pcSlice->isIntra()) 750 752 { 751 WRITE_FLAG( 1 , "num_ref_idx_active_override_flag"); 752 WRITE_CODE( pcSlice->getNumRefIdx( REF_PIC_LIST_0 ) - 1, 3, "num_ref_idx_l0_active_minus1" ); 753 if (bOverride) 754 { 755 WRITE_FLAG( 1 , "num_ref_idx_active_override_flag"); 756 WRITE_CODE( pcSlice->getNumRefIdx( REF_PIC_LIST_0 ) - 1, 3, "num_ref_idx_l0_active_minus1" ); 757 } 758 else 759 { 760 WRITE_FLAG( 0 , "num_ref_idx_active_override_flag"); 761 } 753 762 } 754 763 else 755 764 { … … 757 766 } 758 767 if (pcSlice->isInterB()) 759 768 { 760 WRITE_CODE( pcSlice->getNumRefIdx( REF_PIC_LIST_1 ) - 1, 3, "num_ref_idx_l1_active_minus1" ); 769 if(bOverride) 770 { 771 WRITE_CODE( pcSlice->getNumRefIdx( REF_PIC_LIST_1 ) - 1, 3, "num_ref_idx_l1_active_minus1" ); 772 } 761 773 } 762 774 else 763 775 { -
source/Lib/TLibEncoder/TEncTop.cpp
722 722 #if CABAC_INIT_FLAG 723 723 m_cPPS.setCabacInitPresentFlag(CABAC_INIT_PRESENT_FLAG); 724 724 #endif 725 726 Int histogram[8]; 727 for(Int i=0; i<8; i++) 728 { 729 histogram[i]=0; 730 } 731 for( Int i = 0; i < getGOPSize(); i++) 732 { 733 if(getGOPEntry(i).m_numRefPicsActive<8) 734 histogram[getGOPEntry(i).m_numRefPicsActive]++; 735 } 736 Int maxHist=-1; 737 Int bestPos=0; 738 for(Int i=0; i<8; i++) 739 { 740 if(histogram[i]>maxHist) 741 { 742 maxHist=histogram[i]; 743 bestPos=i; 744 } 745 } 746 m_cPPS.setNumRefIdxL0DefaultActive(bestPos); 747 m_cPPS.setNumRefIdxL1DefaultActive(bestPos); 725 748 } 726 749 727 750 //Function for initializing m_RPSList, a list of TComReferencePictureSet, based on the GOPEntry objects read from the config file.