Ticket #394: NewSliceModePatchForHM6.0rc1.patch
File NewSliceModePatchForHM6.0rc1.patch, 16.5 KB (added by shilin.xu, 11 years ago) |
---|
-
cfg/encoder_intra_he10.cfg
65 65 SliceMode : 0 # 0: Disable all slice options. 66 66 # 1: Enforce maximum number of LCU in an slice, 67 67 # 2: Enforce maximum number of bytes in an 'slice' 68 # 3: Enforce maximum number of tiles in a slice 68 69 SliceArgument : 1500 # Argument for 'SliceMode'. 69 70 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 70 71 # If SliceMode==2 it represents max. bytes per slice. 72 # If SliceMode==3 it represents max. tiles per slice. 71 73 72 74 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 73 75 # 0:not across, 1: across -
cfg/encoder_intra_main.cfg
66 66 SliceMode : 0 # 0: Disable all slice options. 67 67 # 1: Enforce maximum number of LCU in an slice, 68 68 # 2: Enforce maximum number of bytes in an 'slice' 69 # 3: Enforce maximum number of tiles in a slice 69 70 SliceArgument : 1500 # Argument for 'SliceMode'. 70 71 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 71 72 # If SliceMode==2 it represents max. bytes per slice. 73 # If SliceMode==3 it represents max. tiles per slice. 72 74 73 75 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 74 76 # 0:not across, 1: across -
cfg/encoder_lowdelay_he10.cfg
71 71 SliceMode : 0 # 0: Disable all slice options. 72 72 # 1: Enforce maximum number of LCU in an slice, 73 73 # 2: Enforce maximum number of bytes in an 'slice' 74 # 3: Enforce maximum number of tiles in a slice 74 75 SliceArgument : 1500 # Argument for 'SliceMode'. 75 76 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 76 77 # If SliceMode==2 it represents max. bytes per slice. 78 # If SliceMode==3 it represents max. tiles per slice. 77 79 78 80 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 79 81 # 0:not across, 1: across -
cfg/encoder_lowdelay_main.cfg
71 71 SliceMode : 0 # 0: Disable all slice options. 72 72 # 1: Enforce maximum number of LCU in an slice, 73 73 # 2: Enforce maximum number of bytes in an 'slice' 74 # 3: Enforce maximum number of tiles in a slice 74 75 SliceArgument : 1500 # Argument for 'SliceMode'. 75 76 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 76 77 # If SliceMode==2 it represents max. bytes per slice. 78 # If SliceMode==3 it represents max. tiles per slice. 77 79 78 80 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 79 81 # 0:not across, 1: across -
cfg/encoder_lowdelay_P_he10.cfg
71 71 SliceMode : 0 # 0: Disable all slice options. 72 72 # 1: Enforce maximum number of LCU in an slice, 73 73 # 2: Enforce maximum number of bytes in an 'slice' 74 # 3: Enforce maximum number of tiles in a slice 74 75 SliceArgument : 1500 # Argument for 'SliceMode'. 75 76 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 76 77 # If SliceMode==2 it represents max. bytes per slice. 78 # If SliceMode==3 it represents max. tiles per slice. 77 79 78 80 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 79 81 # 0:not across, 1: across -
cfg/encoder_lowdelay_P_main.cfg
71 71 SliceMode : 0 # 0: Disable all slice options. 72 72 # 1: Enforce maximum number of LCU in an slice, 73 73 # 2: Enforce maximum number of bytes in an 'slice' 74 # 3: Enforce maximum number of tiles in a slice 74 75 SliceArgument : 1500 # Argument for 'SliceMode'. 75 76 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 76 77 # If SliceMode==2 it represents max. bytes per slice. 78 # If SliceMode==3 it represents max. tiles per slice. 77 79 78 80 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 79 81 # 0:not across, 1: across -
cfg/encoder_randomaccess_he10.cfg
76 76 SliceMode : 0 # 0: Disable all slice options. 77 77 # 1: Enforce maximum number of LCU in an slice, 78 78 # 2: Enforce maximum number of bytes in an 'slice' 79 # 3: Enforce maximum number of tiles in a slice 79 80 SliceArgument : 1500 # Argument for 'SliceMode'. 80 81 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 81 82 # If SliceMode==2 it represents max. bytes per slice. 83 # If SliceMode==3 it represents max. tiles per slice. 82 84 83 85 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 84 86 # 0:not across, 1: across -
cfg/encoder_randomaccess_main.cfg
76 76 SliceMode : 0 # 0: Disable all slice options. 77 77 # 1: Enforce maximum number of LCU in an slice, 78 78 # 2: Enforce maximum number of bytes in an 'slice' 79 # 3: Enforce maximum number of tiles in a slice 79 80 SliceArgument : 1500 # Argument for 'SliceMode'. 80 81 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 81 82 # If SliceMode==2 it represents max. bytes per slice. 83 # If SliceMode==3 it represents max. tiles per slice. 82 84 83 85 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 84 86 # 0:not across, 1: across -
source/App/TAppEncoder/TAppEncCfg.cpp
502 502 xConfirmPara( m_pcmLog2MaxSize < m_uiPCMLog2MinSize, "PCMLog2MaxSize must be equal to or greater than m_uiPCMLog2MinSize."); 503 503 } 504 504 505 xConfirmPara( m_iSliceMode < 0 || m_iSliceMode > 2, "SliceMode exceeds supported range (0 to 2)" );505 xConfirmPara( m_iSliceMode < 0 || m_iSliceMode > 3, "SliceMode exceeds supported range (0 to 3)" ); 506 506 if (m_iSliceMode!=0) 507 507 { 508 508 xConfirmPara( m_iSliceArgument < 1 , "SliceArgument should be larger than or equal to 1" ); 509 509 } 510 if (m_iSliceMode==3) 511 { 512 xConfirmPara( m_iSliceGranularity > 0 , "When SliceMode == 3 is chosen, the SliceGranularity must be 0" ); 513 } 510 514 xConfirmPara( m_iEntropySliceMode < 0 || m_iEntropySliceMode > 2, "EntropySliceMode exceeds supported range (0 to 2)" ); 511 515 if (m_iEntropySliceMode!=0) 512 516 { -
source/App/TAppEncoder/TAppEncTop.cpp
189 189 { 190 190 m_cTEncTop.setSliceArgument ( m_iSliceArgument * ( iNumPartInCU >> ( m_iSliceGranularity << 1 ) ) ); 191 191 } 192 if(m_iSliceMode==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE) 193 { 194 m_cTEncTop.setSliceArgument ( m_iSliceArgument ); 195 } 192 196 193 197 m_cTEncTop.setSliceGranularity ( m_iSliceGranularity ); 194 198 if(m_iSliceMode == 0 ) -
source/Lib/TLibCommon/TypeDef.h
198 198 199 199 #define AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE 1 ///< OPTION IDENTIFIER. mode==1 -> Limit maximum number of largest coding tree blocks in a slice 200 200 #define AD_HOC_SLICES_FIXED_NUMBER_OF_BYTES_IN_SLICE 2 ///< OPTION IDENTIFIER. mode==2 -> Limit maximum number of bins/bits in a slice 201 #define AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE 3 201 202 202 203 // Entropy slice options 203 204 #define SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE 1 ///< OPTION IDENTIFIER. Limit maximum number of largest coding tree blocks in an entropy slice -
source/Lib/TLibEncoder/TEncSlice.cpp
1156 1156 { 1157 1157 TComSlice* pcSlice = rpcPic->getSlice(getSliceIdx()); 1158 1158 UInt uiStartCUAddrSlice, uiBoundingCUAddrSlice; 1159 UInt uiCUAddrIncrement; 1160 UInt uiTileIdxIncrement; 1161 UInt uiTileIdx; 1162 UInt uiTileWidthInLcu; 1163 UInt uiTileHeightInLcu; 1164 UInt uiTileTotalCount; 1165 1159 1166 uiStartCUAddrSlice = pcSlice->getSliceCurStartCUAddr(); 1160 1167 UInt uiNumberOfCUsInFrame = rpcPic->getNumCUsInFrame(); 1161 1168 uiBoundingCUAddrSlice = uiNumberOfCUsInFrame; 1162 1169 if (bEncodeSlice) 1163 1170 { 1164 UInt uiCUAddrIncrement;1165 1171 switch (m_pcCfg->getSliceMode()) 1166 1172 { 1167 1173 case AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE: … … 1172 1178 uiCUAddrIncrement = rpcPic->getNumCUsInFrame(); 1173 1179 uiBoundingCUAddrSlice = pcSlice->getSliceCurEndCUAddr(); 1174 1180 break; 1181 case AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE: 1182 uiTileIdx = rpcPic->getPicSym()->getTileIdxMap( 1183 rpcPic->getPicSym()->getCUOrderMap(uiStartCUAddrSlice/rpcPic->getNumPartInCU()) 1184 ); 1185 uiCUAddrIncrement = 0; 1186 uiTileTotalCount = (rpcPic->getPicSym()->getNumColumnsMinus1()+1) * (rpcPic->getPicSym()->getNumRowsMinus1()+1); 1187 1188 for(uiTileIdxIncrement = 0; uiTileIdxIncrement < m_pcCfg->getSliceArgument(); uiTileIdxIncrement++) 1189 { 1190 if((uiTileIdx + uiTileIdxIncrement) < uiTileTotalCount) 1191 { 1192 uiTileWidthInLcu = rpcPic->getPicSym()->getTComTile(uiTileIdx + uiTileIdxIncrement)->getTileWidth(); 1193 uiTileHeightInLcu = rpcPic->getPicSym()->getTComTile(uiTileIdx + uiTileIdxIncrement)->getTileHeight(); 1194 uiCUAddrIncrement += (uiTileWidthInLcu * uiTileHeightInLcu * rpcPic->getNumPartInCU()) >> (m_pcCfg->getSliceGranularity() << 1); 1195 } 1196 } 1197 1198 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1199 break; 1175 1200 default: 1176 1201 uiCUAddrIncrement = rpcPic->getNumCUsInFrame(); 1177 1202 uiBoundingCUAddrSlice = uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); … … 1181 1206 } 1182 1207 else 1183 1208 { 1184 UInt uiCUAddrIncrement ;1185 1209 switch (m_pcCfg->getSliceMode()) 1186 1210 { 1187 1211 case AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE: 1188 1212 uiCUAddrIncrement = m_pcCfg->getSliceArgument(); 1189 1213 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1190 1214 break; 1215 case AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE: 1216 uiTileIdx = rpcPic->getPicSym()->getTileIdxMap( 1217 rpcPic->getPicSym()->getCUOrderMap(uiStartCUAddrSlice/rpcPic->getNumPartInCU()) 1218 ); 1219 uiCUAddrIncrement = 0; 1220 uiTileTotalCount = (rpcPic->getPicSym()->getNumColumnsMinus1()+1) * (rpcPic->getPicSym()->getNumRowsMinus1()+1); 1221 1222 for(uiTileIdxIncrement = 0; uiTileIdxIncrement < m_pcCfg->getSliceArgument(); uiTileIdxIncrement++) 1223 { 1224 if((uiTileIdx + uiTileIdxIncrement) < uiTileTotalCount) 1225 { 1226 uiTileWidthInLcu = rpcPic->getPicSym()->getTComTile(uiTileIdx + uiTileIdxIncrement)->getTileWidth(); 1227 uiTileHeightInLcu = rpcPic->getPicSym()->getTComTile(uiTileIdx + uiTileIdxIncrement)->getTileHeight(); 1228 uiCUAddrIncrement += (uiTileWidthInLcu * uiTileHeightInLcu * rpcPic->getNumPartInCU()) >> (m_pcCfg->getSliceGranularity() << 1); 1229 } 1230 } 1231 1232 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1233 break; 1191 1234 default: 1192 1235 uiCUAddrIncrement = rpcPic->getNumCUsInFrame(); 1193 1236 uiBoundingCUAddrSlice = uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); … … 1298 1341 // first. Set the flags accordingly. 1299 1342 if ( (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE && m_pcCfg->getEntropySliceMode()==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE) 1300 1343 || (m_pcCfg->getSliceMode()==0 && m_pcCfg->getEntropySliceMode()==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE) 1301 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE && m_pcCfg->getEntropySliceMode()==0) ) 1344 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE && m_pcCfg->getEntropySliceMode()==0) 1345 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE && m_pcCfg->getEntropySliceMode()==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE) 1346 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE && m_pcCfg->getEntropySliceMode()==0) ) 1302 1347 { 1303 1348 if (uiBoundingCUAddrSlice < uiBoundingCUAddrEntropySlice) 1304 1349 {