Ticket #394: NewSliceModePatchForHM6.0dev.patch
File NewSliceModePatchForHM6.0dev.patch, 16.9 KB (added by shilin.xu, 11 years ago) |
---|
-
cfg/encoder_intra_he10.cfg
64 64 SliceMode : 0 # 0: Disable all slice options. 65 65 # 1: Enforce maximum number of LCU in an slice, 66 66 # 2: Enforce maximum number of bytes in an 'slice' 67 # 3: Enforce maximum number of tiles in a slice 67 68 SliceArgument : 1500 # Argument for 'SliceMode'. 68 69 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 69 70 # If SliceMode==2 it represents max. bytes per slice. 71 # If SliceMode==3 it represents max. tiles per slice. 70 72 71 73 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 72 74 # 0:not across, 1: across -
cfg/encoder_intra_main.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_lowdelay_he10.cfg
70 70 SliceMode : 0 # 0: Disable all slice options. 71 71 # 1: Enforce maximum number of LCU in an slice, 72 72 # 2: Enforce maximum number of bytes in an 'slice' 73 # 3: Enforce maximum number of tiles in a slice 73 74 SliceArgument : 1500 # Argument for 'SliceMode'. 74 75 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 75 76 # If SliceMode==2 it represents max. bytes per slice. 77 # If SliceMode==3 it represents max. tiles per slice. 76 78 77 79 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 78 80 # 0:not across, 1: across -
cfg/encoder_lowdelay_main.cfg
70 70 SliceMode : 0 # 0: Disable all slice options. 71 71 # 1: Enforce maximum number of LCU in an slice, 72 72 # 2: Enforce maximum number of bytes in an 'slice' 73 # 3: Enforce maximum number of tiles in a slice 73 74 SliceArgument : 1500 # Argument for 'SliceMode'. 74 75 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 75 76 # If SliceMode==2 it represents max. bytes per slice. 77 # If SliceMode==3 it represents max. tiles per slice. 76 78 77 79 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 78 80 # 0:not across, 1: across -
cfg/encoder_lowdelay_P_he10.cfg
70 70 SliceMode : 0 # 0: Disable all slice options. 71 71 # 1: Enforce maximum number of LCU in an slice, 72 72 # 2: Enforce maximum number of bytes in an 'slice' 73 # 3: Enforce maximum number of tiles in a slice 73 74 SliceArgument : 1500 # Argument for 'SliceMode'. 74 75 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 75 76 # If SliceMode==2 it represents max. bytes per slice. 77 # If SliceMode==3 it represents max. tiles per slice. 76 78 77 79 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 78 80 # 0:not across, 1: across -
cfg/encoder_lowdelay_P_main.cfg
70 70 SliceMode : 0 # 0: Disable all slice options. 71 71 # 1: Enforce maximum number of LCU in an slice, 72 72 # 2: Enforce maximum number of bytes in an 'slice' 73 # 3: Enforce maximum number of tiles in a slice 73 74 SliceArgument : 1500 # Argument for 'SliceMode'. 74 75 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 75 76 # If SliceMode==2 it represents max. bytes per slice. 77 # If SliceMode==3 it represents max. tiles per slice. 76 78 77 79 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 78 80 # 0:not across, 1: across -
cfg/encoder_randomaccess_he10.cfg
75 75 SliceMode : 0 # 0: Disable all slice options. 76 76 # 1: Enforce maximum number of LCU in an slice, 77 77 # 2: Enforce maximum number of bytes in an 'slice' 78 # 3: Enforce maximum number of tiles in a slice 78 79 SliceArgument : 1500 # Argument for 'SliceMode'. 79 80 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 80 81 # If SliceMode==2 it represents max. bytes per slice. 82 # If SliceMode==3 it represents max. tiles per slice. 81 83 82 84 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 83 85 # 0:not across, 1: across -
cfg/encoder_randomaccess_main.cfg
75 75 SliceMode : 0 # 0: Disable all slice options. 76 76 # 1: Enforce maximum number of LCU in an slice, 77 77 # 2: Enforce maximum number of bytes in an 'slice' 78 # 3: Enforce maximum number of tiles in a slice 78 79 SliceArgument : 1500 # Argument for 'SliceMode'. 79 80 # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice. 80 81 # If SliceMode==2 it represents max. bytes per slice. 82 # If SliceMode==3 it represents max. tiles per slice. 81 83 82 84 LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary. 83 85 # 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 #if FIXED_NUMBER_OF_TILES_SLICE_MODE 506 xConfirmPara( m_iSliceMode < 0 || m_iSliceMode > 3, "SliceMode exceeds supported range (0 to 3)" ); 507 #endif 506 508 if (m_iSliceMode!=0) 507 509 { 508 510 xConfirmPara( m_iSliceArgument < 1 , "SliceArgument should be larger than or equal to 1" ); 509 511 } 512 #if FIXED_NUMBER_OF_TILES_SLICE_MODE 513 if (m_iSliceMode==3) 514 { 515 xConfirmPara( m_iSliceGranularity > 0 , "When SliceMode == 3 is chosen, the SliceGranularity must be 0" ); 516 } 517 #endif 510 518 xConfirmPara( m_iEntropySliceMode < 0 || m_iEntropySliceMode > 2, "EntropySliceMode exceeds supported range (0 to 2)" ); 511 519 if (m_iEntropySliceMode!=0) 512 520 { -
source/App/TAppEncoder/TAppEncTop.cpp
207 207 { 208 208 m_cTEncTop.setSliceArgument ( m_iSliceArgument * ( iNumPartInCU >> ( m_iSliceGranularity << 1 ) ) ); 209 209 } 210 #if FIXED_NUMBER_OF_TILES_SLICE_MODE 211 if(m_iSliceMode==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE) 212 { 213 m_cTEncTop.setSliceArgument ( m_iSliceArgument ); 214 } 215 #endif 210 216 211 217 m_cTEncTop.setSliceGranularity ( m_iSliceGranularity ); 212 218 if(m_iSliceMode == 0 ) -
source/Lib/TLibCommon/TypeDef.h
211 211 212 212 #define FULL_NBIT 0 ///< When enabled, does not use g_uiBitIncrement anymore to support > 8 bit data 213 213 214 #define FIXED_NUMBER_OF_TILES_SLICE_MODE 1 214 215 #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 215 216 #define AD_HOC_SLICES_FIXED_NUMBER_OF_BYTES_IN_SLICE 2 ///< OPTION IDENTIFIER. mode==2 -> Limit maximum number of bins/bits in a slice 217 #if FIXED_NUMBER_OF_TILES_SLICE_MODE 218 #define AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE 3 219 #endif 216 220 217 221 // Entropy slice options 218 222 #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
1226 1226 { 1227 1227 TComSlice* pcSlice = rpcPic->getSlice(getSliceIdx()); 1228 1228 UInt uiStartCUAddrSlice, uiBoundingCUAddrSlice; 1229 #if FIXED_NUMBER_OF_TILES_SLICE_MODE 1230 UInt uiTileIdxIncrement; 1231 UInt uiTileIdx; 1232 UInt uiTileWidthInLcu; 1233 UInt uiTileHeightInLcu; 1234 UInt uiTileTotalCount; 1235 #endif 1236 1229 1237 uiStartCUAddrSlice = pcSlice->getSliceCurStartCUAddr(); 1230 1238 UInt uiNumberOfCUsInFrame = rpcPic->getNumCUsInFrame(); 1231 1239 uiBoundingCUAddrSlice = uiNumberOfCUsInFrame; … … 1242 1250 uiCUAddrIncrement = rpcPic->getNumCUsInFrame(); 1243 1251 uiBoundingCUAddrSlice = pcSlice->getSliceCurEndCUAddr(); 1244 1252 break; 1253 #if FIXED_NUMBER_OF_TILES_SLICE_MODE 1254 case AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE: 1255 uiTileIdx = rpcPic->getPicSym()->getTileIdxMap( 1256 rpcPic->getPicSym()->getCUOrderMap(uiStartCUAddrSlice/rpcPic->getNumPartInCU()) 1257 ); 1258 uiCUAddrIncrement = 0; 1259 uiTileTotalCount = (rpcPic->getPicSym()->getNumColumnsMinus1()+1) * (rpcPic->getPicSym()->getNumRowsMinus1()+1); 1260 1261 for(uiTileIdxIncrement = 0; uiTileIdxIncrement < m_pcCfg->getSliceArgument(); uiTileIdxIncrement++) 1262 { 1263 if((uiTileIdx + uiTileIdxIncrement) < uiTileTotalCount) 1264 { 1265 uiTileWidthInLcu = rpcPic->getPicSym()->getTComTile(uiTileIdx + uiTileIdxIncrement)->getTileWidth(); 1266 uiTileHeightInLcu = rpcPic->getPicSym()->getTComTile(uiTileIdx + uiTileIdxIncrement)->getTileHeight(); 1267 uiCUAddrIncrement += (uiTileWidthInLcu * uiTileHeightInLcu * rpcPic->getNumPartInCU()) >> (m_pcCfg->getSliceGranularity() << 1); 1268 } 1269 } 1270 1271 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1272 break; 1273 #endif 1245 1274 default: 1246 1275 uiCUAddrIncrement = rpcPic->getNumCUsInFrame(); 1247 1276 uiBoundingCUAddrSlice = uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); … … 1258 1287 uiCUAddrIncrement = m_pcCfg->getSliceArgument(); 1259 1288 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1260 1289 break; 1290 #if FIXED_NUMBER_OF_TILES_SLICE_MODE 1291 case AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE: 1292 uiTileIdx = rpcPic->getPicSym()->getTileIdxMap( 1293 rpcPic->getPicSym()->getCUOrderMap(uiStartCUAddrSlice/rpcPic->getNumPartInCU()) 1294 ); 1295 uiCUAddrIncrement = 0; 1296 uiTileTotalCount = (rpcPic->getPicSym()->getNumColumnsMinus1()+1) * (rpcPic->getPicSym()->getNumRowsMinus1()+1); 1297 1298 for(uiTileIdxIncrement = 0; uiTileIdxIncrement < m_pcCfg->getSliceArgument(); uiTileIdxIncrement++) 1299 { 1300 if((uiTileIdx + uiTileIdxIncrement) < uiTileTotalCount) 1301 { 1302 uiTileWidthInLcu = rpcPic->getPicSym()->getTComTile(uiTileIdx + uiTileIdxIncrement)->getTileWidth(); 1303 uiTileHeightInLcu = rpcPic->getPicSym()->getTComTile(uiTileIdx + uiTileIdxIncrement)->getTileHeight(); 1304 uiCUAddrIncrement += (uiTileWidthInLcu * uiTileHeightInLcu * rpcPic->getNumPartInCU()) >> (m_pcCfg->getSliceGranularity() << 1); 1305 } 1306 } 1307 1308 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1309 break; 1310 #endif 1261 1311 default: 1262 1312 uiCUAddrIncrement = rpcPic->getNumCUsInFrame(); 1263 1313 uiBoundingCUAddrSlice = uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); … … 1368 1418 // first. Set the flags accordingly. 1369 1419 if ( (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE && m_pcCfg->getEntropySliceMode()==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE) 1370 1420 || (m_pcCfg->getSliceMode()==0 && m_pcCfg->getEntropySliceMode()==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE) 1371 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE && m_pcCfg->getEntropySliceMode()==0) ) 1421 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE && m_pcCfg->getEntropySliceMode()==0) 1422 #if FIXED_NUMBER_OF_TILES_SLICE_MODE 1423 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE && m_pcCfg->getEntropySliceMode()==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE) 1424 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE && m_pcCfg->getEntropySliceMode()==0) 1425 #endif 1426 ) 1372 1427 { 1373 1428 if (uiBoundingCUAddrSlice < uiBoundingCUAddrEntropySlice) 1374 1429 {