Changeset 1066 in 3DVCSoftware for trunk/source
- Timestamp:
- 13 Oct 2014, 12:19:36 (10 years ago)
- Location:
- trunk/source
- Files:
-
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/App/TAppDecoder/TAppDecCfg.cpp
r872 r1066 94 94 ("TarDecLayerIdSetFile,l", cfg_TargetDecLayerIdSetFile, string(""), "targetDecLayerIdSet file name. The file should include white space separated LayerId values to be decoded. Omitting the option or a value of -1 in the file decodes all layers.") 95 95 ("RespectDefDispWindow,w", m_respectDefDispWindow, 0, "Only output content inside the default display window\n") 96 #if H_MV 97 #if H_MV_HLS10_GEN_FIX 98 ("OutputVpsInfo,v", m_outputVpsInfo, false, "Output information about the layer dependencies and layer sets") 99 #endif 100 #endif 96 101 ; 97 102 po::setDefaults(opts); -
trunk/source/App/TAppDecoder/TAppDecCfg.h
r964 r1066 80 80 81 81 #if H_MV 82 #if H_MV_HLS10_GEN_FIX 83 Bool m_outputVpsInfo; ///< Output VPS information 84 #endif 82 85 Void xAppendToFileNameEnd( Char* pchInputFileName, const Char* pchStringToAppend, Char*& rpchOutputFileName); ///< create filenames 83 86 #endif -
trunk/source/App/TAppDecoder/TAppDecTop.cpp
r976 r1066 239 239 { 240 240 TComVPS* vps = m_vps; 241 if ( m_targetOptLayerSetIdx == -1 ) 241 if ( m_targetOptLayerSetIdx == -1 ) 242 { 243 // Not normative! Corresponds to specification by "External Means". (Should be set equal to 0, when no external means available. ) 244 m_targetOptLayerSetIdx = vps->getVpsNumLayerSetsMinus1(); 245 } 246 247 for (Int dI = 0; dI < m_numDecoders; dI++ ) 248 { 249 m_tDecTop[decIdx]->setTargetOptLayerSetIdx( m_targetOptLayerSetIdx ); 250 } 251 252 if ( m_targetOptLayerSetIdx < 0 || m_targetOptLayerSetIdx >= vps->getNumOutputLayerSets() ) 253 { 254 fprintf(stderr, "\ntarget output layer set index must be in the range of 0 to %d, inclusive \n", vps->getNumOutputLayerSets() - 1 ); 255 exit(EXIT_FAILURE); 256 } 257 m_targetDecLayerIdSet = vps->getTargetDecLayerIdList( m_targetOptLayerSetIdx ); 258 } 259 #if H_MV_HLS10_GEN_FIX 260 if (m_outputVpsInfo ) 242 261 { 243 // Not normative! Corresponds to specification by "External Means". (Should be set equal to 0, when no external means available. ) 244 m_targetOptLayerSetIdx = vps->getVpsNumLayerSetsMinus1(); 262 #if H_MV_HLS10_AUX 263 m_vps->printScalabilityId(); 264 #endif 265 m_vps->printLayerDependencies(); 266 m_vps->printLayerSets(); 267 m_vps->printPTL(); 245 268 } 246 247 for (Int dI = 0; dI < m_numDecoders; dI++ ) 248 { 249 m_tDecTop[decIdx]->setTargetOptLayerSetIdx( m_targetOptLayerSetIdx ); 250 } 251 252 if ( m_targetOptLayerSetIdx < 0 || m_targetOptLayerSetIdx >= vps->getNumOutputLayerSets() ) 253 { 254 fprintf(stderr, "\ntarget output layer set index must be in the range of 0 to %d, inclusive \n", vps->getNumOutputLayerSets() - 1 ); 255 exit(EXIT_FAILURE); 256 } 257 m_targetDecLayerIdSet = vps->getTargetDecLayerIdList( m_targetOptLayerSetIdx ); 258 } 259 } 269 #endif 270 } 260 271 #if H_3D 261 272 if (nalu.m_nalUnitType == NAL_UNIT_VPS ) … … 569 580 Int dpbFullness = 0; 570 581 #if H_MV 582 #if H_MV_HLS10_ADD_LAYERSETS 583 TComSPS* activeSPS = m_tDecTop[ decIdx ]->getActiveSPS(); 584 #else 571 585 // preliminary fix 572 586 TComSPS* activeSPS = m_tDecTop[0]->getActiveSPS(); 587 #endif 573 588 #else 574 589 TComSPS* activeSPS = m_cTDecTop.getActiveSPS(); … … 1140 1155 Int curLayerId = m_tDecTop[dIdx]->getLayerId(); 1141 1156 Int curLayerIdxInVps = m_vps->getLayerIdInNuh( curLayerId ); 1157 #if H_MV_HLS10_REF_PRED_LAYERS 1158 if ( m_vps->getDependencyFlag(optLayerIdxInVps, curLayerIdxInVps ) ) 1159 #else 1142 1160 if ( m_vps->getInDirectDependencyFlag(optLayerIdxInVps, curLayerIdxInVps ) ) 1161 #endif 1143 1162 { 1144 1163 TComPic* curPic = m_ivPicLists.getPic( curLayerId, pocLastPic ); -
trunk/source/App/TAppEncoder/TAppEncCfg.cpp
r1039 r1066 241 241 {"main-still-picture", Profile::MAINSTILLPICTURE}, 242 242 #if H_MV 243 #if H_MV_HLS10_PTL 244 {"multiview-main", Profile::MULTIVIEWMAIN}, 245 #if H_3D 246 {"3d-main" , Profile::MAIN3D}, 247 #endif 248 249 #else 243 250 {"main-stereo", Profile::MAINSTEREO}, 244 251 {"main-multiview", Profile::MAINMULTIVIEW}, 245 252 #if H_3D 246 253 {"main-3d" , Profile::MAIN3D}, 254 #endif 247 255 #endif 248 256 #endif … … 333 341 #if H_MV 334 342 vector<Int> cfg_dimensionLength; 343 #if H_MV_HLS10_PTL 344 string cfg_profiles; 345 string cfg_levels; 346 string cfg_tiers; 347 #endif 335 348 #if H_3D 336 349 cfg_dimensionLength.push_back( 2 ); // depth … … 367 380 ("NumberOfLayers", m_numberOfLayers , 1, "Number of layers") 368 381 #if !H_3D 382 #if H_MV_HLS10_AUX 383 ("ScalabilityMask", m_scalabilityMask , 2 , "Scalability Mask: 2: Multiview, 8: Auxiliary, 10: Multiview + Auxiliary") 384 #else 369 385 ("ScalabilityMask", m_scalabilityMask , 2 , "Scalability Mask") 386 #endif 370 387 #else 371 388 ("ScalabilityMask", m_scalabilityMask , 3 , "Scalability Mask, 1: Texture 3: Texture + Depth ") … … 374 391 ("ViewOrderIndex", m_viewOrderIndex , std::vector<Int>(1,0), "View Order Index per layer") 375 392 ("ViewId", m_viewId , std::vector<Int>(1,0), "View Id per View Order Index") 393 #if H_MV_HLS10_AUX 394 ("AuxId", m_auxId , std::vector<Int>(1,0), "AuxId per layer") 395 #endif 376 396 #if H_3D 377 397 ("DepthFlag", m_depthFlag , std::vector<Int>(1,0), "Depth Flag") … … 388 408 #endif 389 409 #endif 390 ("LayerIdInNuh", m_layerIdInNuh , std::vector<Int>(1,0), "LayerId in Nuh") 410 #if H_MV_HLS10_GEN_FIX 411 ("TargetEncLayerIdList", m_targetEncLayerIdList, std::vector<Int>(0,0), "LayerIds in Nuh to be encoded") 412 #endif 413 ("LayerIdInNuh", m_layerIdInNuh , std::vector<Int>(1,0), "LayerId in Nuh") 391 414 ("SplittingFlag", m_splittingFlag , false , "Splitting Flag") 392 415 … … 394 417 ("VpsNumLayerSets", m_vpsNumLayerSets , 1 , "Number of layer sets") 395 418 ("LayerIdsInSet_%d", m_layerIdsInSets , std::vector<Int>(1,0), MAX_VPS_OP_SETS_PLUS1 ,"LayerIds of Layer set") 419 #if H_MV_HLS10_ADD_LAYERSETS 420 ("NumAddLayerSets" , m_numAddLayerSets , 0 , "NumAddLayerSets ") 421 ("HighestLayerIdxPlus1_%d", m_highestLayerIdxPlus1, std::vector< Int >(0,0) ,MAX_VPS_NUM_ADD_LAYER_SETS, "HighestLayerIdxPlus1") 422 #endif 396 423 ("DefaultTargetOutputLayerIdc" , m_defaultOutputLayerIdc , 0, "Specifies output layers of layer sets, 0: output all layers, 1: output highest layer, 2: specified by LayerIdsInDefOutputLayerSet") 397 424 ("OutputLayerSetIdx", m_outputLayerSetIdx , std::vector<Int>(0,0), "Indices of layer sets used as additional output layer sets") … … 400 427 ("LayerIdsInDefOutputLayerSet_%d", m_layerIdsInDefOutputLayerSet , std::vector<Int>(0,0), MAX_VPS_OP_SETS_PLUS1, "Indices in VPS of output layers in layer set") 401 428 ("AltOutputLayerFlag", m_altOutputLayerFlag , std::vector<Bool>(1,0), "Alt output layer flag") 429 430 #if H_MV_HLS10_PTL 431 ("ProfileTierLevelIdx_%d", m_profileTierLevelIdx, std::vector<Int>(0), MAX_NUM_LAYERS, "Indices to profile level tier for ols") 432 #else 402 433 ("ProfileLevelTierIdx", m_profileLevelTierIdx, std::vector<Int>(1,0), "Indices to profile level tier") 403 434 #endif 404 435 // Layer dependencies 405 436 ("DirectRefLayers_%d", m_directRefLayers , std::vector<Int>(0,0), MAX_NUM_LAYERS, "LayerIds of direct reference layers") … … 431 462 432 463 // Profile and level 464 #if H_MV_HLS10_PTL 465 ("Profile", cfg_profiles, string(""), "Profile in VpsProfileTierLevel (Indication only)") 466 ("Level", cfg_levels , string(""), "Level indication in VpsProfileTierLevel (Indication only)") 467 ("Tier", cfg_tiers , string(""), "Tier indication in VpsProfileTierLevel (Indication only)") 468 ("InblFlag",m_inblFlag , std::vector<Bool>(0), "InblFlags in VpsProfileTierLevel (Indication only)" ) 469 #else 433 470 ("Profile", m_profile, Profile::NONE, "Profile to be used when encoding (Incomplete)") 434 471 ("Level", m_level, Level::NONE, "Level limit to be used, eg 5.1 (Incomplete)") 435 472 ("Tier", m_levelTier, Level::MAIN, "Tier to use for interpretation of --Level") 436 473 #endif 437 474 ("ProgressiveSource", m_progressiveSourceFlag, false, "Indicate that source is progressive") 438 475 ("InterlacedSource", m_interlacedSourceFlag, false, "Indicate that source is interlaced") … … 613 650 #endif 614 651 #if H_MV 615 652 #if H_MV_HLS10_GEN_FIX 653 // A lot of this stuff could should actually be derived by the encoder. 654 #endif // H_MV_HLS10_GEN 616 655 // VPS VUI 617 656 ("VpsVuiPresentFlag" , m_vpsVuiPresentFlag , false , "VpsVuiPresentFlag ") … … 637 676 ("CtuBasedOffsetEnabledFlag" , m_ctuBasedOffsetEnabledFlag , std::vector< Bool >(1,0) ,MAX_NUM_LAYERS , "CtuBasedOffsetEnabledFlag per direct reference for the N-th layer") 638 677 ("MinHorizontalCtuOffsetPlus1" , m_minHorizontalCtuOffsetPlus1 , std::vector< Int >(1,0) ,MAX_NUM_LAYERS , "MinHorizontalCtuOffsetPlus1 per direct reference for the N-th layer") 678 #if H_MV_HLS10_VPS_VUI 679 ("SingleLayerForNonIrapFlag", m_singleLayerForNonIrapFlag, false , "SingleLayerForNonIrapFlag") 680 ("HigherLayerIrapSkipFlag" , m_higherLayerIrapSkipFlag , false , "HigherLayerIrapSkipFlag ") 681 #endif 639 682 #endif 640 683 … … 742 785 ("SEISubBitstreamAvgBitRate", m_sbPropAvgBitRate, std::vector< Int >(1,0) ,"Specifies average bit rate of the i-th sub-bitstream") 743 786 ("SEISubBitstreamMaxBitRate", m_sbPropMaxBitRate, std::vector< Int >(1,0) ,"Specifies maximum bit rate of the i-th sub-bitstream") 787 788 #if H_MV_HLS10_GEN_FIX 789 ("OutputVpsInfo", m_outputVpsInfo, false ,"Output information about the layer dependencies and layer sets") 790 #endif 744 791 #endif 745 792 #if H_3D … … 792 839 #endif //H_3D 793 840 ; 794 #if H_MV 841 842 #if H_MV 795 843 // parse coding structure 796 844 for( Int k = 0; k < MAX_NUM_LAYERS; k++ ) … … 1034 1082 } 1035 1083 m_iNumberOfViews = (Int) uniqueViewOrderIndices.size(); 1084 #if H_MV_HLS10_AUX 1085 xResizeVector( m_auxId ); 1086 #endif 1036 1087 1037 1088 #if H_3D … … 1067 1118 xResizeVector( m_wppInUseFlag ); 1068 1119 1120 #if H_MV_HLS10_ADD_LAYERSETS 1121 for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + m_numAddLayerSets + (Int) m_outputLayerSetIdx.size(); olsIdx++) 1122 #else 1069 1123 for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + (Int) m_outputLayerSetIdx.size(); olsIdx++) 1124 #endif 1070 1125 { 1071 1126 m_altOutputLayerFlag.push_back( false ); … … 1177 1232 } 1178 1233 } 1234 1235 #if H_MV 1236 #if H_MV_HLS10_PTL 1237 // parse PTL 1238 Bool anyEmpty = false; 1239 if( cfg_profiles.empty() ) 1240 { 1241 #if H_3D 1242 cfg_profiles = string("main main 3d-main"); 1243 #else 1244 cfg_profiles = string("main main multiview-main"); 1245 #endif 1246 fprintf(stderr, "\nWarning: No profiles given, using defaults: %s", cfg_profiles.c_str() ); 1247 anyEmpty = true; 1248 } 1249 1250 if( cfg_levels.empty() ) 1251 { 1252 cfg_levels = string("none none none"); 1253 fprintf(stderr, "\nWarning: No levels given, using defaults: %s", cfg_levels.c_str() ); 1254 anyEmpty = true; 1255 } 1256 1257 if( cfg_tiers.empty() ) 1258 { 1259 cfg_tiers = string("main main main"); 1260 fprintf(stderr, "\nWarning: No tiers given, using defaults: %s", cfg_tiers.c_str()); 1261 anyEmpty = true; 1262 } 1263 1264 if( m_inblFlag.empty() ) 1265 { 1266 fprintf(stderr, "\nWarning: No inblFlags given, using defaults:"); 1267 for( Int i = 0; i < 3; i++) 1268 { 1269 m_inblFlag.push_back( false ); 1270 fprintf(stderr," %d", (Int) m_inblFlag[i]); 1271 } 1272 anyEmpty = true; 1273 } 1274 1275 if ( anyEmpty ) 1276 { 1277 fprintf( stderr, "\n" ); 1278 } 1279 1280 xReadStrToEnum( cfg_profiles, m_profile ); 1281 xReadStrToEnum( cfg_levels, m_level ); 1282 xReadStrToEnum( cfg_tiers , m_levelTier ); 1283 #endif 1284 #endif 1179 1285 #if H_3D 1180 1286 // set global varibles … … 1291 1397 fprintf(stderr, "******************************************************************\n"); 1292 1398 } 1399 1400 1401 #if !H_MV_HLS10_PTL 1293 1402 if( m_profile==Profile::NONE ) 1294 1403 { … … 1303 1412 fprintf(stderr, "***************************************************************************\n"); 1304 1413 } 1414 #endif 1305 1415 1306 1416 Bool check_failed = false; /* abort if there is a fatal configuration problem */ … … 1321 1431 xConfirmPara( m_scalabilityMask != 2 && m_scalabilityMask != 3, "Scalability Mask must be equal to 2 or 3. "); 1322 1432 #else 1433 #if H_MV_HLS10_AUX 1434 xConfirmPara( m_scalabilityMask != 2 && m_scalabilityMask != 8 && m_scalabilityMask != 10, "Scalability Mask must be equal to 2, 8 or 10"); 1435 #else 1323 1436 xConfirmPara( m_scalabilityMask != 2 , "Scalability Mask must be equal to 2. "); 1437 #endif 1324 1438 #endif 1325 1439 … … 1332 1446 1333 1447 m_dimIds.push_back( m_viewOrderIndex ); 1334 xConfirmPara( m_dimensionIdLen.size() < m_dimIds.size(), "DimensionIdLen must be given for all dimensions. " ); Int dimBitOffset[MAX_NUM_SCALABILITY_TYPES+1]; 1448 #if H_MV_HLS10_AUX 1449 for (Int i = 0; i < m_auxId.size(); i++) 1450 { 1451 xConfirmPara( !( ( m_auxId[i] >= 0 && m_auxId[i] <= 2 ) || ( m_auxId[i] >= 128 && m_auxId[i] <= 159 ) ) , "AuxId shall be in the range of 0 to 2, inclusive, or 128 to 159, inclusive"); 1452 } 1453 if ( m_scalabilityMask & ( 1 << AUX_ID ) ) 1454 { 1455 m_dimIds.push_back ( m_auxId ); 1456 } 1457 #endif 1458 xConfirmPara( m_dimensionIdLen.size() < m_dimIds.size(), "DimensionIdLen must be given for all dimensions. " ); 1459 Int dimBitOffset[MAX_NUM_SCALABILITY_TYPES+1]; 1335 1460 1336 1461 dimBitOffset[ 0 ] = 0; … … 1428 1553 { 1429 1554 Int refLayerSetIdx = m_outputLayerSetIdx[ lsIdx ]; 1555 #if H_MV_HLS10_ADD_LAYERSETS 1556 xConfirmPara( refLayerSetIdx < 0 || refLayerSetIdx >= m_vpsNumLayerSets + m_numAddLayerSets, "Output layer set idx must be greater or equal to 0 and less than the VpsNumLayerSets plus NumAddLayerSets." ); 1557 #else 1430 1558 xConfirmPara( refLayerSetIdx < 0 || refLayerSetIdx >= m_vpsNumLayerSets, "Output layer set idx must be greater or equal to 0 and less than the VpsNumLayerSets." ); 1431 1559 #endif 1560 #if !H_MV_HLS10_ADD_LAYERSETS 1432 1561 for (Int i = 0; i < m_layerIdsInAddOutputLayerSet[ lsIdx ].size(); i++) 1433 1562 { … … 1443 1572 xConfirmPara( !isAlsoInLayerSet, "All output layers of a output layer set be included in corresponding layer set."); 1444 1573 } 1574 #endif 1445 1575 } 1446 1576 … … 1454 1584 anyDefaultOutputFlag = anyDefaultOutputFlag || ( m_layerIdsInDefOutputLayerSet[lsIdx].size() != 0 ); 1455 1585 } 1586 #if H_MV_HLS10_ADD_LAYERSETS 1587 if ( anyDefaultOutputFlag ) 1588 { 1589 printf( "\nWarning: Ignoring LayerIdsInDefOutputLayerSet parameters, since defaultTargetOuputLayerIdc is not equal 2.\n" ); 1590 } 1591 #else 1456 1592 printf( "\nWarning: Ignoring LayerIdsInDefOutputLayerSet parameters, since defaultTargetOuputLayerIdc is not equal 2.\n" ); 1593 #endif 1457 1594 } 1458 1595 else … … 1476 1613 } 1477 1614 1615 #if H_MV_HLS10_ADD_LAYERSETS 1616 xConfirmPara( m_altOutputLayerFlag.size() < m_vpsNumLayerSets + m_numAddLayerSets + m_outputLayerSetIdx.size(), "The number of alt output layer flags must be equal to the number of layer set additional output layer sets plus the number of output layer set indices" ); 1617 #else 1478 1618 xConfirmPara( m_altOutputLayerFlag.size() < m_vpsNumLayerSets + m_outputLayerSetIdx.size(), "The number of Profile Level Tier indices must be equal to the number of layer set plus the number of output layer set indices" ); 1479 xConfirmPara( m_profileLevelTierIdx.size() < m_vpsNumLayerSets + m_outputLayerSetIdx.size(), "The number of Profile Level Tier indices must be equal to the number of layer set plus the number of output layer set indices" ); 1480 1481 // Layer Dependencies 1619 #endif 1620 1621 // PTL 1622 #if H_MV_HLS10_PTL 1623 xConfirmPara( ( m_profile.size() != m_inblFlag.size() || m_profile.size() != m_level.size() || m_profile.size() != m_levelTier.size() ), "The number of Profiles, Levels, Tiers and InblFlags must be equal." ); 1624 1625 if ( m_numberOfLayers > 1) 1626 { 1627 xConfirmPara( m_profile.size() <= 1, "The number of profiles, tiers, levels, and inblFlags must be greater than 1."); 1628 xConfirmPara( m_inblFlag[0], "VpsProfileTierLevel[0] must have inblFlag equal to 0"); 1629 if (m_profile.size() > 1 ) 1630 { 1631 xConfirmPara( m_profile[0] != m_profile[1], "The profile in VpsProfileTierLevel[1] must be equal to the profile in VpsProfileTierLevel[0]."); 1632 xConfirmPara( m_inblFlag[0] != m_inblFlag[1], "inblFlag in VpsProfileTierLevel[1] must be equal to the inblFlag in VpsProfileTierLevel[0]."); 1633 } 1634 } 1635 #else 1636 xConfirmPara( m_profileLevelTierIdx.size() < m_vpsNumLayerSets + m_outputLayerSetIdx.size(), "The number of Profile Level Tier indices must be equal to the number of layer set plus the number of output layer set indices" ); 1637 #endif 1638 1639 // Layer Dependencies 1482 1640 for (Int i = 0; i < m_numberOfLayers; i++ ) 1483 1641 { … … 2341 2499 #endif 2342 2500 #if H_MV 2501 #if H_MV_HLS10_GEN_FIX 2502 xPrintParaVector( "NuhLayerId" , m_layerIdInNuh ); 2503 if ( m_targetEncLayerIdList.size() > 0) 2504 { 2505 xPrintParaVector( "TargetEncLayerIdList" , m_targetEncLayerIdList ); 2506 } 2507 #endif 2343 2508 xPrintParaVector( "ViewIdVal" , m_viewId ); 2344 2509 xPrintParaVector( "ViewOrderIndex", m_viewOrderIndex ); 2510 #if H_MV_HLS10_AUX 2511 xPrintParaVector( "AuxId", m_auxId ); 2512 #endif 2345 2513 #endif 2346 2514 #if H_3D -
trunk/source/App/TAppEncoder/TAppEncCfg.h
r1039 r1066 78 78 std::vector<Int> m_viewId; ///< view id 79 79 std::vector<Int> m_viewOrderIndex; ///< view order index 80 #if H_MV_HLS10_AUX 81 std::vector<Int> m_auxId; ///< auxiliary id 82 #endif 80 83 #if H_3D 81 84 std::vector<Int> m_depthFlag; ///< depth flag 85 #endif 86 #if H_MV_HLS10_GEN_FIX 87 std::vector<Int> m_targetEncLayerIdList; ///< layer Ids in Nuh to be encoded 82 88 #endif 83 89 std::vector<Int> m_layerIdInNuh; ///< layer Id in Nuh for each layer … … 89 95 Int m_vpsNumLayerSets; ///< Number of layer sets 90 96 std::vector< std::vector<Int> > m_layerIdsInSets; ///< LayerIds in vps of layer set 91 Int m_defaultOutputLayerIdc; ///< Specifies output layers of layer sets, 0: output all layers, 1: output highest layers, 2: specified by LayerIdsInDefOuputLayerSet 97 #if H_MV_HLS10_ADD_LAYERSETS 98 Int m_numAddLayerSets; ///< Number of additional layer sets 99 std::vector< std::vector<Int> > m_highestLayerIdxPlus1; ///< HighestLayerIdxPlus1 for each additional layer set and each independent layer (value with index 0 will be ignored) 100 #endif 101 Int m_defaultOutputLayerIdc; ///< Specifies output layers of layer sets, 0: output all layers, 1: output highest layers, 2: specified by LayerIdsInDefOuputLayerSet 92 102 std::vector<Int> m_outputLayerSetIdx; ///< Indices of layer sets used as additional output layer sets 93 103 std::vector< std::vector<Int> > m_layerIdsInAddOutputLayerSet; ///< LayerIds in vps of additional output layers 94 104 std::vector< std::vector<Int> > m_layerIdsInDefOutputLayerSet; ///< Indices in vps of output layers in layer sets 105 #if H_MV_HLS10_ADD_LAYERSETS 106 std::vector< std::vector< Int > > m_profileTierLevelIdx; ///< Indices of of profile, per layer in layer set 107 #else 95 108 std::vector<Int> m_profileLevelTierIdx; ///< Indices of of profile level tier 109 #endif 96 110 std::vector<Bool> m_altOutputLayerFlag; ///< Alt output layer flag 97 111 … … 124 138 std::vector< std::vector<Bool > > m_ctuBasedOffsetEnabledFlag; 125 139 std::vector< std::vector<Int > > m_minHorizontalCtuOffsetPlus1; 140 #if H_MV_HLS10_VPS_VUI 141 Bool m_singleLayerForNonIrapFlag; 142 Bool m_higherLayerIrapSkipFlag; 143 #endif // H_MV_HLS10_VPS_VUI 144 126 145 127 146 #if H_3D_IV_MERGE … … 174 193 175 194 // profile/level 195 #if H_MV_HLS10_PTL 196 #if H_MV 197 std::vector< Profile::Name > m_profile; 198 std::vector< Level::Tier > m_levelTier; 199 std::vector< Level::Name > m_level; 200 std::vector< Bool > m_inblFlag; 201 #else 176 202 Profile::Name m_profile; 177 203 Level::Tier m_levelTier; 178 204 Level::Name m_level; 205 #endif 206 #endif 207 179 208 Bool m_progressiveSourceFlag; 180 209 Bool m_interlacedSourceFlag; 181 210 Bool m_nonPackedConstraintFlag; 182 211 Bool m_frameOnlyConstraintFlag; 183 184 212 // coding structure 185 213 #if H_MV … … 440 468 std::vector<Int> m_sbPropAvgBitRate; 441 469 std::vector<Int> m_sbPropMaxBitRate; 470 #if H_MV_HLS10_GEN_FIX 471 Bool m_outputVpsInfo; 472 #endif 442 473 #endif 443 474 #if H_3D … … 506 537 Void xPrintUsage (); ///< print usage 507 538 #if H_MV 539 540 #if H_MV_HLS10_PTL 541 template<typename T> 542 Void xReadStrToEnum(string in, std::vector<T> &val) 543 { 544 val.clear(); 545 546 char* cElement = NULL; 547 char* cString = new char[in.size()+1]; 548 strcpy(cString, in.c_str()); 549 550 cElement = strtok( cString, " " ); 551 while ( cElement != NULL ) 552 { 553 T profile; 554 std::istringstream ss( cElement ); 555 ss >> profile; 556 val.push_back( profile ); 557 cElement = strtok( NULL, " " ); 558 } 559 delete[] cString; 560 } 561 #endif 562 563 508 564 template <typename T> 509 565 Void xResizeVector( std::vector<T> & rpcVector ) -
trunk/source/App/TAppEncoder/TAppEncTop.cpp
r1039 r1066 133 133 xSetLayerIds ( vps ); 134 134 xSetDimensionIdAndLength ( vps ); 135 xSetDependencies( vps ); 135 xSetDependencies ( vps ); 136 xSetRepFormat ( vps ); 136 137 xSetProfileTierLevel ( vps ); 137 xSetRepFormat ( vps );138 138 xSetLayerSets ( vps ); 139 139 xSetDpbSize ( vps ); … … 144 144 xDeriveDltArray ( vps, dlt ); 145 145 #endif 146 146 #if H_MV_HLS10_GEN_FIX 147 if ( m_targetEncLayerIdList.size() == 0 ) 148 { 149 for (Int i = 0; i < m_numberOfLayers; i++ ) 150 { 151 m_targetEncLayerIdList.push_back( vps.getLayerIdInNuh( i ) ); 152 } 153 } 154 for( Int i = (Int) m_targetEncLayerIdList.size()-1 ; i >= 0 ; i--) 155 { 156 Int iNuhLayerId = m_targetEncLayerIdList[i]; 157 Bool allRefLayersPresent = true; 158 for( Int j = 0; j < vps.getNumRefLayers( iNuhLayerId ); j++) 159 { 160 allRefLayersPresent = allRefLayersPresent && xLayerIdInTargetEncLayerIdList( vps.getIdRefLayer( iNuhLayerId, j) ); 161 } 162 if ( !allRefLayersPresent ) 163 { 164 printf("\nCannot encode layer with nuh_layer_id equal to %d since not all reference layers are in TargetEncLayerIdList\n", iNuhLayerId); 165 m_targetEncLayerIdList.erase( m_targetEncLayerIdList.begin() + i ); 166 } 167 } 168 #endif 169 170 #if H_MV_HLS10_ADD_LAYERSETS 171 if ( m_outputVpsInfo ) 172 { 173 #if H_MV_HLS10_AUX 174 vps.printScalabilityId(); 175 #endif 176 vps.printLayerDependencies(); 177 vps.printLayerSets(); 178 vps.printPTL(); 179 } 180 #endif 147 181 148 182 for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++) … … 200 234 m_cTEncTop.setUseDMM ( isDepth ? m_useDMM : false ); 201 235 #if SEPARATE_FLAG_I0085 236 #if LGE_FCO_I0116 237 m_cTEncTop.setUseIVP ( vps.getViewIndex( layerId ) == 0 && isDepth ? m_useIVP : false ); 238 #else 202 239 m_cTEncTop.setUseIVP ( isDepth ? m_useIVP : false ); 240 #endif 203 241 #endif 204 242 m_cTEncTop.setUseSDC ( isDepth ? m_useSDC : false ); … … 210 248 #if !MTK_I0099_VPS_EX2 || MTK_I0099_FIX 211 249 #if H_3D_QTLPC 250 #if LGE_FCO_I0116 251 m_cTEncTop.setUseQTL ( vps.getViewIndex( layerId ) == 0 && isDepth ? m_bUseQTL : false ); 252 #else 212 253 m_cTEncTop.setUseQTL ( isDepth ? m_bUseQTL : false ); 254 #endif 213 255 #if !MTK_I0099_VPS_EX2 214 256 m_cTEncTop.setUsePC ( isDepth ? m_bUsePC : false ); … … 224 266 #endif 225 267 #if H_3D_IV_MERGE 226 m_cTEncTop.setUseMPI ( isDepth ? m_bMPIFlag : false ); 268 #if LGE_FCO_I0116 269 m_cTEncTop.setUseMPI ( vps.getViewIndex( layerId ) == 0 && isDepth ? m_bMPIFlag : false ); 270 #else 271 m_cTEncTop.setUseMPI ( isDepth ? m_bMPIFlag : false ); 272 #endif 227 273 #endif 228 274 #endif // H_3D … … 236 282 #endif 237 283 284 #if H_MV 285 m_cTEncTop.setProfile(m_profile[0]); 286 m_cTEncTop.setLevel (m_levelTier[0], m_level[0]); 287 #else 238 288 m_cTEncTop.setProfile(m_profile); 239 289 m_cTEncTop.setLevel(m_levelTier, m_level); 290 #endif 240 291 m_cTEncTop.setProgressiveSourceFlag(m_progressiveSourceFlag); 241 292 m_cTEncTop.setInterlacedSourceFlag(m_interlacedSourceFlag); … … 789 840 790 841 #if H_MV 842 #if H_MV_HLS10_GEN_FIX 843 while ( (m_targetEncLayerIdList.size() != 0 ) && !allEos ) 844 #else 791 845 while ( !allEos ) 846 #endif 792 847 { 793 848 for(Int layer=0; layer < m_numberOfLayers; layer++ ) 794 849 { 850 #if H_MV_HLS10_GEN_FIX 851 if (!xLayerIdInTargetEncLayerIdList( m_vps->getLayerIdInNuh( layer ) )) 852 { 853 continue; 854 } 855 #endif 856 795 857 Int frmCnt = 0; 796 858 while ( !eos[layer] && !(frmCnt == gopSize)) … … 832 894 for(Int layer=0; layer < m_numberOfLayers; layer++ ) 833 895 { 896 #if H_MV_HLS10_GEN_FIX 897 if (!xLayerIdInTargetEncLayerIdList( m_vps->getLayerIdInNuh( layer ) )) 898 { 899 continue; 900 } 901 #endif 902 834 903 #if H_3D_VSO 835 904 if( m_bUseVSO && m_bUseEstimatedVSD && iNextPoc < m_framesToBeEncoded ) … … 858 927 for(Int layer=0; layer < m_numberOfLayers; layer++ ) 859 928 { 929 #if H_MV_HLS10_GEN_FIX 930 if (!xLayerIdInTargetEncLayerIdList( m_vps->getLayerIdInNuh( layer ) )) 931 { 932 continue; 933 } 934 #endif 860 935 m_acTEncTopList[layer]->printSummary( m_acTEncTopList[layer]->getNumAllPicCoded(), m_isField ); 861 936 } … … 1321 1396 // Max sub layers, + presence flag 1322 1397 Bool subLayersMaxMinus1PresentFlag = false; 1398 #if !H_MV_FIX_SUB_LAYERS_MAX_MINUS1 1323 1399 Int subLayersMaxMinus1 = -1; 1400 #endif 1324 1401 for (Int curLayerIdInVps = 0; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++ ) 1325 { 1326 Int curSubLayersMaxMinus1 = -1;1402 { 1403 Int curSubLayersMaxMinus1 = 0; 1327 1404 for( Int i = 0; i < getGOPSize(); i++ ) 1328 1405 { … … 1332 1409 1333 1410 vps.setSubLayersVpsMaxMinus1( curLayerIdInVps, curSubLayersMaxMinus1 ); 1411 #if !H_MV_FIX_SUB_LAYERS_MAX_MINUS1 1334 1412 if ( subLayersMaxMinus1 == -1 ) 1335 1413 { … … 1340 1418 subLayersMaxMinus1PresentFlag = subLayersMaxMinus1PresentFlag || ( curSubLayersMaxMinus1 != subLayersMaxMinus1 ); 1341 1419 } 1420 #else 1421 subLayersMaxMinus1PresentFlag = subLayersMaxMinus1PresentFlag || ( curSubLayersMaxMinus1 != vps.getMaxSubLayersMinus1() ); 1422 #endif 1342 1423 } 1343 1424 … … 1348 1429 Bool maxTidRefPresentFlag = false; 1349 1430 for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++) 1350 1431 { 1351 1432 for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++) 1352 1433 { 1353 1434 Int maxTid = -1; 1435 #if H_MV_FIX_LOOP_GOPSIZE 1436 for( Int i = 0; i < ( getGOPSize() + 1); i++ ) 1437 { 1438 GOPEntry geCur = m_GOPListMvc[curLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )]; 1439 GOPEntry geRef = m_GOPListMvc[refLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )]; 1440 #else 1354 1441 for( Int i = 0; i < getGOPSize(); i++ ) 1355 1442 { 1356 1443 GOPEntry geCur = m_GOPListMvc[curLayerIdInVps][i]; 1357 GOPEntry geRef = m_GOPListMvc[refLayerIdInVps][i]; 1358 1444 GOPEntry geRef = m_GOPListMvc[refLayerIdInVps][i]; 1445 #endif 1359 1446 for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++) 1360 1447 { 1361 1448 if ( m_directRefLayers[ curLayerIdInVps ][ geCur.m_interLayerPredLayerIdc[ j ]] == refLayerIdInVps ) 1362 1449 { 1450 #if H_MV_FIX_LOOP_GOPSIZE 1451 Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 ); 1452 Bool refLayerZero = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 ); 1453 maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId ); 1454 #else 1363 1455 maxTid = std::max( maxTid, geRef.m_temporalId ); 1456 #endif 1364 1457 } 1365 1458 } … … 1487 1580 Void TAppEncTop::xSetProfileTierLevel( TComVPS& vps ) 1488 1581 { 1582 #if H_MV_HLS10_PTL 1583 1584 // SET PTL 1585 assert( m_profile.size() == m_level.size() && m_profile.size() == m_levelTier.size() ); 1586 vps.setVpsNumProfileTierLevelMinus1( (Int) m_profile.size() - 1 ); 1587 for ( Int ptlIdx = 0; ptlIdx <= vps.getVpsNumProfileTierLevelMinus1(); ptlIdx++ ) 1588 { 1589 if ( ptlIdx > 1 ) 1590 { 1591 Bool vpsProfilePresentFlag = ( m_profile[ptlIdx] != m_profile[ptlIdx - 1] ) 1592 || ( m_inblFlag[ptlIdx ] != m_inblFlag[ptlIdx - 1] ); 1593 vps.setVpsProfilePresentFlag( ptlIdx, vpsProfilePresentFlag ); 1594 } 1595 1596 xSetProfileTierLevel( vps, ptlIdx, -1, m_profile[ptlIdx], m_level[ptlIdx], 1597 m_levelTier[ ptlIdx ], m_progressiveSourceFlag, m_interlacedSourceFlag, 1598 m_nonPackedConstraintFlag, m_frameOnlyConstraintFlag, m_inblFlag[ptlIdx] ); 1599 } 1600 #else 1489 1601 const Int vpsNumProfileTierLevelMinus1 = 0; //TBD 1490 1602 vps.setVpsNumProfileTierLevelMinus1( vpsNumProfileTierLevelMinus1 ); … … 1494 1606 vps.setVpsProfilePresentFlag( i, true ); 1495 1607 } 1496 } 1497 1608 #endif 1609 } 1610 1611 #if H_MV_HLS10_PTL 1612 Void TAppEncTop::xSetProfileTierLevel(TComVPS& vps, Int profileTierLevelIdx, Int subLayer, Profile::Name profile, Level::Name level, Level::Tier tier, Bool progressiveSourceFlag, Bool interlacedSourceFlag, Bool nonPackedConstraintFlag, Bool frameOnlyConstraintFlag, Bool inbldFlag) 1613 { 1614 TComPTL* ptlStruct = vps.getPTL( profileTierLevelIdx ); 1615 assert( ptlStruct != NULL ); 1616 1617 ProfileTierLevel* ptl; 1618 if ( subLayer == -1 ) 1619 { 1620 ptl = ptlStruct->getGeneralPTL(); 1621 } 1622 else 1623 { 1624 ptl = ptlStruct->getSubLayerPTL( subLayer ); 1625 } 1626 1627 assert( ptl != NULL ); 1628 1629 ptl->setProfileIdc( profile ); 1630 ptl->setTierFlag ( tier ); 1631 ptl->setLevelIdc ( level ); 1632 ptl->setProfileCompatibilityFlag( profile, true ); 1633 #if H_MV_HLS10_PTL_INBL_FIX 1634 ptl->setInbldFlag( inbldFlag ); 1635 #endif 1636 1637 switch ( profile ) 1638 { 1639 case Profile::MAIN: 1640 break; 1641 case Profile::MULTIVIEWMAIN: 1642 #if H_3D 1643 case Profile::MAIN3D: 1644 #endif 1645 ptl->setMax12bitConstraintFlag ( true ); 1646 ptl->setMax12bitConstraintFlag ( true ); 1647 ptl->setMax10bitConstraintFlag ( true ); 1648 ptl->setMax8bitConstraintFlag ( true ); 1649 ptl->setMax422chromaConstraintFlag ( true ); 1650 ptl->setMax420chromaConstraintFlag ( true ); 1651 ptl->setMaxMonochromeConstraintFlag ( false ); 1652 ptl->setIntraConstraintFlag ( false ); 1653 ptl->setOnePictureOnlyConstraintFlag( false ); 1654 ptl->setLowerBitRateConstraintFlag ( true ); 1655 break; 1656 default: 1657 assert( 0 ); // other profiles currently not supported 1658 break; 1659 } 1660 } 1661 #endif 1498 1662 1499 1663 Void TAppEncTop::xSetRepFormat( TComVPS& vps ) … … 1513 1677 //repFormat->setSeparateColourPlaneVpsFlag( ); 1514 1678 1679 #if H_MV_HLS10_GEN_VSP_CONF_WIN 1680 repFormat->setConformanceWindowVpsFlag( true ); 1681 repFormat->setConfWinVpsLeftOffset ( m_confLeft / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) ); 1682 repFormat->setConfWinVpsRightOffset ( m_confRight / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) ); 1683 repFormat->setConfWinVpsTopOffset ( m_confTop / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) ); 1684 repFormat->setConfWinVpsBottomOffset ( m_confBottom / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) ); 1685 #endif 1686 1515 1687 assert( vps.getRepFormat( 0 ) == NULL ); 1516 1688 vps.setRepFormat( 0 , repFormat ); … … 1528 1700 { 1529 1701 Int currLsIdx = vps.olsIdxToLsIdx( i ); 1702 #if !H_MV_HLS10_ADD_LAYERSETS 1530 1703 std::vector<Int> targetDecLayerIdList = vps.getTargetDecLayerIdList( i ); 1704 #endif 1531 1705 Bool subLayerFlagInfoPresentFlag = false; 1532 1706 … … 1534 1708 { 1535 1709 Bool subLayerDpbInfoPresentFlag = false; 1710 #if !H_MV_HLS10_ADD_LAYERSETS 1536 1711 assert( vps.getNumLayersInIdList( currLsIdx ) == targetDecLayerIdList.size() ); 1712 #endif 1537 1713 for( Int k = 0; k < vps.getNumLayersInIdList( currLsIdx ); k++ ) 1538 1714 { 1715 #if H_MV_HLS10_DBP_SIZE 1716 Int layerIdInVps = vps.getLayerIdInVps( vps.getLayerSetLayerIdList( currLsIdx, k ) ); 1717 if ( vps.getNecessaryLayerFlag( i,k ) && ( vps.getVpsBaseLayerInternalFlag() || vps.getLayerSetLayerIdList( currLsIdx, k ) != 0 ) ) 1718 { 1719 dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, m_maxDecPicBufferingMvc[ layerIdInVps ][ j ] - 1 ); 1720 if ( j > 0 ) 1721 { 1722 subLayerDpbInfoPresentFlag = subLayerDpbInfoPresentFlag || ( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) != dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j - 1 ) ); 1723 } 1724 } 1725 else 1726 { 1727 if (vps.getNecessaryLayerFlag(i,k) && j == 0 && k == 0 ) 1728 { 1729 dpbSize->setMaxVpsDecPicBufferingMinus1(i, k ,j, 0 ); 1730 } 1731 } 1732 #else 1539 1733 Int layerIdInVps = vps.getLayerIdInVps( targetDecLayerIdList[k] ); 1540 1734 dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, m_maxDecPicBufferingMvc[ layerIdInVps ][ j ] - 1 ); 1735 1541 1736 if ( j > 0 ) 1542 1737 { 1543 1738 subLayerDpbInfoPresentFlag = subLayerDpbInfoPresentFlag || ( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) != dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j - 1 ) ); 1544 1739 } 1740 #endif 1545 1741 } 1546 1742 1547 1743 Int maxNumReorderPics = MIN_INT; 1744 #if H_MV_HLS10_DBP_SIZE 1745 for ( Int idx = 0; idx < vps.getNumLayersInIdList( currLsIdx ); idx++ ) 1746 { 1747 if (vps.getNecessaryLayerFlag(i, idx )) 1748 { 1749 Int layerIdInVps = vps.getLayerIdInVps( vps.getLayerSetLayerIdList(currLsIdx, idx) ); 1750 maxNumReorderPics = std::max( maxNumReorderPics, m_numReorderPicsMvc[ layerIdInVps ][ j ] ); 1751 } 1752 } 1753 #else 1548 1754 for ( Int idx = 0; idx < targetDecLayerIdList.size(); idx++ ) 1549 1755 { … … 1551 1757 maxNumReorderPics = std::max( maxNumReorderPics, m_numReorderPicsMvc[ layerIdInVps ][ j ] ); 1552 1758 } 1759 #endif 1553 1760 assert( maxNumReorderPics != MIN_INT ); 1554 1761 … … 1576 1783 } 1577 1784 1578 1579 1785 Void TAppEncTop::xSetLayerSets( TComVPS& vps ) 1580 1786 { … … 1598 1804 // Additional output layer sets + profileLevelTierIdx 1599 1805 vps.setDefaultOutputLayerIdc ( m_defaultOutputLayerIdc ); 1806 #if H_MV_HLS10_ADD_LAYERSETS 1807 if( vps.getNumIndependentLayers() == 0 && m_numAddLayerSets > 0 ) 1808 { 1809 fprintf( stderr, "\nWarning: Ignoring additional layer sets since NumIndependentLayers is equal to 0.\n"); 1810 } 1811 else 1812 { 1813 vps.setNumAddLayerSets( m_numAddLayerSets ); 1814 if ( m_highestLayerIdxPlus1.size() < vps.getNumAddLayerSets() ) 1815 { 1816 fprintf(stderr, "\nError: Number of highestLayerIdxPlus1 parameters must be greater than or equal to NumAddLayerSets\n"); 1817 exit(EXIT_FAILURE); 1818 } 1819 1820 for (Int i = 0; i < vps.getNumAddLayerSets(); i++) 1821 { 1822 if ( m_highestLayerIdxPlus1[ i ].size() < vps.getNumIndependentLayers() ) 1823 { 1824 fprintf(stderr, "Error: Number of elements in highestLayerIdxPlus1[ %d ] parameters must be greater than or equal to NumIndependentLayers(= %d)\n", i, vps.getNumIndependentLayers()); 1825 exit(EXIT_FAILURE); 1826 } 1827 1828 for (Int j = 1; j < vps.getNumIndependentLayers(); j++) 1829 { 1830 if ( m_highestLayerIdxPlus1[ i ][ j ] < 0 || m_highestLayerIdxPlus1[ i ][ j ] > vps.getNumLayersInTreePartition( j ) ) 1831 { 1832 fprintf(stderr, "Error: highestLayerIdxPlus1[ %d ][ %d ] shall be in the range of 0 to NumLayersInTreePartition[ %d ] (= %d ), inclusive. \n", i, j, j, vps.getNumLayersInTreePartition( j ) ); 1833 exit(EXIT_FAILURE); 1834 } 1835 vps.setHighestLayerIdxPlus1( i, j, m_highestLayerIdxPlus1[ i ][ j ] ); 1836 } 1837 vps.deriveAddLayerSetLayerIdList( i ); 1838 } 1839 } 1840 #else 1600 1841 vps.setNumAddLayerSets ( 0 ); 1842 #endif 1601 1843 vps.setNumAddOlss ( numAddOuputLayerSets ); 1602 1844 vps.initTargetLayerIdLists(); 1603 1845 1846 #if H_MV_HLS10_ADD_LAYERSETS 1847 for (Int olsIdx = 0; olsIdx < vps.getNumLayerSets() + numAddOuputLayerSets; olsIdx++) 1848 { 1849 Int addOutLsIdx = olsIdx - vps.getNumLayerSets(); 1850 #else 1604 1851 for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + numAddOuputLayerSets; olsIdx++) 1605 1852 { 1606 1853 Int addOutLsIdx = olsIdx - m_vpsNumLayerSets; 1607 1854 #endif 1608 1855 vps.setLayerSetIdxForOlsMinus1( olsIdx, ( ( addOutLsIdx < 0 ) ? olsIdx : m_outputLayerSetIdx[ addOutLsIdx ] ) - 1 ); 1609 1856 1857 #if H_MV_HLS10_ADD_LAYERSETS 1858 Int lsIdx = vps.olsIdxToLsIdx( olsIdx ); 1859 #else 1610 1860 std::vector<Int>& layerIdList = m_layerIdsInSets[ vps.olsIdxToLsIdx( olsIdx ) ]; 1611 1861 #endif 1612 1862 if (vps.getDefaultOutputLayerIdc() == 2 || addOutLsIdx >= 0 ) 1613 1863 { 1864 #if H_MV_HLS10_ADD_LAYERSETS 1865 for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++) 1866 #else 1614 1867 for ( Int i = 0; i < layerIdList.size(); i++) 1868 #endif 1615 1869 { 1616 1870 vps.setOutputLayerFlag( olsIdx, i, ( olsIdx == 0 && i == 0 ) ? vps.inferOutputLayerFlag(olsIdx, i ) : false ); // This is a software only fix for a bug in the spec. In spec outputLayerFlag neither present nor inferred for this case ! … … 1622 1876 for (Int j = 0; j < outLayerIdList.size(); j++) 1623 1877 { 1878 #if H_MV_HLS10_ADD_LAYERSETS 1879 for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++) 1880 { 1881 if ( vps.getLayerSetLayerIdList( lsIdx, i ) == outLayerIdList[ j ] ) 1882 #else 1624 1883 for (Int i = 0; i < layerIdList.size(); i++ ) 1625 1884 { 1626 1885 if ( layerIdList[ i ] == outLayerIdList[ j ] ) 1886 #endif 1627 1887 { 1628 1888 vps.setOutputLayerFlag( olsIdx, i, true ); … … 1631 1891 } 1632 1892 } 1633 assert( outputLayerInLayerSetFlag ); // The output layer is not not in the layer set. 1893 #if H_MV_HLS10_ADD_LAYERSETS 1894 if ( !outputLayerInLayerSetFlag ) 1895 { 1896 fprintf(stderr, "Error: Output layer %d in output layer set %d not in corresponding layer set %d \n", outLayerIdList[ j ], olsIdx , lsIdx ); 1897 exit(EXIT_FAILURE); 1898 } 1899 #else 1900 assert( outputLayerInLayerSetFlag ); // The output layer is not in the layer set. 1901 #endif 1634 1902 } 1635 1903 } 1636 1904 else 1637 1905 { 1906 #if H_MV_HLS10_ADD_LAYERSETS 1907 for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++) 1908 #else 1638 1909 for ( Int i = 0; i < layerIdList.size(); i++) 1910 #endif 1639 1911 { 1640 1912 vps.setOutputLayerFlag( olsIdx, i, vps.inferOutputLayerFlag( olsIdx, i ) ); … … 1642 1914 } 1643 1915 1916 #if H_MV_HLS10_NESSECARY_LAYER 1917 vps.deriveNecessaryLayerFlags( olsIdx ); 1918 #endif 1644 1919 vps.deriveTargetLayerIdList( olsIdx ); 1645 1920 1921 #if H_MV_HLS10_PTL 1922 // SET profile_tier_level_index. 1923 if ( olsIdx == 0 ) 1924 { 1925 vps.setProfileTierLevelIdx( 0, 0 , vps.getMaxLayersMinus1() > 0 ? 1 : 0 ); 1926 } 1927 else 1928 { 1929 if( (Int) m_profileTierLevelIdx[ olsIdx ].size() < vps.getNumLayersInIdList( lsIdx ) ) 1930 { 1931 fprintf( stderr, "Warning: Not enough profileTierLevelIdx values given for the %d-th OLS. Inferring default values.\n", olsIdx ); 1932 } 1933 for (Int j = 0; j < vps.getNumLayersInIdList( lsIdx ); j++) 1934 { 1935 if( j < (Int) m_profileTierLevelIdx[ olsIdx ].size() ) 1936 { 1937 vps.setProfileTierLevelIdx(olsIdx, j, m_profileTierLevelIdx[olsIdx][j] ); 1938 #if H_MV_HLS10_PTL_FIX 1939 if( !vps.getNecessaryLayerFlag(olsIdx,j) && m_profileTierLevelIdx[ olsIdx ][ j ] != -1 ) 1940 { 1941 fprintf( stderr, "Warning: The %d-th layer in the %d-th OLS is not necessary such that profileTierLevelIdx[%d][%d] will be ignored. Set value to -1 to suppress warning.\n", j,olsIdx,olsIdx,j ); 1942 } 1943 } 1944 else if ( vps.getNecessaryLayerFlag(olsIdx,j) ) 1945 #else 1946 } 1947 else 1948 #endif 1949 { 1950 // setting default values 1951 if ( j == 0 || vps.getVpsNumProfileTierLevelMinus1() < 1 ) 1952 { 1953 // set base layer as default 1954 vps.setProfileTierLevelIdx(olsIdx, j, 1 ); 1955 } 1956 else 1957 { 1958 // set VpsProfileTierLevel[2] as default 1959 vps.setProfileTierLevelIdx(olsIdx, j, 2 ); 1960 } 1961 } 1962 } 1963 } 1964 #else 1646 1965 if ( olsIdx > 0 ) 1647 1966 { 1648 1967 vps.setProfileLevelTierIdx( olsIdx, m_profileLevelTierIdx[ olsIdx ] ); 1649 1968 } 1969 #endif 1650 1970 1651 1971 if ( vps.getNumOutputLayersInOutputLayerSet( olsIdx ) == 1 && … … 1685 2005 if( pcVPSVUI->getBitRatePresentVpsFlag( ) || pcVPSVUI->getPicRatePresentVpsFlag( ) ) 1686 2006 { 2007 #if H_MV_HLS10_VPS_VUI 2008 for( Int i = 0; i < vps.getNumLayerSets(); i++ ) 2009 #else 1687 2010 for( Int i = 0; i <= vps.getVpsNumLayerSetsMinus1(); i++ ) 2011 #endif 1688 2012 { 1689 2013 for( Int j = 0; j <= vps.getMaxTLayers(); j++ ) … … 1734 2058 for( Int j = 0; j < vps.getNumDirectRefLayers( vps.getLayerIdInNuh( i ) ) ; j++ ) 1735 2059 { 2060 #if H_MV_HLS10_REF_PRED_LAYERS 2061 Int layerIdx = vps.getLayerIdInVps( vps.getIdDirectRefLayer(vps.getLayerIdInNuh( i ) , j )); 2062 #else 1736 2063 Int layerIdx = vps.getLayerIdInVps( vps.getRefLayerId(vps.getLayerIdInNuh( i ) , j )); 2064 #endif 1737 2065 if( pcVPSVUI->getTilesInUseFlag( i ) && pcVPSVUI->getTilesInUseFlag( layerIdx ) ) 1738 2066 { … … 1752 2080 } 1753 2081 } 2082 2083 #if H_MV_HLS10_VPS_VUI 2084 pcVPSVUI->setSingleLayerForNonIrapFlag( m_singleLayerForNonIrapFlag ); 2085 pcVPSVUI->setHigherLayerIrapSkipFlag( m_higherLayerIrapSkipFlag ); 2086 #endif 1754 2087 1755 2088 pcVPSVUI->setIlpRestrictedRefLayersFlag( m_ilpRestrictedRefLayersFlag ); … … 1808 2141 } 1809 2142 } 1810 #endif 2143 #if H_MV_HLS10_GEN_FIX 2144 Bool TAppEncTop::xLayerIdInTargetEncLayerIdList(Int nuhLayerId) 2145 { 2146 return ( std::find(m_targetEncLayerIdList.begin(), m_targetEncLayerIdList.end(), nuhLayerId) != m_targetEncLayerIdList.end()) ; 2147 } 2148 #endif 2149 2150 2151 #endif 2152 2153 1811 2154 #if H_3D 1812 2155 Void TAppEncTop::xSetVPSExtension2( TComVPS& vps ) … … 1816 2159 Bool isDepth = ( vps.getDepthId( layer ) == 1 ) ; 1817 2160 Bool isLayerZero = ( layer == 0 ); 2161 #if LGE_FCO_I0116 2162 Bool isDepthFirst = (layer > 1 ? true : false); 2163 #endif 1818 2164 1819 2165 #if H_3D_ARP … … 1838 2184 vps.setVpsDepthModesFlag( layer, isDepth && !isLayerZero && (m_useDMM || m_useSDC || m_useDLT ) ); 1839 2185 #if SEPARATE_FLAG_I0085 2186 #if LGE_FCO_I0116 2187 vps.setIVPFlag ( layer, isDepth && !isLayerZero && m_useIVP && !isDepthFirst ); 2188 #else 1840 2189 vps.setIVPFlag ( layer, isDepth && !isLayerZero && m_useIVP ); 2190 #endif 1841 2191 #endif 1842 2192 #endif … … 1866 2216 #endif 1867 2217 #if MTK_I0099_VPS_EX2 2218 #if LGE_FCO_I0116 2219 vps.setLimQtPredFlag ( layer, isDepth && m_bLimQtPredFlag && !isDepthFirst ); 2220 #else 1868 2221 vps.setLimQtPredFlag ( layer, isDepth && m_bLimQtPredFlag ); 2222 #endif 1869 2223 #endif 1870 2224 #if H_3D_NBDV_REF … … 1881 2235 #endif 1882 2236 #if H_3D_IV_MERGE 2237 #if LGE_FCO_I0116 2238 vps.setMPIFlag( layer, !isLayerZero && isDepth && m_bMPIFlag && !isDepthFirst ); 2239 #else 1883 2240 vps.setMPIFlag( layer, !isLayerZero && isDepth && m_bMPIFlag ); 2241 #endif 1884 2242 #endif 1885 2243 } -
trunk/source/App/TAppEncoder/TAppEncTop.h
r976 r1066 132 132 Void xSetLayerSets ( TComVPS& vps ); 133 133 Void xSetProfileTierLevel ( TComVPS& vps ); 134 135 #if H_MV_HLS10_PTL 136 Void xSetProfileTierLevel( TComVPS& vps, Int profileTierLevelIdx, Int subLayer, 137 Profile::Name profile, Level::Name level, Level::Tier tier, 138 Bool progressiveSourceFlag, Bool interlacedSourceFlag, 139 Bool nonPackedConstraintFlag, Bool frameOnlyConstraintFlag, 140 Bool inbldFlag ); 141 #endif 134 142 Void xSetRepFormat ( TComVPS& vps ); 135 143 Void xSetDpbSize ( TComVPS& vps ); … … 137 145 GOPEntry* xGetGopEntry( Int layerIdInVps, Int poc ); 138 146 Int xGetMax( std::vector<Int>& vec); 147 #if H_MV_HLS10_GEN_FIX 148 Bool xLayerIdInTargetEncLayerIdList( Int nuhLayerId ); 149 #endif 139 150 #endif 140 151 #if H_3D -
trunk/source/Lib/TLibCommon/TComDataCU.cpp
r1039 r1066 4177 4177 TComPic * pcTexPic = m_pcSlice->getTexturePic(); 4178 4178 #if H_3D_FCO 4179 #if LGE_FCO_I0116 4180 if (pcTexPic && pcTexPic->getReconMark()) 4181 #else 4179 4182 if (pcTexturePic->getReconMark()) 4183 #endif 4180 4184 { 4181 4185 #endif … … 6160 6164 TComMv cMv; 6161 6165 #if MTK_I0093 6162 Int iDisp = getSlice()->getDepthToDisparityB( 0 )[ 1 << ( getSlice()->getSPS()->getBitDepthY() - 1 ) ]; 6166 #if H_3D_FIX_64BIT_SHIFT 6167 Int iDisp = getSlice()->getDepthToDisparityB( 0 )[ (Int64) (1 << ( getSlice()->getSPS()->getBitDepthY() - 1 )) ]; 6168 #else 6169 Int iDisp = getSlice()->getDepthToDisparityB( 0 )[ 1 << ( getSlice()->getSPS()->getBitDepthY() - 1 ) ]; 6170 #endif 6163 6171 #else 6164 6172 Int iDisp = getSlice()->getDepthToDisparityB( 0 )[ 128 ]; -
trunk/source/Lib/TLibCommon/TComRom.cpp
r1039 r1066 71 71 c <<= 1; 72 72 } 73 74 #if H_MV 75 #if H_MV_HLS_PTL_LIMITS 76 g_generalTierAndLevelLimits[ Level::LEVEL1 ] = TComGeneralTierAndLevelLimits( 36864, 350, INT_MIN, 16, 1, 1 ); 77 g_generalTierAndLevelLimits[ Level::LEVEL2 ] = TComGeneralTierAndLevelLimits( 122880, 1500, INT_MIN, 16, 1, 1 ); 78 g_generalTierAndLevelLimits[ Level::LEVEL2_1 ] = TComGeneralTierAndLevelLimits( 245760, 3000, INT_MIN, 20, 1, 1 ); 79 g_generalTierAndLevelLimits[ Level::LEVEL3 ] = TComGeneralTierAndLevelLimits( 552960, 6000, INT_MIN, 30, 2, 2 ); 80 g_generalTierAndLevelLimits[ Level::LEVEL3_1 ] = TComGeneralTierAndLevelLimits( 983040, 10000, INT_MIN, 40, 3, 3 ); 81 g_generalTierAndLevelLimits[ Level::LEVEL4 ] = TComGeneralTierAndLevelLimits( 2228224, 12000, 30000, 75, 5, 5 ); 82 g_generalTierAndLevelLimits[ Level::LEVEL4_1 ] = TComGeneralTierAndLevelLimits( 2228224, 20000, 50000, 75, 5, 5 ); 83 g_generalTierAndLevelLimits[ Level::LEVEL5 ] = TComGeneralTierAndLevelLimits( 8912896, 25000, 100000, 200, 11, 10 ); 84 g_generalTierAndLevelLimits[ Level::LEVEL5_1 ] = TComGeneralTierAndLevelLimits( 8912896, 40000, 160000, 200, 11, 10 ); 85 g_generalTierAndLevelLimits[ Level::LEVEL5_2 ] = TComGeneralTierAndLevelLimits( 8912896, 60000, 240000, 200, 11, 10 ); 86 g_generalTierAndLevelLimits[ Level::LEVEL6 ] = TComGeneralTierAndLevelLimits( 35651584, 60000, 240000, 600, 22, 20 ); 87 g_generalTierAndLevelLimits[ Level::LEVEL6_1 ] = TComGeneralTierAndLevelLimits( 35651584, 120000, 480000, 600, 22, 20 ); 88 g_generalTierAndLevelLimits[ Level::LEVEL6_2 ] = TComGeneralTierAndLevelLimits( 35651584, 240000, 800000, 600, 22, 20 ); 89 #endif 90 #endif 91 73 92 } 74 93 … … 369 388 370 389 Char g_aucConvertToBit [ MAX_CU_SIZE+1 ]; 371 390 #if !MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 372 391 #if H_3D_IC 373 392 UInt g_aICEnableCANDIDATE[10] = { 0, }; 374 393 UInt g_aICEnableNUM[ 10 ] = { 0, }; 375 394 Int g_lastlayer=0; 395 #endif 376 396 #endif 377 397 #if ENC_DEC_TRACE … … 383 403 UInt64 g_nSymbolCounter = 0; 384 404 #if H_MV_ENC_DEC_TRAC 385 Bool g_traceCU = true;386 Bool g_tracePU = true;387 Bool g_traceTU = true;405 Bool g_traceCU = false; 406 Bool g_tracePU = false; 407 Bool g_traceTU = false; 388 408 Bool g_disableHLSTrace = false; 389 409 UInt64 g_stopAtCounter = 0; -
trunk/source/Lib/TLibCommon/TComRom.h
r1039 r1066 187 187 // ========================================== 188 188 189 #if H_MV_HLS_PTL_LIMITS 190 class TComGeneralTierAndLevelLimits 191 { 192 public: 193 TComGeneralTierAndLevelLimits::TComGeneralTierAndLevelLimits 194 ( Int maxLumaPs, 195 Int maxCPBMainTier, 196 Int maxCPBHighTier, 197 Int maxSliceSegmentsPerPicture, 198 Int maxTileRows, 199 Int maxTileCols ) 200 : m_maxLumaPs ( maxLumaPs ), 201 m_maxCPBMainTier ( maxCPBMainTier ), 202 m_maxCPBHighTier ( maxCPBHighTier ), 203 m_maxSliceSegmentsPerPicture( maxSliceSegmentsPerPicture ), 204 m_maxTileRows ( maxTileRows ), 205 m_maxTileCols ( maxTileCols ); 206 {}; 207 208 Int getMaxLumaPs ( ) { return m_maxLumaPs ; }; 209 Int getMaxCPBMainTier ( ) { return m_maxCPBMainTier ; }; 210 Int getMaxCPBHighTier ( ) { return m_maxCPBHighTier ; }; 211 Int getMaxSliceSegmentsPerPicture( ) { return m_maxSliceSegmentsPerPicture; }; 212 Int getMaxTileRows ( ) { return m_maxTileRows ; }; 213 Int getMaxTileCols ( ) { return m_maxTileCols ; }; 214 215 private: 216 const Int m_maxLumaPs; 217 const Int m_maxCPBMainTier; 218 const Int m_maxCPBHighTier; 219 const Int m_maxSliceSegmentsPerPicture; 220 const Int m_maxTileRows; 221 const Int m_maxTileCols; 222 }; 223 224 extern std::map< Level::Name, TComGeneralTierAndLevelLimits > g_generalTierAndLevelLimits; 225 226 #endif 189 227 // ==================================================================================================================== 190 228 // Misc. … … 192 230 193 231 extern Char g_aucConvertToBit [ MAX_CU_SIZE+1 ]; // from width to log2(width)-2 194 232 #if !MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 195 233 #if H_3D_IC 196 234 extern UInt g_aICEnableCANDIDATE[10]; 197 235 extern UInt g_aICEnableNUM[ 10 ]; //10 layers 198 236 extern Int g_lastlayer; 237 #endif 199 238 #endif 200 239 -
trunk/source/Lib/TLibCommon/TComSlice.cpp
r1039 r1066 1 /*The copyright in this software is being made available under the BSD1 /* The copyright in this software is being made available under the BSD 2 2 * License, included below. This software may be subject to other third party 3 3 * and contributor rights, including patent rights, and no such rights are … … 103 103 , m_temporalLayerNonReferenceFlag ( false ) 104 104 , m_enableTMVPFlag ( true ) 105 #if I0044_SLICE_TMVP 106 , m_availableForTMVPRefFlag ( true ) 107 #endif 105 108 #if H_MV 106 109 , m_refPicSetInterLayer0 ( NULL ) … … 725 728 726 729 assert( rpsCurrList[li][ orgIdx ] != NULL ); 730 #if DISCARDABLE_PIC_RPS 731 assert( rpsCurrList[li][ orgIdx ]->getSlice(0)->getDiscardableFlag() == 0 ); // Inter-layer RPS shall not contain picture with discardable_flag = 1. 732 #endif 727 733 m_apcRefPicList [li][rIdx] = rpsCurrList [li][ orgIdx ]; 728 734 m_bIsUsedAsLongTerm[li][rIdx] = usedAsLongTerm [li][ orgIdx ] ; … … 1875 1881 #if H_MV 1876 1882 m_vpsBaseLayerInternalFlag = true; 1883 #if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL 1884 m_vpsBaseLayerAvailableFlag = true; 1885 #endif 1877 1886 #endif 1878 1887 … … 1900 1909 { 1901 1910 m_layerSetIdxForOlsMinus1[i] = -1; 1911 #if !H_MV_HLS10_PTL 1902 1912 m_profileLevelTierIdx[i] = 0; 1913 #endif 1903 1914 for ( Int j = 0; j < MAX_VPS_NUH_LAYER_ID_PLUS1; j++) 1904 1915 { 1916 #if H_MV_HLS10_PTL 1917 #if H_MV_HLS10_PTL_FIX 1918 m_profileTierLevelIdx[i][j] = -1; 1919 #else 1920 m_profileTierLevelIdx[i][j] = false; 1921 #endif 1922 #endif 1905 1923 m_outputLayerFlag[i][j] = false; 1906 1924 } … … 1966 1984 m_directDependencyFlag[i][j] = false; 1967 1985 m_directDependencyType[i][j] = -1; 1986 #if H_MV_HLS10_REF_PRED_LAYERS 1987 m_dependencyFlag [i][j] = false; 1988 m_idDirectRefLayer[i][j] = -1; 1989 m_idPredictedLayer[i][j] = -1; 1990 m_idRefLayer [i][j] = -1; 1991 #else 1968 1992 m_refLayerId[i][j] = -1; 1993 #endif 1969 1994 m_maxTidIlRefPicsPlus1[i][j] = 7; 1970 1995 } … … 2050 2075 assert( getVpsNumRepFormatsMinus1() <= 255 ); 2051 2076 2077 #if H_MV_HLS10_ADD_LAYERSETS 2078 // The value of num_add_layer_sets shall be in the range of 0 to 1023, inclusive. 2079 assert( getNumAddLayerSets() >= 0 && getNumAddLayerSets() <= 1023 ); 2080 #endif 2052 2081 return true; 2053 2082 } … … 2081 2110 Void TComVPS::setRefLayers() 2082 2111 { 2112 2113 #if H_MV_HLS10_REF_PRED_LAYERS 2114 for( Int i = 0; i <= getMaxLayersMinus1(); i++ ) 2115 { 2116 for( Int j = 0; j <= getMaxLayersMinus1(); j++ ) 2117 { 2118 m_dependencyFlag[ i ][ j ] = getDirectDependencyFlag( i , j ); 2119 for( Int k = 0; k < i; k++ ) 2120 { 2121 if( getDirectDependencyFlag(i , k ) && m_dependencyFlag[k][j] ) 2122 { 2123 m_dependencyFlag[ i ][ j ] = true; 2124 } 2125 } 2126 } 2127 } 2128 2129 for( Int i = 0; i <= getMaxLayersMinus1(); i++ ) 2130 { 2131 Int iNuhLId = getLayerIdInNuh( i ); 2132 Int d = 0; 2133 Int r = 0; 2134 Int p = 0; 2135 for( Int j = 0; j <= getMaxLayersMinus1(); j++ ) 2136 { 2137 Int jNuhLid = getLayerIdInNuh( j ); 2138 if( getDirectDependencyFlag( i , j ) ) 2139 { 2140 m_idDirectRefLayer[iNuhLId][d++] = jNuhLid; 2141 } 2142 if( getDependencyFlag( i , j ) ) 2143 { 2144 m_idRefLayer [iNuhLId][r++] = jNuhLid; 2145 } 2146 if( getDependencyFlag( j , i ) ) 2147 { 2148 m_idPredictedLayer[iNuhLId][p++] = jNuhLid; 2149 } 2150 } 2151 m_numDirectRefLayers[ iNuhLId ] = d; 2152 m_numRefLayers [ iNuhLId ] = r; 2153 m_numPredictedLayers[ iNuhLId ] = p; 2154 } 2155 2156 Bool layerIdInListFlag[ 64 ]; 2157 for( Int i = 0; i <= 63; i++ ) 2158 { 2159 layerIdInListFlag[ i ] = 0; 2160 } 2161 2162 Int k = 0; 2163 for( Int i = 0; i <= getMaxLayersMinus1(); i++ ) 2164 { 2165 Int iNuhLId = getLayerIdInNuh( i ); 2166 if( getNumDirectRefLayers( iNuhLId ) == 0 ) 2167 { 2168 m_treePartitionLayerIdList[ k ][ 0 ] = iNuhLId; 2169 Int h = 1; 2170 for( Int j = 0; j < getNumPredictedLayers( iNuhLId ); j++ ) 2171 { 2172 Int predLId = getIdPredictedLayer( iNuhLId, j ); 2173 if ( !layerIdInListFlag[ predLId ] ) 2174 { 2175 m_treePartitionLayerIdList[ k ][ h++ ] = predLId; 2176 layerIdInListFlag[ predLId ] = 1; 2177 } 2178 } 2179 m_numLayersInTreePartition[ k++ ] = h; 2180 } 2181 } 2182 m_numIndependentLayers = k; 2183 #else // H_MV_HLS10_GEN 2184 2083 2185 for( Int i = 0; i <= getMaxLayersMinus1(); i++ ) 2084 2186 { … … 2116 2218 } 2117 2219 } 2118 2220 2119 2221 for( Int i = 0; i <= getMaxLayersMinus1(); i++ ) // Bug in spec "<" instead of "<=" 2120 2222 { … … 2136 2238 countedLayerIdxFlag[ i ] = 0; 2137 2239 } 2138 2139 2240 for( Int i = 0, k = 0; i <= getMaxLayersMinus1(); i++ ) 2140 2241 { … … 2144 2245 m_treePartitionLayerIdList[ k ][ 0 ] = iNuhLId; 2145 2246 m_numLayersInTreePartition[ k ] = 1; 2247 2146 2248 for( Int j = 0; j < m_numPredictedLayers[ iNuhLId ]; j++ ) 2147 2249 { … … 2154 2256 } 2155 2257 k++; 2156 } 2157 m_numIndependentLayers = k; 2158 } 2159 } 2160 2258 2259 m_numIndependentLayers = k; 2260 } 2261 } 2262 #endif // H_MV_HLS10_GEN 2263 } 2264 2265 #if !H_MV_HLS10_REF_PRED_LAYERS 2161 2266 Int TComVPS::getRefLayerId( Int layerIdInNuh, Int idx ) 2162 2267 { … … 2166 2271 return refLayerIdInNuh; 2167 2272 } 2273 #endif 2168 2274 2169 2275 Int TComVPS::getScalabilityId( Int layerIdInVps, ScalabilityType scalType ) … … 2203 2309 for ( i = 0; i < iNumViews ; i++ ) 2204 2310 { 2311 #if H_3D_FIX_UNINIT 2312 m_bCamParPresent[i] = false; 2313 #endif 2205 2314 m_bCamParInSliceHeader[i] = false; 2206 2315 m_aaaiCodedScale[i] = new Int*[ 2 ]; … … 2315 2424 { 2316 2425 assert( lsIdx >= 0 ); 2426 #if H_MV_HLS10_ADD_LAYERSETS 2427 assert( lsIdx <= getNumLayerSets() ); 2428 #else 2317 2429 assert( lsIdx <= getVpsNumLayerSetsMinus1() ); 2430 #endif 2318 2431 return (Int) m_layerSetLayerIdList[ lsIdx ].size(); 2319 2432 } … … 2339 2452 } 2340 2453 2454 #if !H_MV_HLS10_REF_PRED_LAYERS 2341 2455 Bool TComVPS::getInDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps, Int depth /*= 0 */ ) 2342 2456 { 2457 #if H_MV_HLS10_REF_PRED_LAYERS 2458 // TBD: Remove getInDirectDependencyFlag entirely. 2459 return getDependencyFlag( depLayeridInVps, refLayeridInVps ); 2460 #else 2343 2461 assert( depth < 65 ); 2344 2462 Bool dependentFlag = getDirectDependencyFlag( depLayeridInVps, refLayeridInVps ); … … 2352 2470 } 2353 2471 return dependentFlag; 2354 } 2472 #endif 2473 } 2474 #endif 2355 2475 2356 2476 Void TComVPS::deriveLayerSetLayerIdList() … … 2378 2498 { 2379 2499 Int lsIdx = olsIdxToLsIdx( i ); 2380 2500 2381 2501 for( Int j = 0; j < getNumLayersInIdList( lsIdx ); j++ ) 2382 2502 { 2383 m_targetDecLayerIdLists[i].push_back( m_layerSetLayerIdList[ lsIdx ][ j ] ); 2503 #if H_MV_HLS10_NESSECARY_LAYER 2504 if ( getNecessaryLayerFlag( i , j )) 2505 { 2506 #endif 2507 m_targetDecLayerIdLists[i].push_back( m_layerSetLayerIdList[ lsIdx ][ j ] ); 2508 #if H_MV_HLS10_NESSECARY_LAYER 2509 } 2510 #endif 2511 2384 2512 if( getOutputLayerFlag( i, j )) 2385 2513 { … … 2429 2557 } 2430 2558 2559 #if !H_MV_HLS10_ADD_LAYERSETS 2431 2560 Void TComVPS::inferDbpSizeLayerSetZero( TComSPS* sps, Bool encoder ) 2432 2561 { … … 2451 2580 } 2452 2581 } 2453 2582 #endif 2454 2583 Bool TComVPS::getAltOutputLayerFlagVar( Int i ) 2455 2584 { … … 2465 2594 } 2466 2595 2596 #if !H_MV_HLS10_MAXNUMPICS 2467 2597 Int TComVPS::getMaxNumPics( Int layerId ) 2468 2598 { … … 2483 2613 return maxNumPics; 2484 2614 } 2485 2615 #endif 2616 2617 #if !H_MV_HLS10_REF_PRED_LAYERS 2486 2618 Void TComVPS::xSetRefLayerFlags( Int currLayerId ) 2487 2619 { … … 2496 2628 } 2497 2629 } 2630 2631 #endif 2632 2633 #if H_MV_HLS10_PTL_FIX 2634 Int TComVPS::inferProfileTierLevelIdx(Int i, Int j) 2635 { 2636 Bool inferZero = ( i == 0 && j == 0 && getVpsBaseLayerInternalFlag() ); 2637 Bool inferGreaterZero = getNecessaryLayerFlag(i,j) && ( getVpsNumProfileTierLevelMinus1() == 0 ); 2638 assert( inferZero || inferGreaterZero ); 2639 2640 Bool ptlIdx = 0; // inference for greaterZero 2641 if ( inferZero ) 2642 { 2643 ptlIdx = getMaxLayersMinus1() > 0 ? 1 : 0; 2644 if ( inferGreaterZero ) 2645 { 2646 assert( ptlIdx == 0 ); 2647 // This should never happen since : 2648 // When vps_max_layers_minus1 is greater than 0, the value of vps_num_profile_tier_level_minus1 shall be greater than or equal to 1. 2649 } 2650 } 2651 return ptlIdx; 2652 } 2653 #endif 2654 2655 #if H_MV_HLS10_ADD_LAYERSETS 2656 Void TComVPS::deriveAddLayerSetLayerIdList(Int i) 2657 { 2658 assert( m_layerSetLayerIdList.size() == ( getVpsNumLayerSetsMinus1() + 1 + i ) ); 2659 std::vector<Int> layerSetLayerIdList; 2660 2661 for( Int treeIdx = 1; treeIdx < getNumIndependentLayers(); treeIdx++ ) 2662 { 2663 // The value of highest_layer_idx_plus1[ i ][ j ] shall be in the range of 0 to NumLayersInTreePartition[ j ], inclusive. 2664 assert( getHighestLayerIdxPlus1( i, treeIdx ) >= 0 && getHighestLayerIdxPlus1( i, treeIdx ) <= getNumLayersInTreePartition( treeIdx ) ); 2665 2666 for( Int layerCnt = 0; layerCnt < getHighestLayerIdxPlus1( i, treeIdx ); layerCnt++ ) 2667 { 2668 layerSetLayerIdList.push_back( getTreePartitionLayerIdList( treeIdx, layerCnt ) ); 2669 } 2670 } 2671 m_layerSetLayerIdList.push_back( layerSetLayerIdList ); 2672 2673 //It is a requirement of bitstream conformance that 2674 //NumLayersInIdList[ vps_num_layer_sets_minus1 + 1 + i ] shall be greater than 0. 2675 assert( getNumLayersInIdList( getVpsNumLayerSetsMinus1() + 1 + i ) > 0 ); 2676 } 2677 2678 #endif 2679 2680 #if H_MV_HLS10_NESSECARY_LAYER 2681 Void TComVPS::deriveNecessaryLayerFlags(Int olsIdx) 2682 { 2683 AOF( olsIdx >= 0 && olsIdx < getNumOutputLayerSets() ); 2684 Int lsIdx = olsIdxToLsIdx( olsIdx ); 2685 for( Int lsLayerIdx = 0; lsLayerIdx < getNumLayersInIdList( lsIdx) ; lsLayerIdx++ ) 2686 { 2687 m_necessaryLayerFlag[ olsIdx ][ lsLayerIdx ] = 0; 2688 } 2689 for( Int lsLayerIdx = 0; lsLayerIdx < getNumLayersInIdList( lsIdx ); lsLayerIdx++ ) 2690 { 2691 if( getOutputLayerFlag( olsIdx, lsLayerIdx )) 2692 { 2693 m_necessaryLayerFlag[ olsIdx ][ lsLayerIdx ] = 1; 2694 Int currLayerId = getLayerSetLayerIdList( lsIdx, lsLayerIdx ); 2695 for( Int rLsLayerIdx = 0; rLsLayerIdx < lsLayerIdx; rLsLayerIdx++ ) 2696 { 2697 Int refLayerId = getLayerSetLayerIdList( lsIdx, rLsLayerIdx ); 2698 if( getDependencyFlag( getLayerIdInVps( currLayerId ), getLayerIdInVps( refLayerId ) ) ) 2699 { 2700 m_necessaryLayerFlag[ olsIdx ][ rLsLayerIdx ] = 1; 2701 } 2702 } 2703 } 2704 } 2705 m_numNecessaryLayers[ olsIdx ] = 0; 2706 for( Int lsLayerIdx = 0; lsLayerIdx < getNumLayersInIdList( lsIdx ); lsLayerIdx++ ) 2707 { 2708 m_numNecessaryLayers[ olsIdx ] += m_necessaryLayerFlag[ olsIdx ][ lsLayerIdx ]; 2709 } 2710 } 2711 #endif 2712 2713 #if H_MV_HLS10_ADD_LAYERSETS 2714 Void TComVPS::printPTL() 2715 { 2716 std::vector<Int> idx; 2717 std::vector<Int> num; 2718 std::vector< std::vector<Int> > ptlInfo; 2719 2720 std::cout << std::right << std::setw(60) << std::setfill('-') << " " << std::setfill(' ') << std::endl << "PTLI" << std::endl; 2721 2722 for ( Int i = 0; i <= getVpsNumProfileTierLevelMinus1(); i++ ) 2723 { 2724 std::vector<Int> curPtlInfo; 2725 ProfileTierLevel* ptl = getPTL( i )->getGeneralPTL(); 2726 curPtlInfo.push_back( (Int) ptl->getProfileIdc() ); 2727 curPtlInfo.push_back( (Int) ptl->getTierFlag() ); 2728 curPtlInfo.push_back( (Int) ptl->getLevelIdc() ); 2729 curPtlInfo.push_back( (Int) ptl->getInbldFlag() ); 2730 2731 idx.push_back ( i ); 2732 num.push_back ( 4 ); 2733 ptlInfo.push_back( curPtlInfo ); 2734 } 2735 2736 xPrintArray( "VpsProfileTierLevel", getVpsNumProfileTierLevelMinus1() + 1, idx, num, ptlInfo, false ); 2737 2738 num.clear(); 2739 idx.clear(); 2740 for (Int i = 0; i < getNumOutputLayerSets(); i++) 2741 { 2742 num.push_back ( getNumLayersInIdList( olsIdxToLsIdx( i )) ); 2743 idx.push_back( i ); 2744 } 2745 2746 xPrintArray( "profile_tier_level_idx", getNumOutputLayerSets(), idx, num, m_profileTierLevelIdx, true ); 2747 std::cout << std::endl; 2748 } 2749 2750 Void TComVPS::printLayerDependencies() 2751 { 2752 vector<Int> fullArray; 2753 vector<Int> range; 2754 2755 #if H_3D 2756 vector<Int> depthId; 2757 #endif 2758 2759 #if H_MV_HLS10_AUX 2760 vector<Int> viewOrderIndex; 2761 vector<Int> auxId; 2762 vector<Int> dependencyId; 2763 vector<Int> viewId; 2764 #endif 2765 for (Int i = 0; i <= getMaxLayersMinus1(); i++ ) 2766 { 2767 fullArray.push_back( getMaxLayersMinus1() + 1 ); 2768 range.push_back( i ); 2769 #if H_MV_HLS10_AUX 2770 viewOrderIndex.push_back( getViewIndex ( i ) ); 2771 dependencyId .push_back( getDependencyId( i ) ); 2772 auxId .push_back( getAuxId ( i ) ); 2773 viewId .push_back( getViewId ( getLayerIdInNuh( i ) ) ); 2774 #if H_3D 2775 depthId.push_back( getDepthId( i ) ); 2776 #endif 2777 #endif 2778 } 2779 std::cout << std::right << std::setw(60) << std::setfill('-') << " " << std::setfill(' ') << std::endl << "Layer Dependencies" << std::endl; 2780 xPrintArray( "direct_dependency_flag", getMaxLayersMinus1()+1, range, fullArray, m_directDependencyFlag, false ); 2781 xPrintArray( "DependencyFlag", getMaxLayersMinus1()+1, range, fullArray, m_dependencyFlag, false ); 2782 xPrintArray( "layer_id_in_nuh", getMaxLayersMinus1()+1, m_layerIdInNuh, true ); 2783 xPrintArray( "IdPredictedLayer", getMaxLayersMinus1() + 1, m_layerIdInNuh, m_numPredictedLayers, m_idPredictedLayer, true ); 2784 xPrintArray( "IdRefLayer" , getMaxLayersMinus1() + 1, m_layerIdInNuh, m_numRefLayers, m_idRefLayer, true ); 2785 xPrintArray( "IdDirectRefLayer", getMaxLayersMinus1() + 1, m_layerIdInNuh, m_numDirectRefLayers, m_idDirectRefLayer, true ); 2786 std::cout << std::endl; 2787 } 2788 2789 #if H_MV_HLS10_AUX 2790 Void TComVPS::printScalabilityId() 2791 { 2792 vector<Int> layerIdxInVps; 2793 2794 #if H_3D 2795 vector<Int> depthId; 2796 #endif 2797 2798 vector<Int> viewOrderIndex; 2799 vector<Int> auxId; 2800 vector<Int> dependencyId; 2801 vector<Int> viewId; 2802 2803 for (Int i = 0; i <= getMaxLayersMinus1(); i++ ) 2804 { 2805 Int layerIdInNuh = getLayerIdInNuh( i ); 2806 layerIdxInVps .push_back( i ); 2807 viewOrderIndex.push_back( getViewIndex ( layerIdInNuh ) ); 2808 dependencyId .push_back( getDependencyId( layerIdInNuh ) ); 2809 auxId .push_back( getAuxId ( layerIdInNuh ) ); 2810 viewId .push_back( getViewId ( layerIdInNuh ) ); 2811 #if H_3D 2812 depthId .push_back( getDepthId ( layerIdInNuh ) ); 2813 #endif 2814 } 2815 2816 std::cout << std::right << std::setw(60) << std::setfill('-') << " " << std::setfill(' ') << std::endl << "Scalability Ids" << std::endl; 2817 xPrintArray( "layerIdxInVps" , getMaxLayersMinus1()+1, layerIdxInVps, false ); 2818 xPrintArray( "layer_id_in_nuh", getMaxLayersMinus1()+1, m_layerIdInNuh, false ); 2819 2820 xPrintArray( "ViewOrderIndex", getMaxLayersMinus1()+1, viewOrderIndex, false ); 2821 xPrintArray( "DependencyId" , getMaxLayersMinus1()+1, dependencyId , false ); 2822 xPrintArray( "AuxId" , getMaxLayersMinus1()+1, auxId , false ); 2823 xPrintArray( "ViewId" , getMaxLayersMinus1()+1, viewId , false ); 2824 2825 std::cout << std::endl; 2826 } 2827 #endif 2828 2829 Void TComVPS::printLayerSets() 2830 { 2831 vector<Int> fullArray; 2832 vector<Int> numLayersInIdList; 2833 vector<Int> rangeLayerSets; 2834 2835 2836 for (Int i = 0; i < getNumLayerSets(); i++ ) 2837 { 2838 numLayersInIdList.push_back( getNumLayersInIdList( i ) ); 2839 rangeLayerSets.push_back( i ); 2840 } 2841 2842 vector<Int> rangeOutputLayerSets; 2843 vector<Int> numOutputLayersInOutputLayerSet; 2844 vector<Int> numDecLayer; 2845 vector<Int> numLayersInLayerSetForOutputLayerSet; 2846 vector<Int> vOlsIdxToLsIdx; 2847 for (Int i = 0; i < getNumOutputLayerSets(); i++ ) 2848 { 2849 vOlsIdxToLsIdx.push_back( olsIdxToLsIdx(i)); 2850 numOutputLayersInOutputLayerSet.push_back( getNumOutputLayersInOutputLayerSet( i ) ); 2851 numDecLayer.push_back( (Int) m_targetDecLayerIdLists[ i ].size() ); 2852 rangeOutputLayerSets.push_back( i ); 2853 numLayersInLayerSetForOutputLayerSet.push_back( getNumLayersInIdList( olsIdxToLsIdx( i ) ) ); 2854 } 2855 2856 vector<Int> rangeIndependentLayers; 2857 for(Int i = 0; i < getNumIndependentLayers(); i++ ) 2858 { 2859 rangeIndependentLayers.push_back( i ); 2860 } 2861 2862 vector<Int> rangeAddLayerSets; 2863 vector<Int> numHighestLayerIdxPlus1; 2864 for(Int i = 0; i < getNumAddLayerSets(); i++ ) 2865 { 2866 rangeAddLayerSets.push_back( i ); 2867 numHighestLayerIdxPlus1.push_back( getNumIndependentLayers() ); 2868 } 2869 2870 std::cout << std::right << std::setw(60) << std::setfill('-') << " " << std::setfill(' ') << std::endl << "Layer Sets" << std::endl; 2871 xPrintArray( "TreePartitionLayerIdList", getNumIndependentLayers(), rangeIndependentLayers, m_numLayersInTreePartition, m_treePartitionLayerIdList, true ); 2872 xPrintArray( "highest_layer_idx_plus1", getNumAddLayerSets(), rangeAddLayerSets, numHighestLayerIdxPlus1, m_highestLayerIdxPlus1, true ); 2873 xPrintArray( "LayerSetLayerIdList" , (Int) getNumLayerSets() , rangeLayerSets , numLayersInIdList, m_layerSetLayerIdList, true ); 2874 xPrintArray( "OlsIdxToLsIdx", (Int) vOlsIdxToLsIdx.size(), vOlsIdxToLsIdx, true ); 2875 xPrintArray( "OutputLayerFlag" , getNumOutputLayerSets(), rangeOutputLayerSets, numLayersInLayerSetForOutputLayerSet, m_outputLayerFlag, true ); 2876 xPrintArray( "TargetOptLayerIdList", getNumOutputLayerSets(), rangeOutputLayerSets, numOutputLayersInOutputLayerSet, m_targetOptLayerIdLists, true ); 2877 xPrintArray( "NecessaryLayerFlag" , getNumOutputLayerSets(), rangeOutputLayerSets, numLayersInLayerSetForOutputLayerSet, m_necessaryLayerFlag , true ); 2878 xPrintArray( "TargetDecLayerIdList", getNumOutputLayerSets(), rangeOutputLayerSets, numDecLayer, m_targetDecLayerIdLists, true ); 2879 std::cout << endl; 2880 } 2881 2882 #endif 2498 2883 2499 2884 #endif // H_MV … … 2579 2964 #endif 2580 2965 2966 #if !H_MV_HLS10_PPS 2581 2967 m_numScaledRefLayerOffsets = 0; 2582 2968 … … 2590 2976 m_scaledRefLayerLeftOffset [i] = 0; 2591 2977 m_scaledRefLayerTopOffset [i] = 0; 2592 m_scaledRefLayerRi ghtOffset [i] = 0;2978 m_scaledRefLayerRiFghtOffset [i] = 0; 2593 2979 m_scaledRefLayerBottomOffset [i] = 0; 2594 2980 } 2981 #endif 2595 2982 #endif 2596 2983 } … … 2967 3354 Void TComSPS::inferRepFormat( TComVPS* vps, Int layerIdCurr ) 2968 3355 { 3356 #if H_MV_HLS10_MULTILAYERSPS 3357 if ( getMultiLayerExtSpsFlag() ) 3358 #else 2969 3359 if ( layerIdCurr > 0 ) 3360 #endif 2970 3361 { 2971 3362 Int repFormatIdx = getUpdateRepFormatFlag() ? getSpsRepFormatIdx() : vps->getVpsRepFormatIdx( vps->getLayerIdInVps( layerIdCurr ) ) ; 2972 3363 TComRepFormat* repFormat = vps->getRepFormat( repFormatIdx ); 2973 setChromaFormatIdc( repFormat->getChromaFormatVpsIdc() ); 2974 //// ToDo: add when supported: 2975 // setSeperateColourPlaneFlag( repFormat->getSeparateColourPlaneVpsFlag() ) ; 2976 2977 setPicWidthInLumaSamples ( repFormat->getPicWidthVpsInLumaSamples() ); 2978 setPicHeightInLumaSamples( repFormat->getPicHeightVpsInLumaSamples() ); 2979 2980 setBitDepthY ( repFormat->getBitDepthVpsLumaMinus8() + 8 ); 2981 setQpBDOffsetY ( (Int) (6*( getBitDepthY() - 8 )) ); 2982 2983 setBitDepthC ( repFormat->getBitDepthVpsChromaMinus8() + 8 ); 2984 setQpBDOffsetC ( (Int) (6* ( getBitDepthC() -8 ) ) ); 2985 if ( getLayerId() > 0 && getUpdateRepFormatFlag() ) 3364 setChromaFormatIdc( repFormat->getChromaFormatVpsIdc() ); 3365 //// ToDo: add when supported: 3366 // setSeperateColourPlaneFlag( repFormat->getSeparateColourPlaneVpsFlag() ) ; 3367 3368 setPicWidthInLumaSamples ( repFormat->getPicWidthVpsInLumaSamples() ); 3369 setPicHeightInLumaSamples( repFormat->getPicHeightVpsInLumaSamples() ); 3370 3371 setBitDepthY ( repFormat->getBitDepthVpsLumaMinus8() + 8 ); 3372 setQpBDOffsetY ( (Int) (6*( getBitDepthY() - 8 )) ); 3373 3374 setBitDepthC ( repFormat->getBitDepthVpsChromaMinus8() + 8 ); 3375 setQpBDOffsetC ( (Int) (6* ( getBitDepthC() -8 ) ) ); 3376 #if H_MV_HLS10_GEN_VSP_CONF_WIN 3377 Window &spsConf = getConformanceWindow(); 3378 3379 // Scaled later 3380 spsConf.setScaledFlag( false ); 3381 spsConf.setWindowLeftOffset ( repFormat->getConfWinVpsLeftOffset() ); 3382 spsConf.setWindowRightOffset ( repFormat->getConfWinVpsRightOffset() ); 3383 spsConf.setWindowTopOffset ( repFormat->getConfWinVpsTopOffset() ); 3384 spsConf.setWindowBottomOffset( repFormat->getConfWinVpsBottomOffset() ); 3385 #endif 3386 3387 #if H_MV_HLS10_MULTILAYERSPS 3388 if ( getMultiLayerExtSpsFlag() && getUpdateRepFormatFlag() ) 3389 #else 3390 if ( getLayerId() > 0 && getUpdateRepFormatFlag() ) 3391 #endif 2986 3392 { 2987 3393 assert( getChromaFormatIdc() <= repFormat->getChromaFormatVpsIdc() ); … … 3017 3423 const std::vector<Int>& targetDecLayerIdList = vps->getTargetDecLayerIdList( vps->olsIdxToLsIdx( targetOptLayerSetIdx )); 3018 3424 3425 #if H_MV_HLS10_MULTILAYERSPS 3426 if ( getMultiLayerExtSpsFlag() ) 3427 #else 3019 3428 if (getLayerId() > 0 ) 3429 #endif 3020 3430 { 3021 3431 Int layerIdx = 0; … … 3035 3445 Int maxDecPicBufferingMinus1 = vps->getDpbSize()->getMaxVpsDecPicBufferingMinus1( targetOptLayerSetIdx, layerIdx, i ) ; 3036 3446 3037 if ( encoder ) 3447 #if H_MV_HLS10_MULTILAYERSPS 3448 // This preliminary fix needs to be checked. 3449 Int maxNumReorderPics = vps->getDpbSize()->getMaxVpsNumReorderPics( targetOptLayerSetIdx, i ); 3450 Int maxLatencyIncreasePlus1 = vps->getDpbSize()->getMaxVpsLatencyIncreasePlus1( targetOptLayerSetIdx, i ); 3451 #endif 3452 if ( encoder ) 3038 3453 { 3039 3454 assert( getMaxDecPicBuffering( i ) - 1 == maxDecPicBufferingMinus1 ); 3455 #if H_MV_HLS10_MULTILAYERSPS 3456 // This preliminary fix needs to be checked. 3457 assert( getNumReorderPics( i ) == maxNumReorderPics ); 3458 assert( getMaxLatencyIncrease( i ) == maxLatencyIncreasePlus1 ); 3459 #endif 3460 3040 3461 } 3041 3462 else 3042 3463 { 3464 #if !H_MV_HLS10_MULTILAYERSPS 3043 3465 setMaxDecPicBuffering(i, maxDecPicBufferingMinus1 + 1 ); 3044 } 3045 } 3466 #else 3467 // This preliminary fix needs to be checked. 3468 setMaxDecPicBuffering( maxDecPicBufferingMinus1 + 1 , i); 3469 setNumReorderPics ( maxNumReorderPics, i ); 3470 setMaxLatencyIncrease( maxLatencyIncreasePlus1 - 1 , i); 3471 #endif 3472 } 3473 } 3046 3474 } 3047 3475 } … … 3049 3477 Void TComSPS::checkRpsMaxNumPics( TComVPS* vps, Int currLayerId ) 3050 3478 { 3479 #if !H_MV_HLS10_MAXNUMPICS 3051 3480 // In spec, when rps is in SPS, nuh_layer_id of SPS is used instead 3052 3481 // of nuh_layer_id of slice (currLayerId), this seems to be a bug. 3053 3482 #endif 3054 3483 for (Int i = 0; i < getRPSList()->getNumberOfReferencePictureSets(); i++ ) 3055 3484 { … … 3057 3486 if ( !rps->getInterRPSPrediction() ) 3058 3487 { 3488 #if H_MV_HLS10_MAXNUMPICS 3489 rps->checkMaxNumPics( vps->getVpsExtensionFlag(), MAX_INT, getLayerId(), getMaxDecPicBuffering( getSpsMaxSubLayersMinus1() ) - 1 ); // INT_MAX to be replaced by DpbSize 3490 #else 3059 3491 rps->checkMaxNumPics( vps->getVpsExtensionFlag(), vps->getMaxNumPics( currLayerId ), 3060 3492 getLayerId(), getMaxDecPicBuffering( getSpsMaxSubLayersMinus1() ) - 1 ); 3061 } 3062 } 3063 } 3064 3493 #endif 3494 } 3495 } 3496 } 3497 3498 #if H_MV_HLS10_MULTILAYERSPS 3499 Void TComSPS::inferSpsMaxSubLayersMinus1(Bool atPsActivation, TComVPS* vps) 3500 { 3501 assert( getLayerId() != 0 ); 3502 if ( !atPsActivation ) 3503 { 3504 assert( vps == NULL ); 3505 if (getSpsExtOrMaxSubLayersMinus1() != 7) 3506 { 3507 setSpsMaxSubLayersMinus1( getSpsExtOrMaxSubLayersMinus1() ); 3508 } 3509 } 3510 else 3511 { 3512 assert( vps != NULL ); 3513 if (getSpsExtOrMaxSubLayersMinus1() == 7) 3514 { 3515 setSpsMaxSubLayersMinus1( vps->getMaxSubLayersMinus1() ); 3516 } 3517 } 3518 } 3519 #endif 3065 3520 #endif 3066 3521 … … 3425 3880 { 3426 3881 TComVPS* vps = getVPS(); 3882 #if H_MV_HLS10_REF_PRED_LAYERS 3883 Int refLayerIdx = vps->getLayerIdInVps( vps->getIdDirectRefLayer( getLayerId(), i ) ); 3884 #else 3427 3885 Int refLayerIdx = vps->getLayerIdInVps( vps->getRefLayerId( getLayerId(), i ) ); 3886 #endif 3428 3887 3429 3888 Bool refLayerPicFlag = ( vps->getSubLayersVpsMaxMinus1( refLayerIdx ) >= getTLayer() ) && ( getTLayer() == 0 ) && … … 3496 3955 Int TComSlice::getRefPicLayerId( Int i ) 3497 3956 { 3957 #if H_MV_HLS10_REF_PRED_LAYERS 3958 return getVPS()->getIdDirectRefLayer( getLayerId(), getInterLayerPredLayerIdc( i ) ); 3959 #else 3498 3960 return getVPS()->getRefLayerId( getLayerId(), getInterLayerPredLayerIdc( i ) ); 3961 #endif 3499 3962 } 3500 3963 … … 3602 4065 m_bApplyIC = true; 3603 4066 Int refLayer = curLayer-1; 3604 if( (refLayer>=0) && (g_aICEnableCANDIDATE[refLayer]>0) ) 4067 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 4068 Int ICEnableCandidate = getICEnableCandidate(refLayer); 4069 Int ICEnableNum = getICEnableNum(refLayer); 4070 if( (refLayer>=0) && (ICEnableCandidate>0) ) 3605 4071 { 3606 Double ratio=Double( g_aICEnableNUM[refLayer])/Double(g_aICEnableCANDIDATE[refLayer]);4072 Double ratio=Double(ICEnableNum/Double(ICEnableCandidate)); 3607 4073 3608 4074 if( ratio > IC_LOW_LATENCY_ENCODING_THRESHOLD) 3609 {4075 { 3610 4076 m_bApplyIC=true; 3611 4077 } … … 3615 4081 } 3616 4082 } 4083 setICEnableCandidate(curLayer, 0); 4084 setICEnableNum(curLayer, 0); 4085 #else 4086 if( (refLayer>=0) && (g_aICEnableCANDIDATE[refLayer]>0) ) 4087 { 4088 Double ratio=Double(g_aICEnableNUM[refLayer])/Double(g_aICEnableCANDIDATE[refLayer]); 4089 4090 if( ratio > IC_LOW_LATENCY_ENCODING_THRESHOLD) 4091 { 4092 m_bApplyIC=true; 4093 } 4094 else 4095 { 4096 m_bApplyIC=false; 4097 } 4098 } 3617 4099 g_aICEnableNUM[curLayer]=0; 3618 4100 g_aICEnableCANDIDATE[curLayer]=0; 3619 4101 g_lastlayer=getDepth(); 4102 #endif 3620 4103 } 3621 4104 } … … 3727 4210 3728 4211 #if H_3D_DDD 4212 #if LGE_FCO_I0116 4213 if( getIsDepth() && getViewIndex() > 0 && getVPS()->getMPIFlag(layerIdInVPS)) 4214 #else 3729 4215 if( getIsDepth() && getViewIndex() > 0 ) 4216 #endif 3730 4217 { 3731 4218 TComSlice *pcTextSlice = getTexturePic()->getSlice( 0 ); … … 4209 4696 , m_nonPackedConstraintFlag(false) 4210 4697 , m_frameOnlyConstraintFlag(false) 4698 #if H_MV_HLS10_PTL 4699 , m_max12bitConstraintFlag ( false ) 4700 , m_max10bitConstraintFlag ( false ) 4701 , m_max8bitConstraintFlag ( false ) 4702 , m_max422chromaConstraintFlag ( false ) 4703 , m_max420chromaConstraintFlag ( false ) 4704 , m_maxMonochromeConstraintFlag ( false ) 4705 , m_intraConstraintFlag ( false ) 4706 , m_onePictureOnlyConstraintFlag( false ) 4707 , m_lowerBitRateConstraintFlag ( false ) 4708 , m_inbldFlag ( false ) 4709 #endif 4211 4710 { 4212 4711 ::memset(m_profileCompatibilityFlag, 0, sizeof(m_profileCompatibilityFlag)); 4213 4712 } 4713 4714 #if H_MV_HLS10_PTL_INFER_FIX 4715 Bool ProfileTierLevel::getV2ConstraintsPresentFlag() 4716 { 4717 return ( 4718 getProfileIdc( ) == 4 || getProfileCompatibilityFlag( 4 ) || getProfileIdc( ) == 5 || getProfileCompatibilityFlag( 5 ) || 4719 getProfileIdc( ) == 6 || getProfileCompatibilityFlag( 6 ) || getProfileIdc( ) == 7 || getProfileCompatibilityFlag( 7 ) 4720 ); 4721 } 4722 4723 Bool ProfileTierLevel::getInbldPresentFlag() 4724 { 4725 return ( 4726 ( getProfileIdc() >= 1 && getProfileIdc() <= 5 ) || getProfileCompatibilityFlag( 1 ) || getProfileCompatibilityFlag( 2 ) || 4727 getProfileCompatibilityFlag( 3 ) || getProfileCompatibilityFlag( 4 ) || getProfileCompatibilityFlag( 5 ) 4728 ); 4729 } 4730 4731 Void ProfileTierLevel::copyV2ConstraintFlags(ProfileTierLevel* ptlRef) 4732 { 4733 setMax12bitConstraintFlag ( ptlRef->getMax12bitConstraintFlag ( ) ); 4734 setMax10bitConstraintFlag ( ptlRef->getMax10bitConstraintFlag ( ) ); 4735 setMax8bitConstraintFlag ( ptlRef->getMax8bitConstraintFlag ( ) ); 4736 setMax422chromaConstraintFlag ( ptlRef->getMax422chromaConstraintFlag ( ) ); 4737 setMax420chromaConstraintFlag ( ptlRef->getMax420chromaConstraintFlag ( ) ); 4738 setMaxMonochromeConstraintFlag ( ptlRef->getMaxMonochromeConstraintFlag ( ) ); 4739 setIntraConstraintFlag ( ptlRef->getIntraConstraintFlag ( ) ); 4740 setOnePictureOnlyConstraintFlag ( ptlRef->getOnePictureOnlyConstraintFlag ( ) ); 4741 setLowerBitRateConstraintFlag ( ptlRef->getLowerBitRateConstraintFlag ( ) ); 4742 } 4743 4744 Void ProfileTierLevel::copyProfile(ProfileTierLevel* ptlRef) 4745 { 4746 setProfileSpace ( ptlRef->getProfileSpace ( ) ); 4747 setTierFlag ( ptlRef->getTierFlag ( ) ); 4748 setProfileIdc ( ptlRef->getProfileIdc ( ) ); 4749 for (Int j = 0; j < 32; j++) 4750 { 4751 setProfileCompatibilityFlag(j, ptlRef->getProfileCompatibilityFlag ( j ) ); 4752 } 4753 setProgressiveSourceFlag ( ptlRef->getProgressiveSourceFlag ( ) ); 4754 setInterlacedSourceFlag ( ptlRef->getInterlacedSourceFlag ( ) ); 4755 setNonPackedConstraintFlag ( ptlRef->getNonPackedConstraintFlag ( ) ); 4756 setFrameOnlyConstraintFlag ( ptlRef->getFrameOnlyConstraintFlag ( ) ); 4757 copyV2ConstraintFlags ( ptlRef ); 4758 } 4759 4760 #endif 4214 4761 4215 4762 TComPTL::TComPTL() … … 4220 4767 4221 4768 #if H_MV 4769 #if !H_MV_HLS10_PTL_INFER_FIX 4222 4770 Void TComPTL::copyLevelFrom( TComPTL* source ) 4223 4771 { … … 4229 4777 } 4230 4778 } 4779 #else 4780 Void TComPTL::inferGeneralValues(Bool profilePresentFlag, Int k, TComPTL* refPTL) 4781 { 4782 ProfileTierLevel* refProfileTierLevel = NULL; 4783 if ( k > 0 ) 4784 { 4785 assert( refPTL != NULL); 4786 refProfileTierLevel = refPTL->getGeneralPTL(); 4787 } 4788 4789 ProfileTierLevel* curProfileTierLevel = getGeneralPTL( ); 4790 4791 if( !profilePresentFlag ) 4792 { 4793 assert( k > 0 ); 4794 assert( refProfileTierLevel != NULL ); 4795 curProfileTierLevel->copyProfile( refProfileTierLevel); 4796 } 4797 else 4798 { 4799 if ( !curProfileTierLevel->getV2ConstraintsPresentFlag() ) 4800 { 4801 curProfileTierLevel->setMax12bitConstraintFlag ( false ); 4802 curProfileTierLevel->setMax10bitConstraintFlag ( false ); 4803 curProfileTierLevel->setMax8bitConstraintFlag ( false ); 4804 curProfileTierLevel->setMax422chromaConstraintFlag ( false ); 4805 curProfileTierLevel->setMax420chromaConstraintFlag ( false ); 4806 curProfileTierLevel->setMaxMonochromeConstraintFlag ( false ); 4807 curProfileTierLevel->setIntraConstraintFlag ( false ); 4808 curProfileTierLevel->setOnePictureOnlyConstraintFlag ( false ); 4809 curProfileTierLevel->setLowerBitRateConstraintFlag ( false ); 4810 } 4811 4812 if ( !curProfileTierLevel->getInbldPresentFlag() ) 4813 { 4814 curProfileTierLevel->setInbldFlag( false ); 4815 } 4816 } 4817 } 4818 4819 Void TComPTL::inferSubLayerValues(Int maxNumSubLayersMinus1, Int k, TComPTL* refPTL) 4820 { 4821 assert( k == 0 || refPTL != NULL ); 4822 4823 for (Int i = maxNumSubLayersMinus1; i >= 0; i--) 4824 { 4825 ProfileTierLevel* refProfileTierLevel; 4826 if ( k != 0 ) 4827 { 4828 refProfileTierLevel = refPTL->getSubLayerPTL( i ); 4829 } 4830 else 4831 { 4832 if ( i == maxNumSubLayersMinus1) 4833 { 4834 refProfileTierLevel = getGeneralPTL(); 4835 } 4836 else 4837 { 4838 refProfileTierLevel = getSubLayerPTL( i + 1 ); 4839 } 4840 } 4841 4842 ProfileTierLevel* curProfileTierLevel = getSubLayerPTL( i ); 4843 if( !getSubLayerLevelPresentFlag( i ) ) 4844 { 4845 curProfileTierLevel->setLevelIdc( refProfileTierLevel->getLevelIdc() ); 4846 } 4847 4848 if( !getSubLayerProfilePresentFlag( i ) ) 4849 { 4850 curProfileTierLevel->copyProfile( refProfileTierLevel); 4851 } 4852 else 4853 { 4854 if ( !curProfileTierLevel->getV2ConstraintsPresentFlag() ) 4855 { 4856 curProfileTierLevel->copyV2ConstraintFlags( refProfileTierLevel ); 4857 } 4858 4859 if ( !curProfileTierLevel->getInbldPresentFlag() ) 4860 { 4861 curProfileTierLevel->setInbldFlag( refProfileTierLevel->getInbldFlag() ); 4862 } 4863 } 4864 } 4865 } 4866 4867 #endif 4231 4868 #endif 4232 4869 //! \} … … 4271 4908 4272 4909 m_vpsVuiBspHrdPresentFlag = false; 4910 #if H_MV_HLS10_VPS_VUI_BSP 4911 m_vpsVuiBspHrdParameters = NULL; 4912 #else 4273 4913 m_vpsVuiBspHrdParameters = new TComVpsVuiBspHrdParameters(); 4914 #endif 4274 4915 } 4275 4916 … … 4314 4955 assert( getBitDepthVpsLumaMinus8 () == prevRepFormat->getBitDepthVpsLumaMinus8 () ); 4315 4956 assert( getBitDepthVpsChromaMinus8 () == prevRepFormat->getBitDepthVpsChromaMinus8 () ); 4316 } 4317 } 4318 4957 } 4958 } 4959 4960 #if !H_MV_HLS10_VPS_VUI_BSP 4319 4961 Void TComVpsVuiBspHrdParameters::checkLayerInBspFlag( TComVPS* vps, Int h ) 4320 4962 { … … 4354 4996 // When num_bitstream_partitions[ h ] is equal to 1 for any value of h in the range 1 to vps_num_layer_set_minus1, inclusive, 4355 4997 // the value of layer_in_bsp_flag[ h ][ 0 ][ j ] should be equal to 0 for at least one value of j in the range 0 to 4356 // NumLayersInIdList[ h ] −1, inclusive.4998 // NumLayersInIdList[ h ] ? 1, inclusive. 4357 4999 4358 5000 … … 4369 5011 4370 5012 // For any value of h in the range 1 to vps_num_layer_set_minus1, inclusive, the value of layer_in_bsp_flag[ h ][ i ][ j ] 4371 // shall be equal to 1 for at most one value of i in the range of 0 to num_bitstream_partitions[ h ] −1, inclusive.5013 // shall be equal to 1 for at most one value of i in the range of 0 to num_bitstream_partitions[ h ] ? 1, inclusive. 4372 5014 4373 5015 for ( Int j = 0; j <= vps->getNumLayersInIdList( h ) - 1; j++ ) … … 4395 5037 // assert( getBspCombSchedIdx(h, i, j ) <= vps->getHrdParameters( getBspCombHrdIdx( h, i, j ) )->getCpbCntMinus1( highestTid ) ); 4396 5038 } 5039 #endif 5040 5041 #if H_MV_HLS10_VPS_VUI_BSP 5042 5043 TComVpsVuiBspHrdParameters::~TComVpsVuiBspHrdParameters() 5044 { 5045 delete[] m_cprmsAddPresentFlag; 5046 delete[] m_numSubLayerHrdMinus1; 5047 delete[] m_hrdParameters; 5048 5049 for (Int h = 0; h < m_numOls; h++) 5050 { 5051 if ( h > 0 ) 5052 { 5053 for (Int i = 0; i < getNumSignalledPartitioningSchemes(h)+1; i++) 5054 { 5055 for (Int t = 0; t < m_vps->getMaxSubLayersInLayerSetMinus1( m_vps->olsIdxToLsIdx(h) ) + 1; t++) 5056 { 5057 for ( Int j = 0; j <= getNumBspSchedulesMinus1(h,i,j);j++ ) 5058 { 5059 delete[] m_bspHrdIdx [h][i][t][j]; 5060 delete[] m_bspSchedIdx[h][i][t][j]; 5061 } 5062 } 5063 delete[] m_numBspSchedulesMinus1[h][i]; 5064 } 5065 } 5066 5067 for (Int j = 0; j <= getNumSignalledPartitioningSchemes(h ) + 1; j++ ) 5068 { 5069 for (Int k = 0; k <= getNumPartitionsInSchemeMinus1(h,j); k++ ) 5070 { 5071 delete[] m_layerIncludedInPartitionFlag[h][j][k]; 5072 } 5073 } 5074 delete[] m_numPartitionsInSchemeMinus1[h]; 5075 } 5076 delete[] m_numSignalledPartitioningSchemes; 5077 } 5078 5079 5080 Int TComVpsVuiBspHrdParameters::getBspHrdIdxLen(TComVPS* vps) 5081 { 5082 return gCeilLog2( vps->getNumHrdParameters() + getVpsNumAddHrdParams() ); 5083 } 5084 5085 Void TComVpsVuiBspHrdParameters::createAfterVpsNumAddHrdParams( TComVPS* vps ) 5086 { 5087 assert( vps == NULL ); 5088 m_vps = vps; 5089 m_offsetHrdParamIdx = vps->getNumHrdParameters(); 5090 m_numHrdParam = vps->getNumHrdParameters() + getVpsNumAddHrdParams() - m_offsetHrdParamIdx; 5091 m_numOls = vps->getNumOutputLayerSets(); 5092 5093 m_cprmsAddPresentFlag = new Bool [ m_numHrdParam ]; 5094 m_numSubLayerHrdMinus1 = new Int [ m_numHrdParam ]; 5095 m_hrdParameters = new TComHRD [ m_numHrdParam ]; 5096 5097 m_numSignalledPartitioningSchemes = new Int [ m_numOls ]; 5098 m_numPartitionsInSchemeMinus1 = new Int* [ m_numOls ]; 5099 m_numBspSchedulesMinus1 = new Int** [ m_numOls ]; 5100 m_bspHrdIdx = new Int****[ m_numOls ]; 5101 m_bspSchedIdx = new Int****[ m_numOls ]; 5102 } 5103 5104 Void TComVpsVuiBspHrdParameters::createAfterNumSignalledPartitioningSchemes( Int h ) 5105 { 5106 m_numPartitionsInSchemeMinus1 [h] = new Int [ getNumSignalledPartitioningSchemes(h) ]; 5107 m_layerIncludedInPartitionFlag[h] = new Bool** [ getNumSignalledPartitioningSchemes(h) ]; 5108 5109 m_numBspSchedulesMinus1[h] = new Int* [ getNumSignalledPartitioningSchemes(h) + 1 ]; 5110 for (Int i = 0; i < getNumSignalledPartitioningSchemes(h) + 1; i++) 5111 { 5112 Int tMax = m_vps->getMaxSubLayersInLayerSetMinus1( m_vps->olsIdxToLsIdx(h) ) + 1; 5113 m_numBspSchedulesMinus1[h][i] = new Int [ tMax ]; 5114 m_bspHrdIdx [h][i] = new Int**[ tMax ]; 5115 m_bspSchedIdx [h][i] = new Int**[ tMax ]; 5116 } 5117 } 5118 5119 Void TComVpsVuiBspHrdParameters::createAfterNumPartitionsInSchemeMinus1( Int h, Int j ) 5120 { 5121 m_layerIncludedInPartitionFlag[h][j] = new Bool*[ getNumPartitionsInSchemeMinus1(h,j)]; 5122 for( Int k = 0; k < getNumPartitionsInSchemeMinus1(h,j); k++ ) 5123 { 5124 m_layerIncludedInPartitionFlag[h][j][k] = new Bool[ m_vps->getNumLayersInIdList( m_vps->olsIdxToLsIdx(h))]; 5125 } 5126 } 5127 5128 Void TComVpsVuiBspHrdParameters::createAfterNumBspSchedulesMinus1( Int h, Int i, Int t ) 5129 { 5130 m_bspSchedIdx[h][i][t] = new Int* [ getNumBspSchedulesMinus1( h, i, t ) + 1 ]; 5131 m_bspHrdIdx [h][i][t] = new Int* [ getNumBspSchedulesMinus1( h, i, t ) + 1 ]; 5132 for( Int j = 0; j < getNumBspSchedulesMinus1( h, i, t ) + 1; j++ ) 5133 { 5134 m_bspSchedIdx[h][i][t][j] = new Int[ getNumPartitionsInSchemeMinus1( h, i ) ]; 5135 m_bspHrdIdx [h][i][t][j] = new Int[ getNumPartitionsInSchemeMinus1( h, i ) ]; 5136 } 5137 } 5138 5139 #endif 4397 5140 4398 5141 Void TComVUI::inferVideoSignalInfo( TComVPS* vps, Int layerIdCurr ) … … 4430 5173 for (Int k = 0; k < MAX_NUM_LAYER_IDS; k++ ) 4431 5174 { 5175 #if H_MV_HLS10_ADD_LAYERSETS 5176 m_maxVpsDecPicBufferingMinus1[i][k][j] = MIN_INT; 5177 #else 4432 5178 m_maxVpsDecPicBufferingMinus1[i][k][j] = 0; 5179 #endif 4433 5180 } 4434 5181 } -
trunk/source/Lib/TLibCommon/TComSlice.h
r1039 r1066 1 /* The copyright in this software is being made available under the BSD1 /* The copyright in this software is being made available under the BSD 2 2 * License, included below. This software may be subject to other third party 3 3 * and contributor rights, including patent rights, and no such rights are … … 45 45 #include "TComRom.h" 46 46 #include "TComList.h" 47 47 #if H_MV_HLS10_GEN_FIX 48 #if H_MV 49 #include <ios> 50 #include <iostream> 51 #include <iomanip> 52 #endif 53 #endif 48 54 //! \ingroup TLibCommon 49 55 //! \{ … … 201 207 Bool m_frameOnlyConstraintFlag; 202 208 209 #if H_MV_HLS10_PTL 210 #if H_MV 211 Bool m_max12bitConstraintFlag; 212 Bool m_max10bitConstraintFlag; 213 Bool m_max8bitConstraintFlag; 214 Bool m_max422chromaConstraintFlag; 215 Bool m_max420chromaConstraintFlag; 216 Bool m_maxMonochromeConstraintFlag; 217 Bool m_intraConstraintFlag; 218 Bool m_onePictureOnlyConstraintFlag; 219 Bool m_lowerBitRateConstraintFlag; 220 Bool m_inbldFlag; 221 #endif 222 #endif 203 223 public: 204 224 ProfileTierLevel(); … … 230 250 Bool getFrameOnlyConstraintFlag() const { return m_frameOnlyConstraintFlag; } 231 251 Void setFrameOnlyConstraintFlag(Bool b) { m_frameOnlyConstraintFlag = b; } 252 253 #if H_MV 254 #if H_MV_HLS10_PTL 255 Void setMax12bitConstraintFlag( Bool flag ) { m_max12bitConstraintFlag = flag; } 256 Bool getMax12bitConstraintFlag( ) { return m_max12bitConstraintFlag; } 257 258 Void setMax10bitConstraintFlag( Bool flag ) { m_max10bitConstraintFlag = flag; } 259 Bool getMax10bitConstraintFlag( ) { return m_max10bitConstraintFlag; } 260 261 Void setMax8bitConstraintFlag( Bool flag ) { m_max8bitConstraintFlag = flag; } 262 Bool getMax8bitConstraintFlag( ) { return m_max8bitConstraintFlag; } 263 264 Void setMax422chromaConstraintFlag( Bool flag ) { m_max422chromaConstraintFlag = flag; } 265 Bool getMax422chromaConstraintFlag( ) { return m_max422chromaConstraintFlag; } 266 267 Void setMax420chromaConstraintFlag( Bool flag ) { m_max420chromaConstraintFlag = flag; } 268 Bool getMax420chromaConstraintFlag( ) { return m_max420chromaConstraintFlag; } 269 270 Void setMaxMonochromeConstraintFlag( Bool flag ) { m_maxMonochromeConstraintFlag = flag; } 271 Bool getMaxMonochromeConstraintFlag( ) { return m_maxMonochromeConstraintFlag; } 272 Void setIntraConstraintFlag( Bool flag ) { m_intraConstraintFlag = flag; } 273 Bool getIntraConstraintFlag( ) { return m_intraConstraintFlag; } 274 275 Void setOnePictureOnlyConstraintFlag( Bool flag ) { m_onePictureOnlyConstraintFlag = flag; } 276 Bool getOnePictureOnlyConstraintFlag( ) { return m_onePictureOnlyConstraintFlag; } 277 278 Void setLowerBitRateConstraintFlag( Bool flag ) { m_lowerBitRateConstraintFlag = flag; } 279 Bool getLowerBitRateConstraintFlag( ) { return m_lowerBitRateConstraintFlag; } 280 281 Void setInbldFlag( Bool flag ) { m_inbldFlag = flag; } 282 Bool getInbldFlag( ) { return m_inbldFlag; } 283 #endif 284 #if H_MV_HLS10_PTL_INFER_FIX 285 Bool getV2ConstraintsPresentFlag(); 286 Bool getInbldPresentFlag(); 287 Void copyV2ConstraintFlags( ProfileTierLevel* ptlRef ); 288 Void copyProfile( ProfileTierLevel* ptlRef ); 289 #endif 290 #endif 232 291 }; 233 292 … … 251 310 ProfileTierLevel* getSubLayerPTL(Int i) { return &m_subLayerPTL[i]; } 252 311 #if H_MV 312 #if H_MV_HLS10_PTL_INFER_FIX 313 Void inferGeneralValues ( Bool profilePresentFlag , Int k, TComPTL* refPTL );; 314 Void inferSubLayerValues( Int maxNumSubLayersMinus1, Int k, TComPTL* refPTL );; 315 #else 253 316 Void copyLevelFrom( TComPTL* source ); 317 #endif 254 318 #endif 255 319 }; … … 359 423 Void setCpbCntMinus1 ( Int layer, UInt value ) { m_HRD[layer].cpbCntMinus1 = value; } 360 424 UInt getCpbCntMinus1 ( Int layer ) { return m_HRD[layer].cpbCntMinus1; } 361 425 362 426 Void setBitRateValueMinus1 ( Int layer, Int cpbcnt, Int nalOrVcl, UInt value ) { m_HRD[layer].bitRateValueMinus1[cpbcnt][nalOrVcl] = value; } 363 427 UInt getBitRateValueMinus1 ( Int layer, Int cpbcnt, Int nalOrVcl ) { return m_HRD[layer].bitRateValueMinus1[cpbcnt][nalOrVcl]; } … … 434 498 Int getMatrixCoeffsVps( ) { return m_matrixCoeffsVps; } 435 499 }; 500 436 501 class TComVpsVuiBspHrdParameters 437 502 { 503 #if H_MV_HLS10_VPS_VUI_BSP 504 505 /* Not yet tested */ 506 private: 507 508 Int m_vpsNumAddHrdParams; 509 Bool* m_cprmsAddPresentFlag; 510 TComHRD* m_hrdParameters; 511 Int* m_numSubLayerHrdMinus1; 512 Int* m_numSignalledPartitioningSchemes; 513 Int** m_numPartitionsInSchemeMinus1; 514 515 Bool**** m_layerIncludedInPartitionFlag; 516 Int*** m_numBspSchedulesMinus1; 517 Int***** m_bspHrdIdx; 518 Int***** m_bspSchedIdx; 519 520 // Array sizes 521 Int m_offsetHrdParamIdx; 522 Int m_numHrdParam; 523 Int m_numOls; 524 TComVPS* m_vps; 525 public: 526 527 ~TComVpsVuiBspHrdParameters(); 528 529 Void createAfterVpsNumAddHrdParams( TComVPS* vps ); 530 Void createAfterNumSignalledPartitioningSchemes(Int h ); 531 Void createAfterNumPartitionsInSchemeMinus1(Int h, Int j); 532 Void createAfterNumBspSchedulesMinus1( Int h, Int i, Int t); 533 534 Void setVpsNumAddHrdParams( Int val ) { m_vpsNumAddHrdParams = val; } 535 Int getVpsNumAddHrdParams( ) { return m_vpsNumAddHrdParams; } 536 537 Void setCprmsAddPresentFlag( Int i, Bool flag ) { m_cprmsAddPresentFlag[i - m_offsetHrdParamIdx] = flag; } 538 Bool getCprmsAddPresentFlag( Int i ) { return m_cprmsAddPresentFlag[i - m_offsetHrdParamIdx]; } 539 540 Void setNumSubLayerHrdMinus1( Int i, Int val ) { m_numSubLayerHrdMinus1[i - m_offsetHrdParamIdx] = val; } 541 Int getNumSubLayerHrdMinus1( Int i ) { return m_numSubLayerHrdMinus1[i - m_offsetHrdParamIdx]; } 542 543 Void setNumSignalledPartitioningSchemes( Int h, Int val ) { m_numSignalledPartitioningSchemes[h] = val; } 544 Int getNumSignalledPartitioningSchemes( Int h ) { return m_numSignalledPartitioningSchemes[h]; } 545 546 Void setNumPartitionsInSchemeMinus1( Int h, Int j, Int val ) { m_numPartitionsInSchemeMinus1[h][j] = val; } 547 Int getNumPartitionsInSchemeMinus1( Int h, Int j ) { return m_numPartitionsInSchemeMinus1[h][j]; } 548 549 Void setLayerIncludedInPartitionFlag( Int h, Int j, Int k, Int r, Bool flag ) { m_layerIncludedInPartitionFlag[h][j][k][r] = flag; } 550 Bool getLayerIncludedInPartitionFlag( Int h, Int j, Int k, Int r ) { return m_layerIncludedInPartitionFlag[h][j][k][r]; } 551 552 Void setNumBspSchedulesMinus1( Int h, Int i, Int t, Int val ) { m_numBspSchedulesMinus1[h][i][t] = val; } 553 Int getNumBspSchedulesMinus1( Int h, Int i, Int t ) { return m_numBspSchedulesMinus1[h][i][t]; } 554 555 Void setBspHrdIdx( Int h, Int i, Int t, Int j, Int k, Int val ) { m_bspHrdIdx[h][i - m_offsetHrdParamIdx][t][j][k] = val; } 556 Int getBspHrdIdx( Int h, Int i, Int t, Int j, Int k ) { return m_bspHrdIdx[h][i - m_offsetHrdParamIdx][t][j][k]; } 557 558 Int getBspHrdIdxLen( TComVPS* vps ); 559 560 Void setBspSchedIdx( Int h, Int i, Int t, Int j, Int k, Int val ) { m_bspSchedIdx[h][i - m_offsetHrdParamIdx][t][j][k] = val; } 561 Int getBspSchedIdx( Int h, Int i, Int t, Int j, Int k ) { return m_bspSchedIdx[h][i - m_offsetHrdParamIdx][t][j][k]; } 562 563 Void setHrdParametermeters( Int k, TComHRD* val ) { *(m_hrdParameters + k ) = *val; }; 564 TComHRD* getHrdParametermeters( Int k ) { return m_hrdParameters + k; }; 565 #else 438 566 private: 439 567 Int m_vpsNumBspHrdParametersMinus1; … … 475 603 Void setHrdParametermeters( Int k, TComHRD* val ) { m_hrdParameters[k] = val; }; 476 604 TComHRD* getHrdParametermeters( Int k ) { return m_hrdParameters[k]; }; 605 #endif 477 606 }; 478 607 … … 501 630 Bool m_wppNotInUseFlag; 502 631 Bool m_wppInUseFlag [MAX_NUM_LAYERS]; 632 #if H_MV_HLS10_VPS_VUI 633 Bool m_singleLayerForNonIrapFlag; 634 Bool m_higherLayerIrapSkipFlag; 635 #endif 503 636 Bool m_ilpRestrictedRefLayersFlag; 504 637 Int m_minSpatialSegmentOffsetPlus1[MAX_NUM_LAYERS][MAX_NUM_LAYERS]; … … 574 707 Void setWppInUseFlag( Int i, Bool flag ) { m_wppInUseFlag[i] = flag; } 575 708 Bool getWppInUseFlag( Int i ) { return m_wppInUseFlag[i]; } 709 710 #if H_MV_HLS10_VPS_VUI 711 Void setSingleLayerForNonIrapFlag( Bool flag ) { m_singleLayerForNonIrapFlag = flag; } 712 Bool getSingleLayerForNonIrapFlag( ) { return m_singleLayerForNonIrapFlag; } 713 714 Void setHigherLayerIrapSkipFlag( Bool flag ) { m_higherLayerIrapSkipFlag = flag; } 715 Bool getHigherLayerIrapSkipFlag( ) { return m_higherLayerIrapSkipFlag; } 716 #endif 576 717 577 718 Void setIlpRestrictedRefLayersFlag( Bool flag ) { m_ilpRestrictedRefLayersFlag = flag; } … … 609 750 Int m_bitDepthVpsLumaMinus8; 610 751 Int m_bitDepthVpsChromaMinus8; 752 #if H_MV_HLS10_GEN_VSP_CONF_WIN 753 Bool m_conformanceWindowVpsFlag; 754 Int m_confWinVpsLeftOffset; 755 Int m_confWinVpsRightOffset; 756 Int m_confWinVpsTopOffset; 757 Int m_confWinVpsBottomOffset; 758 #endif 611 759 612 760 public: 761 762 #if H_MV_HLS10_GEN_VSP_CONF_WIN 763 TComRepFormat() 764 { 765 m_conformanceWindowVpsFlag = 0; 766 m_confWinVpsLeftOffset = 0; 767 m_confWinVpsRightOffset = 0; 768 m_confWinVpsTopOffset = 0; 769 m_confWinVpsBottomOffset = 0; 770 }; 771 #else 613 772 TComRepFormat() { }; 773 #endif 614 774 615 775 Void setChromaAndBitDepthVpsPresentFlag( Bool flag ) { m_chromaAndBitDepthVpsPresentFlag = flag; } … … 635 795 Void setBitDepthVpsChromaMinus8( Int val ) { m_bitDepthVpsChromaMinus8 = val; } 636 796 Int getBitDepthVpsChromaMinus8( ) { return m_bitDepthVpsChromaMinus8; } 797 798 #if H_MV_HLS10_GEN_VSP_CONF_WIN 799 Void setConformanceWindowVpsFlag( Bool flag ) { m_conformanceWindowVpsFlag = flag; } 800 Bool getConformanceWindowVpsFlag( ) { return m_conformanceWindowVpsFlag; } 801 802 Void setConfWinVpsLeftOffset( Int val ) { m_confWinVpsLeftOffset = val; } 803 Int getConfWinVpsLeftOffset( ) { return m_confWinVpsLeftOffset; } 804 805 Void setConfWinVpsRightOffset( Int val ) { m_confWinVpsRightOffset = val; } 806 Int getConfWinVpsRightOffset( ) { return m_confWinVpsRightOffset; } 807 808 Void setConfWinVpsTopOffset( Int val ) { m_confWinVpsTopOffset = val; } 809 Int getConfWinVpsTopOffset( ) { return m_confWinVpsTopOffset; } 810 811 Void setConfWinVpsBottomOffset( Int val ) { m_confWinVpsBottomOffset = val; } 812 Int getConfWinVpsBottomOffset( ) { return m_confWinVpsBottomOffset; } 813 #endif 637 814 }; 638 815 … … 657 834 658 835 Void setMaxVpsDecPicBufferingMinus1( Int i, Int k, Int j, Int val ) { m_maxVpsDecPicBufferingMinus1[i][k][j] = val; } 836 #if H_MV_HLS10_ADD_LAYERSETS 837 Int getMaxVpsDecPicBufferingMinus1( Int i, Int k, Int j ) { assert( m_maxVpsDecPicBufferingMinus1[i][k][j] >= 0 ); return m_maxVpsDecPicBufferingMinus1[i][k][j]; } 838 #else 659 839 Int getMaxVpsDecPicBufferingMinus1( Int i, Int k, Int j ) { return m_maxVpsDecPicBufferingMinus1[i][k][j]; } 840 #endif 660 841 661 842 Void setMaxVpsNumReorderPics( Int i, Int j, Int val ) { m_maxVpsNumReorderPics[i][j] = val; } … … 672 853 #if H_MV 673 854 Bool m_vpsBaseLayerInternalFlag; 855 #if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL 856 Bool m_vpsBaseLayerAvailableFlag; 857 #endif // H_MV_HLS10_GEN 674 858 #endif 675 859 … … 741 925 Int m_layerSetIdxForOlsMinus1 [MAX_VPS_OUTPUTLAYER_SETS]; 742 926 Bool m_outputLayerFlag [MAX_VPS_OUTPUTLAYER_SETS][MAX_VPS_NUH_LAYER_ID_PLUS1]; 927 #if H_MV_HLS10_PTL 928 Int m_profileTierLevelIdx [MAX_VPS_OUTPUTLAYER_SETS ][MAX_NUM_LAYERS]; 929 #else 743 930 Int m_profileLevelTierIdx [MAX_VPS_OUTPUTLAYER_SETS ]; 931 #endif 744 932 Bool m_altOutputLayerFlag [MAX_VPS_OUTPUTLAYER_SETS]; 745 933 Bool m_repFormatIdxPresentFlag; … … 770 958 // VPS EXTENSION SEMANTICS VARIABLES 771 959 Int m_layerIdInVps [MAX_NUM_LAYERS ]; 960 #if H_MV_HLS10_REF_PRED_LAYERS 961 Int m_dependencyFlag [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 962 #endif 772 963 773 964 Int m_numDirectRefLayers [MAX_NUM_LAYERS]; 965 #if H_MV_HLS10_REF_PRED_LAYERS 966 Int m_idDirectRefLayer [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 967 #else 774 968 Int m_refLayerId [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 969 #endif 775 970 776 971 Int m_numRefLayers [MAX_NUM_LAYER_IDS]; 777 Int m_numPredictedLayers [MAX_NUM_LAYERS]; 972 #if H_MV_HLS10_REF_PRED_LAYERS 973 Int m_idRefLayer [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 974 #endif 975 976 977 Int m_numPredictedLayers [MAX_NUM_LAYERS ]; 978 #if !H_MV_HLS10_REF_PRED_LAYERS 778 979 Int m_predictedLayerId [MAX_NUM_LAYERS][MAX_NUM_LAYER_IDS]; 980 #else 981 Int m_idPredictedLayer [MAX_NUM_LAYERS][MAX_NUM_LAYER_IDS]; 982 #endif 779 983 Int m_numIndependentLayers; 780 984 Int m_numLayersInTreePartition [MAX_NUM_LAYER_IDS]; 781 985 Int m_treePartitionLayerIdList [MAX_NUM_LAYERS][MAX_NUM_LAYER_IDS]; 986 #if H_MV_HLS10_REF_PRED_LAYERS 782 987 Bool m_recursiveRefLayerFlag [MAX_NUM_LAYER_IDS][MAX_NUM_LAYER_IDS]; 783 988 #endif 784 989 Int m_viewIndex [MAX_NUM_LAYERS ]; 785 990 … … 788 993 std::vector< std::vector< Int> > m_layerSetLayerIdList; 789 994 995 #if H_MV_HLS10_NESSECARY_LAYER 996 Int m_numNecessaryLayers [MAX_VPS_OUTPUTLAYER_SETS]; 997 Bool m_necessaryLayerFlag [MAX_VPS_OUTPUTLAYER_SETS][MAX_NUM_LAYERS]; 998 #endif 790 999 791 1000 Int xGetDimBitOffset( Int j ); 1001 #if H_MV_HLS10_REF_PRED_LAYERS 792 1002 Void xSetRefLayerFlags( Int currLayerId ); 1003 #endif 793 1004 // VPS EXTENSION 2 SYNTAX ELEMENTS 794 1005 #if H_3D_ARP … … 870 1081 Void setVpsBaseLayerInternalFlag( Bool flag ) { m_vpsBaseLayerInternalFlag = flag; } 871 1082 Bool getVpsBaseLayerInternalFlag( ) { return m_vpsBaseLayerInternalFlag; } 1083 #if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL 1084 Void setVpsBaseLayerAvailableFlag( Bool flag ) { m_vpsBaseLayerAvailableFlag = flag; } 1085 Bool getVpsBaseLayerAvailableFlag( ) { return m_vpsBaseLayerAvailableFlag; } 1086 #endif 872 1087 #endif 873 1088 … … 877 1092 #if H_MV 878 1093 UInt getMaxSubLayersMinus1() { return m_uiMaxTLayers - 1; } // For consistency with draft spec 1094 #if H_MV_HLS10_GEN_FIX 1095 Void setMaxSubLayersMinus1(UInt val) { m_uiMaxTLayers = (val + 1); }; 1096 #endif 879 1097 UInt getMaxLayersMinus1() { return m_uiMaxLayersMinus1; }; 880 1098 Void setMaxLayersMinus1(UInt l) { m_uiMaxLayersMinus1 = l; } … … 916 1134 917 1135 #if H_MV 1136 #if H_MV_HLS10_PTL 1137 TComPTL* getPTL( Int idx = 0 ) { return &m_pcPTL[idx]; } 1138 #else 918 1139 TComPTL* getPTL( Int layerSet = 0 ) { return &m_pcPTL[layerSet]; } 1140 #endif 919 1141 #else 920 1142 TComPTL* getPTL() { return &m_pcPTL; } … … 996 1218 Void setLayerSetIdxForOlsMinus1( Int outLayerSetIdx, Int val ) { m_layerSetIdxForOlsMinus1[ outLayerSetIdx ] = val; } 997 1219 Int getLayerSetIdxForOlsMinus1( Int outLayerSetIdx ) { return m_layerSetIdxForOlsMinus1[ outLayerSetIdx ]; } 1220 #if VPS_MISC_UPDATES 1221 Int getLayerSetIdxForOlsMinus1Len( Int outLayerSetIdx ) { return gCeilLog2( getNumLayerSets() ); } 1222 #endif 998 1223 999 1224 Void setOutputLayerFlag( Int outLayerSetIdx, Int i, Bool flag ) { m_outputLayerFlag[ outLayerSetIdx ][ i ] = flag; } … … 1002 1227 Bool inferOutputLayerFlag( Int i, Int j ); 1003 1228 1229 #if H_MV_HLS10_PTL 1230 Void setProfileTierLevelIdx( Int i, Int j, Int val ) { m_profileTierLevelIdx[ i ][ j ] = val; } 1231 Int getProfileTierLevelIdx( Int i, Int j ) { return m_profileTierLevelIdx[ i ][ j ]; } 1232 #if H_MV_HLS10_PTL_FIX 1233 Int inferProfileTierLevelIdx( Int i, Int j ); 1234 #endif 1235 #else 1004 1236 Void setProfileLevelTierIdx( Int outLayerSetIdx, Int val ) { m_profileLevelTierIdx[ outLayerSetIdx ] = val; } 1005 1237 Int getProfileLevelTierIdx( Int outLayerSetIdx ) { return m_profileLevelTierIdx[ outLayerSetIdx ]; } 1238 #endif 1006 1239 1007 1240 Void setAltOutputLayerFlag( Int i, Bool flag ) { m_altOutputLayerFlag[i] = flag; } … … 1033 1266 TComDpbSize* getDpbSize( ) { return m_dpbSize;} 1034 1267 1268 #if !H_MV_HLS10_ADD_LAYERSETS 1035 1269 Void inferDbpSizeLayerSetZero( TComSPS* sps, Bool encoder ); 1036 1270 #endif 1271 1037 1272 Void setPocLsbNotPresentFlag( Int i, Bool flag ) { m_pocLsbNotPresentFlag[i] = flag; } 1038 1273 Bool getPocLsbNotPresentFlag( Int i ) { return m_pocLsbNotPresentFlag[i]; } … … 1064 1299 1065 1300 Int getViewIndex ( Int layerIdInNuh ) { return getScalabilityId( getLayerIdInVps(layerIdInNuh), VIEW_ORDER_INDEX ); } 1301 #if H_MV_HLS10_AUX 1302 Int getAuxId ( Int layerIdInNuh ) { return getScalabilityId( getLayerIdInVps(layerIdInNuh), AUX_ID ); } 1303 Int getDependencyId ( Int layerIdInNuh ) { return getScalabilityId( getLayerIdInVps(layerIdInNuh), DEPENDENCY_ID ); } 1304 #endif 1066 1305 Int getNumViews(); 1067 1306 1307 #if H_MV_HLS10_REF_PRED_LAYERS 1308 Bool getDependencyFlag( Int i, Int j ) { return m_dependencyFlag[i][j]; } 1309 #endif 1068 1310 Int getNumDirectRefLayers( Int layerIdInNuh ) { return m_numDirectRefLayers[ layerIdInNuh ]; }; 1311 #if !H_MV_HLS10_REF_PRED_LAYERS 1069 1312 Int getRefLayerId ( Int layerIdInNuh, Int idx );; 1070 1313 #endif 1071 1314 Int getNumRefLayers ( Int i ) { return m_numRefLayers[i]; } 1072 1315 Int getNumPredictedLayers ( Int i ) { return m_numPredictedLayers[i]; } 1316 1317 #if !H_MV_HLS10_REF_PRED_LAYERS 1073 1318 Int getPredictedLayerId ( Int i, Int j ) { return m_predictedLayerId[i][j]; } 1319 #else 1320 Int getIdRefLayer ( Int i, Int j ) { assert( j >= 0 && j < getNumRefLayers ( i )); return m_idRefLayer [i][j]; } 1321 Int getIdPredictedLayer ( Int i, Int j ) { assert( j >= 0 && j < getNumPredictedLayers( i )); return m_idPredictedLayer[i][j]; } 1322 Int getIdDirectRefLayer ( Int i, Int j ) { assert( j >= 0 && j < getNumDirectRefLayers( i )); return m_idDirectRefLayer[i][j]; } 1323 #endif 1074 1324 Int getNumIndependentLayers ( ) { return m_numIndependentLayers; } 1075 1325 Int getNumLayersInTreePartition( Int i ) { return m_numLayersInTreePartition[i]; } … … 1078 1328 Int getNumLayerSets( ) { return getVpsNumLayerSetsMinus1() + 1 + getNumAddLayerSets(); }; 1079 1329 1330 #if H_MV_HLS10_ADD_LAYERSETS 1331 Int getFirstAddLayerSetIdx() { return getVpsNumLayerSetsMinus1() + 1; } 1332 Int getLastAddLayerSetIdx() { return getFirstAddLayerSetIdx() + getNumAddLayerSets() - 1; } 1333 #endif 1080 1334 Bool checkVPSExtensionSyntax(); 1081 1335 Int scalTypeToScalIdx ( ScalabilityType scalType ); 1082 1336 1337 #if H_MV_HLS10_PTL 1338 Int getProfileTierLevelIdxLen() { return gCeilLog2( getVpsNumProfileTierLevelMinus1() + 1 ); }; 1339 #else 1083 1340 Int getProfileLevelTierIdxLen() { return gCeilLog2( getVpsNumProfileTierLevelMinus1() + 1 ); }; 1341 #endif 1084 1342 Int getVpsRepFormatIdxLen() { return gCeilLog2( getVpsNumRepFormatsMinus1() + 1 ); }; 1085 1343 … … 1092 1350 Void deriveLayerSetLayerIdList(); 1093 1351 1352 #if H_MV_HLS10_ADD_LAYERSETS 1353 Int olsIdxToLsIdx( Int i ) { return ( i < getNumLayerSets() ) ? i : getLayerSetIdxForOlsMinus1( i ) + 1 ; }; 1354 #else 1094 1355 Int olsIdxToLsIdx( Int i ) { return ( i <= getVpsNumLayerSetsMinus1() ) ? i : getLayerSetIdxForOlsMinus1( i ) + 1 ; }; 1095 1356 #endif 1096 1357 Void initTargetLayerIdLists ( ); 1097 1358 Void deriveTargetLayerIdList ( Int i ); 1098 1099 1359 std::vector<Int> getTargetDecLayerIdList( Int targetDecLayerSetIdx ) { return m_targetDecLayerIdLists[targetDecLayerSetIdx]; }; 1100 1360 std::vector<Int> getTargetOptLayerIdList( Int targetOptLayerSetIdx ) { return m_targetOptLayerIdLists[targetOptLayerSetIdx]; }; … … 1103 1363 Int getOlsHighestOutputLayerId( Int i ) { return getTargetOptLayerIdList( i ).back(); }; 1104 1364 1365 #if H_MV_HLS10_ADD_LAYERSETS 1366 Void deriveAddLayerSetLayerIdList( Int i ); 1367 #endif 1368 #if H_MV_HLS10_NESSECARY_LAYER 1369 Void deriveNecessaryLayerFlags( Int olsIdx );; 1370 Int getNecessaryLayerFlag( Int i, Int j ) { AOF( i >= 0 && i < getNumOutputLayerSets() ); AOF( j >= 0 && j < getNumLayersInIdList( olsIdxToLsIdx( i ) ) ); return m_necessaryLayerFlag[i][j]; }; 1371 #endif 1372 1105 1373 Int getMaxSubLayersInLayerSetMinus1( Int i ); 1106 1374 Int getHighestLayerIdxPlus1Len( Int j ) { return gCeilLog2( getNumLayersInTreePartition( j ) + 1 ); }; 1107 1108 Bool getAltOutputLayerFlagVar( Int i );; 1375 Bool getAltOutputLayerFlagVar( Int i );; 1109 1376 1110 1377 // inference … … 1113 1380 1114 1381 // helpers 1382 #if !H_MV_HLS10_REF_PRED_LAYERS 1115 1383 Bool getInDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps, Int depth = 0 ); 1384 #endif 1385 #if !H_MV_HLS10_MAXNUMPICS 1116 1386 Int getMaxNumPics( Int layerId ); 1387 #endif 1388 #if H_MV_HLS10_ADD_LAYERSETS 1389 Void printPTL(); 1390 Void printLayerDependencies(); 1391 #if H_MV_HLS10_AUX 1392 Void printScalabilityId();; 1393 #endif 1394 Void printLayerSets();; 1395 1396 1397 1398 template <typename T, typename S, typename U> Void xPrintArray( const Char* name, Int numElemDim1, U idx, S numElemDim2, T vec, Bool printNumber, Bool printIdx = true ) 1399 { 1400 std::cout << std::endl; 1401 for (Int j = 0; j < numElemDim1; j++ ) 1402 { 1403 std::cout << std::right << std::setw(27) << name; 1404 if (printIdx) 1405 { 1406 std::cout << "[" << std::right << std::setw(3) << idx[ j ] << "]" ; 1407 } 1408 else 1409 { 1410 std::cout << std::right << std::setw(5) << " "; 1411 } 1412 1413 if ( printNumber ) 1414 { 1415 std::cout << " (" << std::right << std::setw(3) << numElemDim2[j] << ")"; 1416 } 1417 else 1418 { 1419 std::cout << std::right << std::setw(6) << " "; 1420 } 1421 1422 std::cout << ":"; 1423 for (Int i = 0; i < numElemDim2[j]; i++) 1424 { 1425 std::cout << std::right << std::setw(3) << vec[j][i]; 1426 } 1427 std::cout << std::endl; 1428 } 1429 } 1430 1431 template <typename T> Void xPrintArray( const char* name, Int numElem, T vec, Bool printNumber ) 1432 { 1433 std::vector<Int> numElemDim2(1, numElem); 1434 std::vector<T> vec2 (1, vec ); 1435 std::vector<Int> idx2 (0); 1436 xPrintArray( name, 1, idx2, numElemDim2, vec2, printNumber, false ); 1437 } 1438 #endif 1439 1117 1440 1118 1441 /// VPS EXTENSION 2 SYNTAX ELEMENTS … … 1557 1880 TComVPS* m_pcVPS; 1558 1881 // SPS 1882 #if H_MV_HLS10_MULTILAYERSPS 1883 Int m_spsMaxSubLayersMinus1; 1884 Int m_spsExtOrMaxSubLayersMinus1; 1885 #endif 1559 1886 Bool m_spsExtensionPresentFlag; 1560 1887 … … 1574 1901 // SPS Extension 1575 1902 Bool m_interViewMvVertConstraintFlag; 1903 #if !H_MV_HLS10_PPS 1576 1904 Int m_numScaledRefLayerOffsets; 1577 1905 Int m_scaledRefLayerId [MAX_NUM_SCALED_REF_LAYERS]; … … 1580 1908 Int m_scaledRefLayerRightOffset [MAX_NUM_LAYERS]; 1581 1909 Int m_scaledRefLayerBottomOffset[MAX_NUM_LAYERS]; 1910 #endif 1582 1911 #endif 1583 1912 #if H_3D … … 1683 2012 #if H_MV 1684 2013 UInt getSpsMaxSubLayersMinus1() { return ( m_uiMaxTLayers - 1); } 2014 #if H_MV_HLS10_MULTILAYERSPS 2015 Void setSpsMaxSubLayersMinus1( UInt val ) { setMaxTLayers( val + 1 ); } 2016 #endif 1685 2017 #endif 1686 2018 … … 1715 2047 TComPTL* getPTL() { return &m_pcPTL; } 1716 2048 #if H_MV 2049 #if H_MV_HLS10_MULTILAYERSPS 2050 Void setSpsExtOrMaxSubLayersMinus1( Int val ) { m_spsExtOrMaxSubLayersMinus1 = val; } 2051 Int getSpsExtOrMaxSubLayersMinus1( ) { return m_spsExtOrMaxSubLayersMinus1; } 2052 Void inferSpsMaxSubLayersMinus1( Bool atPsActivation, TComVPS* vps ); 2053 2054 Bool getMultiLayerExtSpsFlag() { return ( getLayerId() != 0 && getSpsExtOrMaxSubLayersMinus1() == 7 ); } 2055 #endif 1717 2056 Void inferSpsMaxDecPicBufferingMinus1( TComVPS* vps, Int targetOptLayerSetIdx, Int currLayerId, Bool encoder ); 1718 2057 … … 1753 2092 Bool getInterViewMvVertConstraintFlag() { return m_interViewMvVertConstraintFlag;} 1754 2093 2094 #if !H_MV_HLS10_PPS 1755 2095 Void setNumScaledRefLayerOffsets( Int val ) { m_numScaledRefLayerOffsets = val; } 1756 2096 Int getNumScaledRefLayerOffsets( ) { return m_numScaledRefLayerOffsets; } … … 1770 2110 Void setScaledRefLayerBottomOffset( Int j, Int val ) { m_scaledRefLayerBottomOffset[j] = val; } 1771 2111 Int getScaledRefLayerBottomOffset( Int j ) { return m_scaledRefLayerBottomOffset[j]; } 2112 #endif 1772 2113 // Inference 2114 1773 2115 Void inferRepFormat( TComVPS* vps, Int layerIdCurr ); 1774 2116 Void inferScalingList( TComSPS* spsSrc ); … … 2195 2537 2196 2538 Bool m_enableTMVPFlag; 2539 #if I0044_SLICE_TMVP 2540 Bool m_availableForTMVPRefFlag; 2541 #endif 2542 2197 2543 #if H_MV 2198 2544 std::vector<TComPic*>* m_refPicSetInterLayer0; … … 2255 2601 #if MTK_SINGLE_DEPTH_MODE_I0095 2256 2602 Bool m_bApplySingleDepthMode; 2603 #endif 2604 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 2605 Int *m_aICEnableCandidate; 2606 Int *m_aICEnableNum; 2257 2607 #endif 2258 2608 public: … … 2527 2877 Void setEnableTMVPFlag ( Bool b ) { m_enableTMVPFlag = b; } 2528 2878 Bool getEnableTMVPFlag () { return m_enableTMVPFlag;} 2879 #if I0044_SLICE_TMVP 2880 Void setAvailableForTMVPRefFlag ( Bool b ) { m_availableForTMVPRefFlag = b; } 2881 Bool getAvailableForTMVPRefFlag () { return m_availableForTMVPRefFlag;} 2882 #endif 2529 2883 2530 2884 #if H_MV … … 2567 2921 #endif 2568 2922 #endif 2923 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 2924 Void setICEnableCandidate( Int* ICEnableCandidate) { m_aICEnableCandidate = ICEnableCandidate; }; 2925 Void setICEnableNum( Int* ICEnableNum) { m_aICEnableNum = ICEnableNum; }; 2926 Void setICEnableCandidate( UInt layer, Int value) { m_aICEnableCandidate[ layer ] = value; }; 2927 Void setICEnableNum( UInt layer, Int value) { m_aICEnableNum[ layer ] = value; }; 2928 2929 Int getICEnableCandidate( Int layer){ return m_aICEnableCandidate[ layer ]; }; 2930 Int getICEnableNum( Int layer){ return m_aICEnableNum[ layer ]; }; 2931 #endif 2569 2932 #if H_MV 2570 2933 // Additional slice header syntax elements -
trunk/source/Lib/TLibCommon/TypeDef.h
r1039 r1066 123 123 // SEC_IC_ARP_SIG_G0072, Disabling IC when ARP is enabled, option 1 in JCT3V-G0072, part 2 in JCT3V-G0121 124 124 // MTK_LOW_LATENCY_IC_ENCODING_H0086 Low-latency IC encoding in JCT3V-H0086 125 126 #define MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 1 // Remove the global variables used in JCT3V-H0086 127 125 128 126 129 #define SEC_IC_NEIGHBOR_CLIP_I0080 1 // Clipping of neighboring sample position, JCT3V-I0080 … … 225 228 #endif 226 229 230 #define H_3D_FIX_UNINIT 1 // Fix uninitialized flag 227 231 #define H_3D_INTER_SDC 1 // INTER SDC, Inter simplified depth coding 228 232 // LGE_INTER_SDC_E0156 Enable inter SDC for depth coding … … 251 255 252 256 #define H_3D_FCO 0 // Flexible coding order for 3D 257 #if H_3D_FCO 258 #define LGE_FCO_I0116 1 259 #endif 253 260 254 261 #define SCU_HS_FAST_INTRA_SDC_I0123 1 … … 275 282 #define SEC_HLS_CLEANUP_I0100 1 276 283 284 #define H_3D_FIX_64BIT_SHIFT 1 277 285 #endif // H_3D 278 286 … … 300 308 #define H_3D_VSO_RM_ASSERTIONS 0 // Output VSO assertions 301 309 #define H_3D_VSO_SYNTH_DIST_OUT 0 // Output of synthesized view distortion instead of depth distortion in encoder output 302 #define H_3D_VSO_FIX 0// This fix should be enabled after verification310 #define H_3D_VSO_FIX 1 // This fix should be enabled after verification 303 311 #endif 304 312 … … 381 389 ///////////////////////////////////////////////////////////////////////////////// 382 390 // TBD: Check if integration is necessary. 391 392 393 394 //Added by Qualcomm for HLS 395 #define DISCARDABLE_PIC_RPS 1 ///< JCT3V-G0131: Inter-layer RPS and temporal RPS should not contain picture with discardable_flag equal to 1 396 #define VPS_MISC_UPDATES 1 ///< Misc updates:JCT3V-0240, 397 #define NON_REF_NAL_TYPE_DISCARDABLE 1 ///< JCT3V-G0031: If discardable picture is a non-IRAP, it must be a non-referenced sub-layer picture 398 #define INFERENCE_POC_MSB_VAL_PRESENT 1 ///< JCT3V-H0042: poc_msb_val_present_flag shall be equal to 0 when slice_header_extension_length is (inferred to be ) equal to 0 399 #define INFERENCE_POC_RESET_INFO_PRESENT 1 ///< JCT3V-H0042: Infer the value of poc_reset_info_present_flag to be equal to 0 when no pps extension / pps extension for multilayer. 400 #define I0044_SLICE_TMVP 1 ///< JCT3V-I0044: Regarding slice_temporal_mvp_enabled_flag 401 #define I0045_BR_PR_ADD_LAYER_SET 1 ///< JCT3V-I0045: Signalling of bit-rate and picture rate for additional layer set 402 #define I0045_VPS_VUI_VST_PARAMS 1 ///< JCT3V-I0045: Related to signalling of VST parameters of the base layer. 403 404 405 #define H_MV_HLS10_GEN 0 // General changes (not tested) 406 407 #define H_MV_HLS10_AUX 1 // Auxiliary pictures 408 #define H_MV_HLS10_GEN_FIX 1 409 #define H_MV_FIX_LOOP_GOPSIZE 1 410 #define H_MV_FIX_SUB_LAYERS_MAX_MINUS1 1 411 412 #define H_MV_HLS10_GEN_VSP_CONF_WIN 1 // VPS conformance window 413 #define H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL 1 // vps_base_layer_available 414 #define H_MV_HLS10_REF_PRED_LAYERS 1 // reference and predicted layer derivation 415 #define H_MV_HLS10_NESSECARY_LAYER 1 // necessary layers 416 #define H_MV_HLS10_ADD_LAYERSETS 1 // additional layer sets 417 #define H_MV_HLS10_DBP_SIZE 1 // dpb size syntax structure 418 #define H_MV_HLS10_MAXNUMPICS 1 // constraint on number of pictures in rps 419 #define H_MV_HLS10_PTL 1 // profile tier level 420 #define H_MV_HLS10_PTL_FIX 1 // profile tier level fix 421 #define H_MV_HLS10_PTL_INBL_FIX 1 // profile tier level fix 422 #define H_MV_HLS10_PTL_INFER_FIX 1 // fix inference ptl 423 #define H_MV_HLS10_MULTILAYERSPS 1 // multilayer SPS extension 424 #define H_MV_HLS10_VPS_VUI 1 // vsp vui 425 #define H_MV_HLS10_VPS_VUI_BSP 1 // vsp vui bsp 426 #define H_MV_HLS10_PPS 1 // PPS modifications 427 428 #define H_MV_HLS10_VPS_VUI_BSP_STORE 0 // Currently bsp vui bsp hrd parameters are not stored, some dynamic memory allocation with upper bounds is required. 429 430 383 431 #define H_MV_HLS7_GEN 0 // General changes (not tested) 432 384 433 385 434 // POC … … 457 506 #define MAX_NESTING_NUM_LAYER 64 458 507 508 #if H_MV_HLS10_VPS_VUI_BSP 509 #define MAX_VPS_NUM_HRD_PARAMETERS 1024 510 #define MAX_NUM_SUB_LAYERS 7 511 #define MAX_NUM_SIGNALLED_PARTITIONING_SCHEMES 16 512 #else 459 513 #define MAX_VPS_NUM_HRD_PARAMETERS 1 514 #endif 515 460 516 #define MAX_VPS_OP_SETS_PLUS1 1024 461 517 #if H_MV 518 #if H_MV_HLS10_ADD_LAYERSETS 519 #define MAX_VPS_NUM_ADD_LAYER_SETS 1024 520 #endif 462 521 #define MAX_VPS_NUH_LAYER_ID_PLUS1 63 463 522 #define MAX_NUM_SCALABILITY_TYPES 16 … … 474 533 #define MAX_VPS_PROFILE_TIER_LEVEL 64 475 534 #define MAX_VPS_ADD_OUTPUT_LAYER_SETS 1024 535 #if H_MV_HLS10_ADD_LAYERSETS 536 #define MAX_VPS_OUTPUTLAYER_SETS ( MAX_VPS_ADD_OUTPUT_LAYER_SETS + MAX_VPS_OP_SETS_PLUS1 + MAX_VPS_OP_SETS_PLUS1 ) 537 #else 476 538 #define MAX_VPS_OUTPUTLAYER_SETS ( MAX_VPS_ADD_OUTPUT_LAYER_SETS + MAX_VPS_OP_SETS_PLUS1 ) 539 #endif 477 540 #define MAX_NUM_VIDEO_SIGNAL_INFO 16 478 541 #define MAX_NUM_SCALED_REF_LAYERS MAX_NUM_LAYERS-1 542 #if !H_MV_HLS10_VPS_VUI_BSP 479 543 #define MAX_NUM_BSP_HRD_PARAMETERS 100 ///< Maximum value is actually not specified 480 544 #define MAX_NUM_BITSTREAM_PARTITIONS 100 ///< Maximum value is actually not specified 481 545 #define MAX_NUM_BSP_SCHED_COMBINATION 100 ///< Maximum value is actually not specified 482 546 #define MAX_SUB_STREAMS 1024 547 #endif 483 548 #else 484 549 #define MAX_NUM_LAYER_IDS 64 … … 951 1016 MAINSTILLPICTURE = 3, 952 1017 #if H_MV 1018 #if H_MV_HLS10_PTL 1019 MULTIVIEWMAIN = 6, 1020 #if H_3D 1021 MAIN3D = 8, 1022 #endif 1023 #else 953 1024 MAINSTEREO = 4, 954 1025 MAINMULTIVIEW = 5, 955 1026 #if H_3D 956 1027 MAIN3D = 6, 1028 #endif 957 1029 #endif 958 1030 #endif … … 997 1069 #endif 998 1070 VIEW_ORDER_INDEX = 1, 1071 #if H_MV_HLS10_AUX 1072 DEPENDENCY_ID = 2, 1073 AUX_ID = 3, 1074 #endif 999 1075 }; 1000 1076 #endif -
trunk/source/Lib/TLibDecoder/TDecCAVLC.cpp
r1039 r1066 53 53 } 54 54 // To avoid mismatches 55 #if H_MV_HLS10_GEN_FIX 56 fprintf( g_hTrace, "=========== Sequence Parameter Set LayerId: %d ===========\n", pSPS->getLayerId() ); 57 #else 55 58 fprintf( g_hTrace, "=========== Sequence Parameter Set ===========\n" ); 59 #endif 56 60 #else 57 61 fprintf( g_hTrace, "=========== Sequence Parameter Set ID: %d ===========\n", pSPS->getSPSId() ); … … 66 70 return; 67 71 } 72 #if H_MV_HLS10_GEN_FIX 73 fprintf( g_hTrace, "=========== Picture Parameter Set LayerId: %d ===========\n", pPPS->getLayerId() ); 74 #else 68 75 fprintf( g_hTrace, "=========== Picture Parameter Set ===========\n" ); 76 #endif 69 77 #else 70 78 fprintf( g_hTrace, "=========== Picture Parameter Set ID: %d ===========\n", pPPS->getPPSId() ); … … 334 342 } 335 343 } 344 #if !H_MV_HLS10_PPS 336 345 #if H_MV 337 346 if ( pcPPS->getLayerId() > 0 ) … … 347 356 { 348 357 #endif 358 #endif 349 359 READ_FLAG( uiCode, "pps_scaling_list_data_present_flag" ); pcPPS->setScalingListPresentFlag( uiCode ? true : false ); 350 360 if(pcPPS->getScalingListPresentFlag ()) … … 352 362 parseScalingList( pcPPS->getScalingList() ); 353 363 } 354 #if H_MV 355 } 356 #endif 357 364 #if !H_MV_HLS10_PPS 365 #if H_MV 366 } 367 #endif 368 #endif 358 369 READ_FLAG( uiCode, "lists_modification_present_flag"); 359 370 pcPPS->setListsModificationPresentFlag(uiCode); … … 389 400 if ( pcPPS->getPpsMultilayerExtensionFlag() ) 390 401 { 402 #if H_MV_HLS10_PPS 403 parsePPSMultilayerExtension( pcPPS ); 404 #else 391 405 READ_FLAG( uiCode, "poc_reset_info_present_flag" ); pcPPS->setPocResetInfoPresentFlag( uiCode == 1 ); 392 406 READ_FLAG( uiCode, "pps_extension_reserved_zero_flag" ); 407 #endif 393 408 } 394 409 #if !H_3D … … 415 430 } 416 431 } 432 417 433 418 434 #if H_3D … … 759 775 UInt uiCode; 760 776 READ_CODE( 4, uiCode, "sps_video_parameter_set_id"); pcSPS->setVPSId ( uiCode ); 777 761 778 #if H_MV 762 779 if ( pcSPS->getLayerId() == 0 ) … … 765 782 READ_CODE( 3, uiCode, "sps_max_sub_layers_minus1" ); pcSPS->setMaxTLayers ( uiCode+1 ); 766 783 assert(uiCode <= 6); 784 #if H_MV_HLS10_MULTILAYERSPS 785 #if H_MV 786 } 787 else 788 { 789 READ_CODE( 3, uiCode, "sps_ext_or_max_sub_layers_minus1" ); pcSPS->setSpsExtOrMaxSubLayersMinus1( uiCode ); 790 pcSPS->inferSpsMaxSubLayersMinus1( false, NULL ); 791 } 792 if ( !pcSPS->getMultiLayerExtSpsFlag() ) 793 { 794 #endif 795 #endif 767 796 768 797 READ_FLAG( uiCode, "sps_temporal_id_nesting_flag" ); pcSPS->setTemporalIdNestingFlag ( uiCode > 0 ? true : false ); … … 774 803 775 804 parsePTL(pcSPS->getPTL(), 1, pcSPS->getMaxTLayers() - 1); 805 #if H_MV_HLS10_PTL_INFER_FIX 806 pcSPS->getPTL()->inferGeneralValues ( true, 0, NULL ); 807 pcSPS->getPTL()->inferSubLayerValues( pcSPS->getMaxTLayers() - 1, 0, NULL ); 808 #endif 776 809 #if H_MV 777 810 } … … 780 813 assert(uiCode <= 15); 781 814 #if H_MV 815 #if H_MV_HLS10_MULTILAYERSPS 816 if ( pcSPS->getMultiLayerExtSpsFlag() ) 817 #else 782 818 if ( pcSPS->getLayerId() > 0 ) 819 #endif 783 820 { 784 821 READ_FLAG( uiCode, "update_rep_format_flag" ); pcSPS->setUpdateRepFormatFlag( uiCode == 1 ); … … 802 839 READ_UVLC ( uiCode, "pic_width_in_luma_samples" ); pcSPS->setPicWidthInLumaSamples ( uiCode ); 803 840 READ_UVLC ( uiCode, "pic_height_in_luma_samples" ); pcSPS->setPicHeightInLumaSamples( uiCode ); 804 #if H_MV 805 } 841 #if !H_MV_HLS10_MULTILAYERSPS 842 #if H_MV 843 } 844 #endif 806 845 #endif 807 846 READ_FLAG( uiCode, "conformance_window_flag"); … … 816 855 READ_UVLC( uiCode, "conf_win_top_offset" ); conf.setWindowTopOffset ( uiCode ); 817 856 READ_UVLC( uiCode, "conf_win_bottom_offset" ); conf.setWindowBottomOffset( uiCode ); 857 #if H_MV_HLS10_MULTILAYERSPS 858 } 859 #endif 818 860 #else 819 861 READ_UVLC( uiCode, "conf_win_left_offset" ); conf.setWindowLeftOffset ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc() ) ); … … 825 867 826 868 #if H_MV 869 #if H_MV_HLS10_MULTILAYERSPS 870 if ( !pcSPS->getMultiLayerExtSpsFlag() ) 871 #else // H_MV_HLS10_GEN 827 872 if ( pcSPS->getLayerId() == 0 ) 873 #endif // H_MV_HLS10_GEN 828 874 { 829 875 #endif … … 845 891 846 892 #if H_MV 893 #if H_MV_HLS10_MULTILAYERSPS 894 if ( !pcSPS->getMultiLayerExtSpsFlag()) 895 #else 847 896 if ( pcSPS->getLayerId() == 0 ) 897 #endif 848 898 { 849 899 #endif … … 904 954 { 905 955 #if H_MV 956 #if H_MV_HLS10_MULTILAYERSPS 957 if ( pcSPS->getMultiLayerExtSpsFlag() ) 958 #else 906 959 if ( pcSPS->getLayerId() > 0 ) 960 #endif 907 961 { 908 962 READ_FLAG( uiCode, "sps_infer_scaling_list_flag" ); pcSPS->setSpsInferScalingListFlag( uiCode == 1 ); … … 1032 1086 READ_FLAG( uiCode, "inter_view_mv_vert_constraint_flag" ); pcSPS->setInterViewMvVertConstraintFlag(uiCode == 1 ? true : false); 1033 1087 1088 #if !H_MV_HLS10_PPS 1034 1089 READ_UVLC( uiCode, "num_scaled_ref_layer_offsets" ); pcSPS->setNumScaledRefLayerOffsets( uiCode ); 1035 1090 … … 1046 1101 READ_FLAG( uiCode, "sps_multilayer_ext_reserved_zero_flag[ i ]" ); 1047 1102 } 1103 #endif 1048 1104 } 1049 1105 … … 1066 1122 } 1067 1123 #endif 1124 1125 #if H_MV_HLS10_PPS 1126 Void TDecCavlc::parsePPSMultilayerExtension(TComPPS* pcPPS) 1127 { 1128 UInt uiCode = 0; 1129 READ_FLAG( uiCode, "poc_reset_info_present_flag" ); pcPPS->setPocResetInfoPresentFlag( uiCode == 1 ); 1130 READ_FLAG( uiCode, "pps_infer_scaling_list_flag" ); pcPPS->setPpsInferScalingListFlag( uiCode == 1 ); 1131 READ_CODE( 6, uiCode, "pps_scaling_list_ref_layer_id" ); pcPPS->setPpsScalingListRefLayerId( uiCode ); 1132 READ_UVLC( uiCode, "num_ref_loc_offsets" ); assert( uiCode == 0 ); 1133 } 1134 1135 #endif 1068 1136 #endif 1069 1137 … … 1075 1143 #if H_MV 1076 1144 READ_FLAG( uiCode, "vps_base_layer_internal_flag" ); pcVPS->setVpsBaseLayerInternalFlag( uiCode == 1 ); 1145 #if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL 1146 READ_FLAG( uiCode, "vps_base_layer_available_flag" ); pcVPS->setVpsBaseLayerAvailableFlag( uiCode == 1 ); 1147 #else 1077 1148 READ_FLAG( uiCode, "vps_reserved_one_bit" ); assert( uiCode == 1 ); 1149 #endif 1078 1150 #else 1079 1151 READ_CODE( 2, uiCode, "vps_reserved_three_2bits" ); assert(uiCode == 3); … … 1090 1162 READ_CODE( 16, uiCode, "vps_reserved_ffff_16bits" ); assert(uiCode == 0xffff); 1091 1163 parsePTL ( pcVPS->getPTL(), true, pcVPS->getMaxTLayers()-1); 1164 #if H_MV_HLS10_PTL_INFER_FIX 1165 #if H_MV 1166 pcVPS->getPTL()->inferGeneralValues ( true, 0, NULL ); 1167 pcVPS->getPTL()->inferSubLayerValues( pcVPS->getMaxTLayers() - 1, 0, NULL ); 1168 #endif 1169 #endif 1092 1170 UInt subLayerOrderingInfoPresentFlag; 1093 1171 READ_FLAG(subLayerOrderingInfoPresentFlag, "vps_sub_layer_ordering_info_present_flag"); … … 1115 1193 READ_CODE( 6, uiCode, "vps_max_layer_id" ); pcVPS->setVpsMaxLayerId( uiCode ); 1116 1194 1195 #if H_MV_HLS10_GEN_FIX 1196 READ_UVLC( uiCode, "vps_num_layer_sets_minus1" ); pcVPS->setVpsNumLayerSetsMinus1( uiCode ); 1197 #else 1117 1198 READ_UVLC( uiCode, "vps_max_num_layer_sets_minus1" ); pcVPS->setVpsNumLayerSetsMinus1( uiCode ); 1199 #endif 1118 1200 for( UInt opsIdx = 1; opsIdx <= pcVPS->getVpsNumLayerSetsMinus1(); opsIdx ++ ) 1119 1201 { … … 1204 1286 UInt uiCode; 1205 1287 1288 #if H_MV_HLS10_PTL 1289 if( pcVPS->getMaxLayersMinus1() > 0 && pcVPS->getVpsBaseLayerInternalFlag() ) 1290 { 1291 parsePTL( pcVPS->getPTL( 1 ),0, pcVPS->getMaxSubLayersMinus1() ); 1292 1293 #if !H_MV_HLS10_PTL_INFER_FIX 1294 // Copy Profile info 1295 TComPTL temp = *pcVPS->getPTL( 1 ); 1296 *pcVPS->getPTL( 1 ) = *pcVPS->getPTL( 0 ); 1297 pcVPS->getPTL( 1 )->copyLevelFrom( &temp ); 1298 #else 1299 pcVPS->getPTL( 1 )->inferGeneralValues ( false, 1, pcVPS->getPTL( 0 ) ); 1300 pcVPS->getPTL( 1 )->inferSubLayerValues( pcVPS->getMaxSubLayersMinus1(), 1, pcVPS->getPTL( 0 ) ); 1301 #endif 1302 } 1303 #endif 1304 1206 1305 READ_FLAG( uiCode, "splitting_flag" ); pcVPS->setSplittingFlag( uiCode == 1 ? true : false ); 1207 1306 … … 1275 1374 } 1276 1375 pcVPS->setRefLayers(); 1376 1377 #if H_MV_HLS10_ADD_LAYERSETS 1378 if ( pcVPS->getNumIndependentLayers() > 1 ) 1379 { 1380 READ_UVLC( uiCode, "num_add_layer_sets" ); pcVPS->setNumAddLayerSets( uiCode ); 1381 } 1382 for (Int i = 0; i < pcVPS->getNumAddLayerSets(); i++) 1383 { 1384 for (Int j = 1; j < pcVPS->getNumIndependentLayers(); j++) 1385 { 1386 READ_CODE( pcVPS->getHighestLayerIdxPlus1Len( j ) , uiCode, "highest_layer_idx_plus1" ); pcVPS->setHighestLayerIdxPlus1( i, j, uiCode ); 1387 } 1388 pcVPS->deriveAddLayerSetLayerIdList( i ); 1389 } 1390 #endif 1391 1277 1392 READ_FLAG( uiCode, "vps_sub_layers_max_minus1_present_flag" ); pcVPS->setVpsSubLayersMaxMinus1PresentFlag( uiCode == 1 ); 1278 1393 if ( pcVPS->getVpsSubLayersMaxMinus1PresentFlag() ) … … 1310 1425 READ_UVLC( uiCode, "vps_num_profile_tier_level_minus1" ); pcVPS->setVpsNumProfileTierLevelMinus1( uiCode ); 1311 1426 1427 #if H_MV_HLS10_PTL 1428 Int offsetVal = ( pcVPS->getMaxLayersMinus1() > 0 && pcVPS->getVpsBaseLayerInternalFlag() ) ? 2 : 1; 1429 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 2 : 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ ) 1430 { 1431 READ_FLAG( uiCode, "vps_profile_present_flag[i]" ); pcVPS->setVpsProfilePresentFlag( i, uiCode == 1 ); 1432 parsePTL ( pcVPS->getPTL( offsetVal ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers()-1); 1433 #if H_MV_HLS10_PTL_INFER_FIX 1434 pcVPS->getPTL( offsetVal )->inferGeneralValues ( pcVPS->getVpsProfilePresentFlag( i ), offsetVal, pcVPS->getPTL( offsetVal - 1 ) ); 1435 pcVPS->getPTL( offsetVal )->inferSubLayerValues( pcVPS->getMaxSubLayersMinus1() , offsetVal, pcVPS->getPTL( offsetVal - 1 ) ); 1436 #else 1437 if( !pcVPS->getVpsProfilePresentFlag( i ) ) 1438 { 1439 TComPTL temp = *pcVPS->getPTL( offsetVal ); 1440 *pcVPS->getPTL( offsetVal ) = *pcVPS->getPTL( offsetVal - 1 ); 1441 pcVPS->getPTL( offsetVal )->copyLevelFrom( &temp ); 1442 } 1443 #endif 1444 offsetVal++; 1445 } 1446 #else 1312 1447 for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ ) 1313 1448 { … … 1321 1456 } 1322 1457 } 1323 1458 #endif 1459 1460 #if !H_MV_HLS10_ADD_LAYERSETS 1324 1461 if ( pcVPS->getNumIndependentLayers() > 1 ) 1325 1462 { … … 1333 1470 } 1334 1471 } 1472 #endif 1473 1335 1474 if (pcVPS->getNumLayerSets() > 1) 1336 1475 { … … 1345 1484 pcVPS->setLayerSetIdxForOlsMinus1(0, -1); 1346 1485 1486 #if H_MV_HLS10_NESSECARY_LAYER 1487 pcVPS->deriveNecessaryLayerFlags( 0 ); 1488 #endif 1347 1489 pcVPS->deriveTargetLayerIdList( 0 ); 1348 1490 1491 #if H_MV_HLS10_PTL_FIX 1492 if (pcVPS->getVpsBaseLayerInternalFlag() ) 1493 { 1494 pcVPS->setProfileTierLevelIdx(0,0, pcVPS->inferProfileTierLevelIdx(0,0) ); 1495 } 1496 #endif 1349 1497 for( Int i = 1; i < pcVPS->getNumOutputLayerSets( ); i++ ) 1350 1498 { 1351 1499 if( i >= pcVPS->getNumLayerSets( ) ) 1352 1500 { 1501 #if !VPS_MISC_UPDATES 1353 1502 READ_UVLC( uiCode, "layer_set_idx_for_ols_minus1[i]" ); pcVPS->setLayerSetIdxForOlsMinus1( i, uiCode ); 1503 #else 1504 READ_CODE( pcVPS->getLayerSetIdxForOlsMinus1Len( i ), uiCode, "layer_set_idx_for_ols_minus1[i]" ); pcVPS->setLayerSetIdxForOlsMinus1( i, uiCode ); 1505 #endif 1354 1506 } 1355 1507 … … 1368 1520 } 1369 1521 } 1522 #if H_MV_HLS10_NESSECARY_LAYER 1523 pcVPS->deriveNecessaryLayerFlags( i ); 1524 #endif 1370 1525 pcVPS->deriveTargetLayerIdList( i ); 1371 1526 1527 #if H_MV_HLS10_PTL 1528 for ( Int j = 0; j < pcVPS->getNumLayersInIdList( pcVPS->olsIdxToLsIdx(i)); j++ ) 1529 { 1530 if (pcVPS->getNecessaryLayerFlag( i, j ) && pcVPS->getVpsNumProfileTierLevelMinus1() > 0 ) 1531 { 1532 READ_CODE( pcVPS->getProfileTierLevelIdxLen(), uiCode,"profile_tier_level_idx[ i ][ j ]" ); pcVPS->setProfileTierLevelIdx( i, j, uiCode ); 1533 } 1534 #if H_MV_HLS10_PTL_FIX 1535 if (pcVPS->getNecessaryLayerFlag( i, j ) && pcVPS->getVpsNumProfileTierLevelMinus1() == 0 ) 1536 { 1537 pcVPS->setProfileTierLevelIdx( i , j, pcVPS->inferProfileTierLevelIdx( i, j) ); 1538 } 1539 #endif 1540 } 1541 #else 1372 1542 if ( pcVPS->getProfileLevelTierIdxLen() > 0 ) 1373 { 1543 { 1374 1544 READ_CODE( pcVPS->getProfileLevelTierIdxLen(), uiCode,"profile_level_tier_idx[ i ]" ); pcVPS->setProfileLevelTierIdx( i , uiCode ); 1375 1545 } 1546 #endif 1547 1376 1548 if( pcVPS->getNumOutputLayersInOutputLayerSet( i ) == 1 && pcVPS->getNumDirectRefLayers( pcVPS->getOlsHighestOutputLayerId( i ) ) > 0 ) 1377 1549 { … … 1422 1594 } 1423 1595 1596 #if !H_MV_HLS10_GEN_FIX 1424 1597 READ_FLAG( uiCode, "vps_reserved_zero_flag" ); 1598 #endif 1425 1599 parseDpbSize( pcVPS ); 1426 1600 … … 1484 1658 if ( pcRepFormat->getChromaAndBitDepthVpsPresentFlag() ) 1485 1659 { 1486 READ_CODE( 2, uiCode, "chroma_format_vps_idc" ); pcRepFormat->setChromaFormatVpsIdc ( uiCode );1487 if ( pcRepFormat->getChromaFormatVpsIdc() == 3 )1488 {1489 READ_FLAG( uiCode, "separate_colour_plane_vps_flag" ); pcRepFormat->setSeparateColourPlaneVpsFlag( uiCode == 1 );1490 }1491 READ_CODE( 4, uiCode, "bit_depth_vps_luma_minus8" ); pcRepFormat->setBitDepthVpsLumaMinus8 ( uiCode );1492 READ_CODE( 4, uiCode, "bit_depth_vps_chroma_minus8" ); pcRepFormat->setBitDepthVpsChromaMinus8 ( uiCode );1660 READ_CODE( 2, uiCode, "chroma_format_vps_idc" ); pcRepFormat->setChromaFormatVpsIdc ( uiCode ); 1661 if ( pcRepFormat->getChromaFormatVpsIdc() == 3 ) 1662 { 1663 READ_FLAG( uiCode, "separate_colour_plane_vps_flag" ); pcRepFormat->setSeparateColourPlaneVpsFlag( uiCode == 1 ); 1664 } 1665 READ_CODE( 4, uiCode, "bit_depth_vps_luma_minus8" ); pcRepFormat->setBitDepthVpsLumaMinus8 ( uiCode ); 1666 READ_CODE( 4, uiCode, "bit_depth_vps_chroma_minus8" ); pcRepFormat->setBitDepthVpsChromaMinus8 ( uiCode ); 1493 1667 } 1494 1668 else … … 1496 1670 pcRepFormat->inferChromaAndBitDepth(pcPrevRepFormat, false ); 1497 1671 } 1672 #if H_MV_HLS10_GEN_VSP_CONF_WIN 1673 READ_FLAG( uiCode, "conformance_window_vps_flag" ); pcRepFormat->setConformanceWindowVpsFlag( uiCode == 1 ); 1674 if ( pcRepFormat->getConformanceWindowVpsFlag() ) 1675 { 1676 READ_UVLC( uiCode, "conf_win_vps_left_offset" ); pcRepFormat->setConfWinVpsLeftOffset( uiCode ); 1677 READ_UVLC( uiCode, "conf_win_vps_right_offset" ); pcRepFormat->setConfWinVpsRightOffset( uiCode ); 1678 READ_UVLC( uiCode, "conf_win_vps_top_offset" ); pcRepFormat->setConfWinVpsTopOffset( uiCode ); 1679 READ_UVLC( uiCode, "conf_win_vps_bottom_offset" ); pcRepFormat->setConfWinVpsBottomOffset( uiCode ); 1680 } 1681 #endif 1498 1682 } 1499 1683 … … 1521 1705 if( pcVPSVUI->getBitRatePresentVpsFlag( ) || pcVPSVUI->getPicRatePresentVpsFlag( ) ) 1522 1706 { 1707 #if H_MV_HLS10_VPS_VUI 1708 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i < pcVPS->getNumLayerSets(); i++ ) 1709 #else 1523 1710 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <= pcVPS->getVpsNumLayerSetsMinus1(); i++ ) 1711 #endif 1524 1712 { 1525 1713 for( Int j = 0; j <= pcVPS->getMaxSubLayersInLayerSetMinus1( i ); j++ ) … … 1554 1742 else 1555 1743 { 1744 #if H_MV_HLS10_VPS_VUI 1745 pcVPSVUI->setVpsNumVideoSignalInfoMinus1( pcVPS->getMaxLayersMinus1() - pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1 ); 1746 #else 1556 1747 pcVPSVUI->setVpsNumVideoSignalInfoMinus1( pcVPS->getMaxLayersMinus1() ); 1748 #endif 1557 1749 } 1558 1750 … … 1565 1757 } 1566 1758 1759 #if I0045_VPS_VUI_VST_PARAMS 1760 if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() && pcVPSVUI->getVpsNumVideoSignalInfoMinus1() > 0 ) 1761 { 1762 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <= pcVPS->getMaxLayersMinus1(); i++ ) 1763 { 1764 READ_CODE( 4, uiCode, "vps_video_signal_info_idx" ); pcVPSVUI->setVpsVideoSignalInfoIdx( i, uiCode ); 1765 } 1766 } 1767 else if ( !pcVPSVUI->getVideoSignalInfoIdxPresentFlag() ) 1768 { 1769 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <= pcVPS->getMaxLayersMinus1(); i++ ) 1770 { 1771 pcVPSVUI->setVpsVideoSignalInfoIdx( i, i ); 1772 } 1773 } 1774 else 1775 { 1776 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <= pcVPS->getMaxLayersMinus1(); i++ ) 1777 { 1778 pcVPSVUI->setVpsVideoSignalInfoIdx( i, 0 ); 1779 } 1780 } 1781 #else 1567 1782 if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() && pcVPSVUI->getVpsNumVideoSignalInfoMinus1() > 0 ) 1568 1783 { … … 1580 1795 } 1581 1796 } 1797 #endif 1582 1798 READ_FLAG( uiCode, "tiles_not_in_use_flag" ); pcVPSVUI->setTilesNotInUseFlag( uiCode == 1 ); 1583 1799 if( !pcVPSVUI->getTilesNotInUseFlag() ) … … 1594 1810 { 1595 1811 for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ) ; j++ ) 1596 { 1812 { 1813 #if H_MV_HLS10_REF_PRED_LAYERS 1814 Int layerIdx = pcVPS->getLayerIdInVps(pcVPS->getIdDirectRefLayer(pcVPS->getLayerIdInNuh( i ) , j )); 1815 #else 1597 1816 Int layerIdx = pcVPS->getLayerIdInVps(pcVPS->getRefLayerId(pcVPS->getLayerIdInNuh( i ) , j )); 1817 #endif 1598 1818 if( pcVPSVUI->getTilesInUseFlag( i ) && pcVPSVUI->getTilesInUseFlag( layerIdx ) ) 1599 1819 { … … 1613 1833 } 1614 1834 } 1835 #if H_MV_HLS10_VPS_VUI 1836 READ_FLAG( uiCode, "single_layer_for_non_irap_flag" ); pcVPSVUI->setSingleLayerForNonIrapFlag( uiCode == 1 ); 1837 READ_FLAG( uiCode, "higher_layer_irap_skip_flag" ); pcVPSVUI->setHigherLayerIrapSkipFlag( uiCode == 1 ); 1838 #else 1615 1839 READ_CODE( 3, uiCode, "vps_vui_reserved_zero_3bits" ); 1840 #endif 1616 1841 READ_FLAG( uiCode, "ilp_restricted_ref_layers_flag" ); pcVPSVUI->setIlpRestrictedRefLayersFlag( uiCode == 1 ); 1617 1842 … … 1622 1847 for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ); j++ ) 1623 1848 { 1849 #if H_MV_HLS10_REF_PRED_LAYERS 1850 if( pcVPS->getVpsBaseLayerInternalFlag() || pcVPS->getIdDirectRefLayer( pcVPS->getLayerIdInNuh( i ), j ) > 0 ) 1851 #else 1624 1852 if( pcVPS->getVpsBaseLayerInternalFlag() || pcVPS->getRefLayerId( pcVPS->getLayerIdInNuh( i ), j ) > 0 ) 1853 #endif 1625 1854 { 1626 1855 READ_UVLC( uiCode, "min_spatial_segment_offset_plus1" ); pcVPSVUI->setMinSpatialSegmentOffsetPlus1( i, j, uiCode ); … … 1641 1870 if ( pcVPSVUI->getVpsVuiBspHrdPresentFlag( ) ) 1642 1871 { 1872 #if VPS_MISC_UPDATES 1873 assert(pcVPS->getTimingInfo()->getTimingInfoPresentFlag() == 1); 1874 #endif 1643 1875 parseVpsVuiBspHrdParameters( pcVPS ); 1644 1876 } … … 1661 1893 1662 1894 TComVpsVuiBspHrdParameters* vpsVuiBspHrdP = pcVPSVUI->getVpsVuiBspHrdParameters(); 1663 1895 #if H_MV_HLS10_VPS_VUI_BSP 1896 assert( vpsVuiBspHrdP == NULL ); 1897 vpsVuiBspHrdP = new TComVpsVuiBspHrdParameters; 1898 pcVPSVUI->setVpsVuiBspHrdParameters( vpsVuiBspHrdP ); 1899 #else 1664 1900 assert ( vpsVuiBspHrdP ); 1665 1901 #endif 1666 1902 UInt uiCode; 1903 #if H_MV_HLS10_VPS_VUI_BSP 1904 READ_UVLC( uiCode, "vps_num_add_hrd_params" ); vpsVuiBspHrdP->setVpsNumAddHrdParams( uiCode ); 1905 vpsVuiBspHrdP->createAfterVpsNumAddHrdParams( pcVPS ); 1906 for( Int i = pcVPS->getNumHrdParameters(); i < pcVPS->getNumHrdParameters() + vpsVuiBspHrdP->getVpsNumAddHrdParams(); i++ ) 1907 { 1908 if( i > 0 ) 1909 { 1910 READ_FLAG( uiCode, "cprms_add_present_flag" ); vpsVuiBspHrdP->setCprmsAddPresentFlag( i, uiCode == 1 ); 1911 } 1912 else 1913 { 1914 vpsVuiBspHrdP->setCprmsAddPresentFlag( i, true ); 1915 } 1916 1917 READ_UVLC( uiCode, "num_sub_layer_hrd_minus1" ); vpsVuiBspHrdP->setNumSubLayerHrdMinus1( i, uiCode ); 1918 TComHRD* hrdParameters = vpsVuiBspHrdP->getHrdParametermeters( i ); 1919 parseHrdParameters( hrdParameters, vpsVuiBspHrdP->getCprmsAddPresentFlag( i ), vpsVuiBspHrdP->getNumSubLayerHrdMinus1( i ) ); 1920 } 1921 1922 vpsVuiBspHrdP->setNumPartitionsInSchemeMinus1( 0, 0, 0); 1923 vpsVuiBspHrdP->createAfterNumPartitionsInSchemeMinus1( 0, 0 ); 1924 1925 for( Int h = 0; h < pcVPS->getNumOutputLayerSets(); h++ ) 1926 { 1927 if ( h == 0) 1928 { 1929 vpsVuiBspHrdP->setNumSignalledPartitioningSchemes( h, 0 ); 1930 } 1931 else 1932 { 1933 READ_UVLC( uiCode, "num_signalled_partitioning_schemes" ); vpsVuiBspHrdP->setNumSignalledPartitioningSchemes( h, uiCode ); 1934 } 1935 vpsVuiBspHrdP->createAfterNumSignalledPartitioningSchemes( h ); 1936 1937 for( Int j = 0; j < vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ) + 1; j++ ) 1938 { 1939 if ( j == 0 && h == 0 ) 1940 { 1941 vpsVuiBspHrdP->setNumPartitionsInSchemeMinus1( h, j, uiCode ); 1942 } 1943 else if( j == 0 ) 1944 { 1945 vpsVuiBspHrdP->setNumPartitionsInSchemeMinus1( h, j, pcVPS->getNumLayersInIdList( h ) - 1 ); 1946 } 1947 else 1948 { 1949 READ_UVLC( uiCode, "num_partitions_in_scheme_minus1" ); vpsVuiBspHrdP->setNumPartitionsInSchemeMinus1( h, j, uiCode ); 1950 } 1951 vpsVuiBspHrdP->createAfterNumPartitionsInSchemeMinus1( h, j ); 1952 1953 for( Int k = 0; k <= vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ); k++ ) 1954 { 1955 for( Int r = 0; r < pcVPS->getNumLayersInIdList(pcVPS->olsIdxToLsIdx( h ) ) ; r++ ) 1956 { 1957 if( h == 0 && j == 0 && k == 0 && r == 0 ) 1958 { 1959 vpsVuiBspHrdP->setLayerIncludedInPartitionFlag( h, j, k, r, true ); 1960 } 1961 else if ( h > 0 && j == 0 ) 1962 { 1963 vpsVuiBspHrdP->setLayerIncludedInPartitionFlag( h, j, k, r, (k == r) ); 1964 } 1965 else 1966 { 1967 READ_FLAG( uiCode, "layer_included_in_partition_flag" ); vpsVuiBspHrdP->setLayerIncludedInPartitionFlag( h, j, k, r, uiCode == 1 ); 1968 } 1969 } 1970 } 1971 } 1972 if ( h > 0 ) 1973 { 1974 for( Int i = 0; i < vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ) + 1; i++ ) 1975 { 1976 for( Int t = 0; t <= pcVPS->getMaxSubLayersInLayerSetMinus1( pcVPS->olsIdxToLsIdx( i ) ); t++ ) 1977 { 1978 READ_UVLC( uiCode, "num_bsp_schedules_minus1" ); vpsVuiBspHrdP->setNumBspSchedulesMinus1( h, i, t, uiCode ); 1979 vpsVuiBspHrdP->createAfterNumBspSchedulesMinus1( h, i, t ); 1980 for( Int j = 0; j <= vpsVuiBspHrdP->getNumBspSchedulesMinus1( h, i, t ); j++ ) 1981 { 1982 for( Int k = 0; k <= vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ); k++ ) 1983 { 1984 READ_CODE( vpsVuiBspHrdP->getBspHrdIdxLen( pcVPS ), uiCode, "bsp_hrd_idx" ); vpsVuiBspHrdP->setBspHrdIdx( h, i, t, j, k, uiCode ); 1985 READ_UVLC( uiCode, "bsp_sched_idx" ); vpsVuiBspHrdP->setBspSchedIdx( h, i, t, j, k, uiCode ); 1986 } 1987 } 1988 } 1989 } 1990 } 1991 } 1992 #else 1667 1993 READ_UVLC( uiCode, "vps_num_bsp_hrd_parameters_minus1" ); vpsVuiBspHrdP->setVpsNumBspHrdParametersMinus1( uiCode ); 1668 1994 for( Int i = 0; i <= vpsVuiBspHrdP->getVpsNumBspHrdParametersMinus1( ); i++ ) … … 1701 2027 } 1702 2028 } 1703 } 2029 #endif 2030 } 1704 2031 1705 2032 Void TDecCavlc::parseVideoSignalInfo( TComVideoSignalInfo* pcVideoSignalInfo ) … … 1733 2060 for( Int k = 0; k < vps->getNumLayersInIdList( currLsIdx ); k++ ) 1734 2061 { 2062 #if H_MV_HLS10_DBP_SIZE 2063 if ( vps->getNecessaryLayerFlag( i, k ) && ( vps->getVpsBaseLayerInternalFlag() || ( vps->getLayerSetLayerIdList(vps->olsIdxToLsIdx(i),k) != 0 ) )) 2064 { 2065 READ_UVLC( uiCode, "max_vps_dec_pic_buffering_minus1" ); dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, uiCode ); 2066 } 2067 else 2068 { 2069 if ( vps->getNecessaryLayerFlag( i, k ) && ( j == 0 ) && ( k == 0 )) 2070 { 2071 dpbSize->setMaxVpsDecPicBufferingMinus1(i ,k, j, 0 ); 2072 } 2073 } 2074 #else 1735 2075 READ_UVLC( uiCode, "max_vps_dec_pic_buffering_minus1" ); dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, uiCode ); 2076 #endif 1736 2077 } 1737 2078 READ_UVLC( uiCode, "max_vps_num_reorder_pics" ); dpbSize->setMaxVpsNumReorderPics( i, j, uiCode ); … … 1744 2085 for( Int k = 0; k < vps->getNumLayersInIdList( vps->olsIdxToLsIdx( i ) ); k++ ) 1745 2086 { 1746 dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) ); 2087 #if H_MV_HLS10_DBP_SIZE 2088 if ( vps->getNecessaryLayerFlag(i, k ) ) 2089 { 2090 #endif 2091 dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) ); 2092 #if H_MV_HLS10_DBP_SIZE 2093 } 2094 #endif 1747 2095 } 1748 2096 dpbSize->setMaxVpsNumReorderPics ( i, j, dpbSize->getMaxVpsNumReorderPics ( i, j - 1 ) ); … … 1940 2288 sps->inferScalingList( parameterSetManager->getActiveSPS( sps->getSpsScalingListRefLayerId() ) ); 1941 2289 sps->inferSpsMaxDecPicBufferingMinus1( vps, targetOlsIdx, rpcSlice->getLayerId(), false ); 2290 #if !H_MV_HLS10_ADD_LAYERSETS 1942 2291 vps->inferDbpSizeLayerSetZero( sps, false ); 2292 #endif 1943 2293 1944 2294 if ( sps->getVuiParametersPresentFlag() ) … … 2008 2358 esb++; 2009 2359 READ_FLAG( uiCode, "discardable_flag" ); rpcSlice->setDiscardableFlag( uiCode == 1 ); 2360 #if NON_REF_NAL_TYPE_DISCARDABLE 2361 if ( uiCode == 1 ) 2362 { 2363 assert(rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_TRAIL_R && 2364 rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_TSA_R && 2365 rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_STSA_R && 2366 rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_RADL_R && 2367 rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_RASL_R); 2368 } 2369 #endif 2010 2370 } 2011 2371 … … 2155 2515 rps->checkMaxNumPics( 2156 2516 vps->getVpsExtensionFlag(), 2517 #if H_MV_HLS10_MAXNUMPICS 2518 MAX_INT, // To be replaced by MaxDbpSize 2519 #else 2157 2520 vps->getMaxNumPics( rpcSlice->getLayerId() ), 2521 #endif 2158 2522 rpcSlice->getLayerId(), 2159 2523 sps->getMaxDecPicBuffering( sps->getSpsMaxSubLayersMinus1() ) - 1 ); … … 2268 2632 rps->checkMaxNumPics( 2269 2633 vps->getVpsExtensionFlag(), 2634 #if H_MV_HLS10_MAXNUMPICS 2635 MAX_INT, // To be replaced by MaxDbpsize 2636 #else 2270 2637 vps->getMaxNumPics( rpcSlice->getLayerId() ), 2638 #endif 2271 2639 rpcSlice->getLayerId(), 2272 2640 sps->getMaxDecPicBuffering( sps->getSpsMaxSubLayersMinus1() ) - 1 ); … … 2287 2655 if (rpcSlice->getSPS()->getTMVPFlagsPresent()) 2288 2656 { 2657 #if I0044_SLICE_TMVP 2658 READ_FLAG( uiCode, "slice_temporal_mvp_enabled_flag" ); 2659 #else 2289 2660 READ_FLAG( uiCode, "slice_temporal_mvp_enable_flag" ); 2661 #endif 2290 2662 rpcSlice->setEnableTMVPFlag( uiCode == 1 ? true : false ); 2291 2663 } … … 2637 3009 2638 3010 #if H_3D 3011 #if LGE_FCO_I0116 3012 if( rpcSlice->getVPS()->hasCamParInSliceHeader( rpcSlice->getViewIndex() ) && rpcSlice->getIsDepth() ) 3013 #else 2639 3014 if( rpcSlice->getVPS()->hasCamParInSliceHeader( rpcSlice->getViewIndex() ) && !rpcSlice->getIsDepth() ) 3015 #endif 2640 3016 { 2641 3017 UInt uiViewIndex = rpcSlice->getViewIndex(); … … 2723 3099 #endif 2724 3100 } 3101 #if INFERENCE_POC_MSB_VAL_PRESENT 3102 else 3103 { 3104 rpcSlice->setSliceSegmentHeaderExtensionLength( 0 ); 3105 rpcSlice->setPocMsbValPresentFlag( false ); 3106 } 3107 #endif 2725 3108 2726 3109 … … 2815 3198 READ_FLAG( uiCode, "sub_layer_profile_present_flag[i]" ); rpcPTL->setSubLayerProfilePresentFlag(i, uiCode); 2816 3199 #if H_MV 2817 rpcPTL->setSubLayerProfilePresentFlag( i, profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) ); 3200 #if !H_MV_HLS10_PTL_INFER_FIX 3201 rpcPTL->setSubLayerProfilePresentFlag( i, profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) ); 3202 #else 3203 // When profilePresentFlag is equal to 0, sub_layer_profile_present_flag[ i ] shall be equal to 0. 3204 assert( profilePresentFlag || !rpcPTL->getSubLayerProfilePresentFlag(i) ); 3205 #endif 2818 3206 #else 2819 3207 } … … 2833 3221 for(Int i = 0; i < maxNumSubLayersMinus1; i++) 2834 3222 { 2835 if( profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) ) 3223 #if H_MV_HLS10_PTL_INFER_FIX 3224 #if H_MV 3225 if( rpcPTL->getSubLayerProfilePresentFlag(i) ) 3226 #else 3227 if( profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) ) 3228 #endif 3229 #else 3230 if( profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) ) 3231 #endif 2836 3232 { 2837 3233 parseProfileTier(rpcPTL->getSubLayerPTL(i)); … … 2866 3262 ptl->setFrameOnlyConstraintFlag(uiCode ? true : false); 2867 3263 3264 #if H_MV_HLS10_PTL 3265 #if H_MV_HLS10_PTL_INFER_FIX 3266 if( ptl->getV2ConstraintsPresentFlag() ) 3267 #else 3268 if( ptl->getProfileIdc( ) == 4 || ptl->getProfileCompatibilityFlag( 4 ) || 3269 ptl->getProfileIdc( ) == 5 || ptl->getProfileCompatibilityFlag( 5 ) || 3270 ptl->getProfileIdc( ) == 6 || ptl->getProfileCompatibilityFlag( 6 ) || 3271 ptl->getProfileIdc( ) == 7 || ptl->getProfileCompatibilityFlag( 7 ) ) 3272 #endif 3273 { 3274 READ_FLAG( uiCode, "max_12bit_constraint_flag" ); ptl->setMax12bitConstraintFlag ( uiCode == 1 ); 3275 READ_FLAG( uiCode, "max_10bit_constraint_flag" ); ptl->setMax10bitConstraintFlag ( uiCode == 1 ); 3276 READ_FLAG( uiCode, "max_8bit_constraint_flag" ); ptl->setMax8bitConstraintFlag ( uiCode == 1 ); 3277 READ_FLAG( uiCode, "max_422chroma_constraint_flag" ); ptl->setMax422chromaConstraintFlag ( uiCode == 1 ); 3278 READ_FLAG( uiCode, "max_420chroma_constraint_flag" ); ptl->setMax420chromaConstraintFlag ( uiCode == 1 ); 3279 READ_FLAG( uiCode, "max_monochrome_constraint_flag" ); ptl->setMaxMonochromeConstraintFlag ( uiCode == 1 ); 3280 READ_FLAG( uiCode, "intra_constraint_flag" ); ptl->setIntraConstraintFlag ( uiCode == 1 ); 3281 READ_FLAG( uiCode, "one_picture_only_constraint_flag" ); ptl->setOnePictureOnlyConstraintFlag( uiCode == 1 ); 3282 READ_FLAG( uiCode, "lower_bit_rate_constraint_flag" ); ptl->setLowerBitRateConstraintFlag ( uiCode == 1 ); 3283 READ_CODE(16, uiCode, "XXX_reserved_zero_34bits[0..15]"); 3284 READ_CODE(16, uiCode, "XXX_reserved_zero_34bits[16..31]"); 3285 READ_CODE(2 , uiCode, "XXX_reserved_zero_34bits[32..33]"); 3286 } 3287 else 3288 { 3289 READ_CODE(16, uiCode, "XXX_reserved_zero_43bits[0..15]"); 3290 READ_CODE(16, uiCode, "XXX_reserved_zero_43bits[16..31]"); 3291 READ_CODE(11, uiCode, "XXX_reserved_zero_43bits[32..42]"); 3292 } 3293 #if H_MV_HLS10_PTL_INFER_FIX 3294 if( ptl->getInbldPresentFlag() ) 3295 #else 3296 if( ( ptl->getProfileIdc() >= 1 && ptl->getProfileIdc() <= 5 ) || 3297 ptl->getProfileCompatibilityFlag( 1 ) || ptl->getProfileCompatibilityFlag( 2 ) || 3298 ptl->getProfileCompatibilityFlag( 3 ) || ptl->getProfileCompatibilityFlag( 4 ) || 3299 ptl->getProfileCompatibilityFlag( 5 ) ) 3300 #endif 3301 { 3302 READ_FLAG( uiCode, "inbld_flag" ); ptl->setInbldFlag( uiCode == 1 ); 3303 } 3304 else 3305 { 3306 READ_FLAG(uiCode, "reserved_zero_bit"); 3307 } 3308 #else 2868 3309 READ_CODE(16, uiCode, "XXX_reserved_zero_44bits[0..15]"); 2869 3310 READ_CODE(16, uiCode, "XXX_reserved_zero_44bits[16..31]"); 2870 3311 READ_CODE(12, uiCode, "XXX_reserved_zero_44bits[32..43]"); 3312 #endif 2871 3313 } 2872 3314 -
trunk/source/Lib/TLibDecoder/TDecCAVLC.h
r1039 r1066 97 97 #endif 98 98 99 #if H_MV_HLS10_PPS 100 #if H_MV 101 Void parsePPSMultilayerExtension( TComPPS* pcPPS ); 102 #endif 103 #endif 104 105 99 106 #if H_3D 100 107 Void parsePPS ( TComPPS* pcPPS, TComVPS* pcVPS ); -
trunk/source/Lib/TLibDecoder/TDecCu.cpp
r1039 r1066 859 859 // get collocated depth block 860 860 UInt uiDepthStride = 0; 861 #if LGE_FCO_I0116 862 Pel* pDepthPels = pcCU->getVirtualDepthBlock(pcCU->getZorderIdxInCU(), pcCU->getWidth(0), pcCU->getHeight(0), uiDepthStride); 863 #else 861 864 Pel* pDepthPels = pcCU->getVirtualDepthBlock(0, pcCU->getWidth(0), pcCU->getHeight(0), uiDepthStride); 865 #endif 862 866 AOF( pDepthPels != NULL ); 863 867 AOF( uiDepthStride != 0 ); -
trunk/source/Lib/TLibDecoder/TDecSbac.cpp
r1039 r1066 794 794 795 795 #if MTK_I0099_VPS_EX2 796 #if LGE_FCO_I0116 797 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFlag && pcTexture->getReconMark()) 798 #else 796 799 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFlag) 800 #endif 797 801 #else 798 802 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && sps->getUseQTL() && sps->getUsePC()) … … 854 858 UInt uiTexturePart = uiMode; 855 859 #if MTK_I0099_VPS_EX2 860 #if LGE_FCO_I0116 861 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFlag && pcTexture->getReconMark()) 862 #else 856 863 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFlag ) 864 #endif 857 865 #else 858 866 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && sps->getUseQTL() && sps->getUsePC()) -
trunk/source/Lib/TLibDecoder/TDecTop.cpp
r976 r1066 229 229 } 230 230 231 #if !LGE_FCO_I0116 231 232 if ( pcSlice->getIsDepth()) 232 233 { 233 234 return; 234 235 } 236 #endif 235 237 236 238 Int curPoc = pcSlice->getPOC(); … … 667 669 #if H_MV 668 670 sps->inferSpsMaxDecPicBufferingMinus1( vps, m_targetOptLayerSetIdx, getLayerId(), false ); 671 #if !H_MV_HLS10_ADD_LAYERSETS 669 672 vps->inferDbpSizeLayerSetZero( sps, false ); 673 #endif 670 674 // When the value of vps_num_rep_formats_minus1 in the active VPS is equal to 0 671 675 if ( vps->getVpsNumRepFormatsMinus1() == 0 ) … … 675 679 } 676 680 sps->checkRpsMaxNumPics( vps, getLayerId() ); 681 #if H_MV_HLS10_MULTILAYERSPS 682 683 if( sps->getLayerId() != 0 ) 684 { 685 sps->inferSpsMaxSubLayersMinus1( true, vps ); 686 } 687 688 #if H_MV_HLS10_MULTILAYERSPS 689 // It is a requirement of bitstream conformance that, when the SPS is referred to by 690 // any current picture that belongs to an independent non-base layer, the value of 691 // MultiLayerExtSpsFlag derived from the SPS shall be equal to 0. 692 693 if ( m_layerId > 0 && vps->getNumRefLayers( m_layerId ) == 0 ) 694 { 695 assert( sps->getMultiLayerExtSpsFlag() == 0 ); 696 } 697 #endif 698 699 if( sps->getMultiLayerExtSpsFlag() ) 700 { 701 sps->setTemporalIdNestingFlag( (sps->getMaxTLayers() > 1) ? vps->getTemporalNestingFlag() : true ); 702 } 703 #else 677 704 if( m_layerId > 0 ) 678 705 { 679 706 sps->setTemporalIdNestingFlag( (sps->getMaxTLayers() > 1) ? vps->getTemporalNestingFlag() : true ); 680 707 } 708 #endif 681 709 #endif 682 710 … … 702 730 #if H_MV 703 731 m_apcSlicePilot->setVPS(vps); 732 #if H_MV_HLS10_REF_PRED_LAYERS 733 // The nuh_layer_id value of the NAL unit containing the PPS that is activated for a layer layerA with nuh_layer_id equal to nuhLayerIdA shall be equal to 0, or nuhLayerIdA, or the nuh_layer_id of a direct or indirect reference layer of layerA. 734 assert( pps->getLayerId() == m_layerId || pps->getLayerId( ) == 0 || vps->getDependencyFlag( m_layerId, pps->getLayerId() ) ); 735 // The nuh_layer_id value of the NAL unit containing the SPS that is activated for a layer layerA with nuh_layer_id equal to nuhLayerIdA shall be equal to 0, or nuhLayerIdA, or the nuh_layer_id of a direct or indirect reference layer of layerA. 736 assert( sps->getLayerId() == m_layerId || sps->getLayerId( ) == 0 || vps->getDependencyFlag( m_layerId, sps->getLayerId() ) ); 737 #else 704 738 // The nuh_layer_id value of the NAL unit containing the PPS that is activated for a layer layerA with nuh_layer_id equal to nuhLayerIdA shall be equal to 0, or nuhLayerIdA, or the nuh_layer_id of a direct or indirect reference layer of layerA. 705 739 assert( pps->getLayerId() == m_layerId || pps->getLayerId( ) == 0 || vps->getInDirectDependencyFlag( m_layerId, pps->getLayerId() ) ); 706 740 // The nuh_layer_id value of the NAL unit containing the SPS that is activated for a layer layerA with nuh_layer_id equal to nuhLayerIdA shall be equal to 0, or nuhLayerIdA, or the nuh_layer_id of a direct or indirect reference layer of layerA. 707 741 assert( sps->getLayerId() == m_layerId || sps->getLayerId( ) == 0 || vps->getInDirectDependencyFlag( m_layerId, sps->getLayerId() ) ); 742 #endif 708 743 sps->inferRepFormat ( vps , m_layerId ); 709 744 sps->inferScalingList( m_parameterSetManagerDecoder.getActiveSPS( sps->getSpsScalingListRefLayerId() ) ); 745 710 746 #endif 711 747 pps->setSPS(sps); … … 909 945 } 910 946 #endif 947 948 #if I0044_SLICE_TMVP 949 if ( m_apcSlicePilot->getTLayer() == 0 && m_apcSlicePilot->getEnableTMVPFlag() == 0 ) 950 { 951 //update all pics in the DPB such that they cannot be used for TMPV ref 952 TComList<TComPic*>::iterator iterRefPic = m_cListPic.begin(); 953 while( iterRefPic != m_cListPic.end() ) 954 { 955 TComPic *refPic = *iterRefPic; 956 if( ( refPic->getLayerId() == m_apcSlicePilot->getLayerId() ) && refPic->getReconMark() ) 957 { 958 for(Int i = refPic->getNumAllocatedSlice()-1; i >= 0; i--) 959 { 960 961 TComSlice *refSlice = refPic->getSlice(i); 962 refSlice->setAvailableForTMVPRefFlag( false ); 963 } 964 } 965 iterRefPic++; 966 } 967 } 968 m_apcSlicePilot->setAvailableForTMVPRefFlag( true ); 969 #endif 970 911 971 xActivateParameterSets(); 912 972 … … 1133 1193 #endif 1134 1194 // For generalized B 1195 #if I0044_SLICE_TMVP 1196 if( m_layerId > 0 && !pcSlice->isIntra() && pcSlice->getEnableTMVPFlag() ) 1197 { 1198 TComPic* refPic = pcSlice->getRefPic(RefPicList(1 - pcSlice->getColFromL0Flag()), pcSlice->getColRefIdx()); 1199 1200 assert ( refPic ); 1201 assert ( refPic->getPicSym()->getSlice(0)->getAvailableForTMVPRefFlag() == true ); 1202 } 1203 #endif 1204 1205 // For generalized B 1135 1206 // note: maybe not existed case (always L0 is copied to L1 if L1 is empty) 1136 1207 if (pcSlice->isInterB() && pcSlice->getNumRefIdx(REF_PIC_LIST_1) == 0) … … 1201 1272 1202 1273 #if H_3D_IV_MERGE 1274 #if LGE_FCO_I0116 1275 if( !pcSlice->getIsDepth() && m_pcCamParsCollector ) 1276 #else 1203 1277 if( pcSlice->getIsDepth() && m_pcCamParsCollector ) 1278 #endif 1204 1279 { 1205 1280 m_pcCamParsCollector->copyCamParamForSlice( pcSlice ); … … 1652 1727 for (Int i = 0; i < vps->getNumDirectRefLayers( getLayerId() ); i++ ) 1653 1728 { 1729 #if H_MV_HLS10_REF_PRED_LAYERS 1730 Int refLayerId = vps->getIdDirectRefLayer( m_layerId, i ); 1731 #else 1654 1732 Int refLayerId = vps->getRefLayerId( m_layerId, i ); 1733 #endif 1655 1734 allRefLayersInitilizedFlag = allRefLayersInitilizedFlag && m_layerInitilizedFlag[ refLayerId ]; 1656 1735 } -
trunk/source/Lib/TLibEncoder/TEncCavlc.cpp
r1039 r1066 49 49 { 50 50 #if H_MV_ENC_DEC_TRAC 51 #if H_MV_HLS10_GEN_FIX 52 fprintf( g_hTrace, "=========== Sequence Parameter Set LayerId: %d ===========\n", pSPS->getLayerId() ); 53 #else 51 54 fprintf( g_hTrace, "=========== Sequence Parameter Set ===========\n" ); 55 #endif 52 56 #else 53 57 fprintf( g_hTrace, "=========== Sequence Parameter Set ID: %d ===========\n", pSPS->getSPSId() ); … … 58 62 { 59 63 #if H_MV_ENC_DEC_TRAC 64 #if H_MV_HLS10_GEN_FIX 65 fprintf( g_hTrace, "=========== Picture Parameter Set LayerId: %d ===========\n", pPPS->getLayerId() ); 66 #else 60 67 fprintf( g_hTrace, "=========== Picture Parameter Set ===========\n" ); 68 #endif 61 69 #else 62 70 fprintf( g_hTrace, "=========== Picture Parameter Set ID: %d ===========\n", pPPS->getPPSId() ); … … 241 249 } 242 250 } 251 #if !H_MV_HLS10_PPS 243 252 #if H_MV 244 253 if ( pcPPS->getLayerId() > 0 ) … … 254 263 { 255 264 #endif 265 #endif 256 266 WRITE_FLAG( pcPPS->getScalingListPresentFlag() ? 1 : 0, "pps_scaling_list_data_present_flag" ); 257 267 if( pcPPS->getScalingListPresentFlag() ) … … 259 269 codeScalingList( m_pcSlice->getScalingList() ); 260 270 } 271 #if !H_MV_HLS10_PPS 261 272 #if H_MV 262 273 } 274 #endif 263 275 #endif 264 276 #if PPS_FIX_DEPTH … … 301 313 if ( pcPPS->getPpsMultilayerExtensionFlag() ) 302 314 { 315 #if H_MV_HLS10_PPS 316 codePPSMultilayerExtension( pcPPS ); 317 #else 303 318 WRITE_FLAG( pcPPS->getPocResetInfoPresentFlag( ) ? 1 : 0 , "poc_reset_info_present_flag" ); 304 319 WRITE_FLAG( 0, "pps_extension_reserved_zero_flag" ); 320 #endif 305 321 } 306 322 … … 675 691 #endif 676 692 WRITE_CODE( pcSPS->getMaxTLayers() - 1, 3, "sps_max_sub_layers_minus1" ); 693 #if H_MV_HLS10_MULTILAYERSPS 694 #if H_MV 695 } 696 else 697 { 698 WRITE_CODE( pcSPS->getSpsExtOrMaxSubLayersMinus1( ), 3, "sps_ext_or_max_sub_layers_minus1" ); 699 } 700 if ( !pcSPS->getMultiLayerExtSpsFlag() ) 701 { 702 #endif 703 #endif 704 677 705 WRITE_FLAG( pcSPS->getTemporalIdNestingFlag() ? 1 : 0, "sps_temporal_id_nesting_flag" ); 678 706 codePTL(pcSPS->getPTL(), 1, pcSPS->getMaxTLayers() - 1); … … 682 710 WRITE_UVLC( pcSPS->getSPSId (), "sps_seq_parameter_set_id" ); 683 711 #if H_MV 712 #if H_MV_HLS10_MULTILAYERSPS 713 if ( pcSPS->getMultiLayerExtSpsFlag() ) 714 #else 684 715 if ( pcSPS->getLayerId() > 0 ) 716 #endif 685 717 { 686 718 WRITE_FLAG( pcSPS->getUpdateRepFormatFlag( ) ? 1 : 0 , "update_rep_format_flag" ); … … 703 735 WRITE_UVLC( pcSPS->getPicWidthInLumaSamples (), "pic_width_in_luma_samples" ); 704 736 WRITE_UVLC( pcSPS->getPicHeightInLumaSamples(), "pic_height_in_luma_samples" ); 737 #if !H_MV_HLS10_MULTILAYERSPS 705 738 #if H_MV 706 739 } 740 #endif 707 741 #endif 708 742 Window conf = pcSPS->getConformanceWindow(); … … 716 750 WRITE_UVLC( conf.getWindowBottomOffset() / TComSPS::getWinUnitY(pcSPS->getChromaFormatIdc() ), "conf_win_bottom_offset" ); 717 751 } 752 #if H_MV_HLS10_MULTILAYERSPS 718 753 #if H_MV 754 } 755 #endif 756 #endif 757 758 #if H_MV 759 #if H_MV_HLS10_MULTILAYERSPS 760 if ( !pcSPS->getMultiLayerExtSpsFlag() ) 761 #else 719 762 if ( pcSPS->getLayerId() == 0 ) 763 #endif 720 764 { 721 765 #endif … … 727 771 WRITE_UVLC( pcSPS->getBitsForPOC()-4, "log2_max_pic_order_cnt_lsb_minus4" ); 728 772 #if H_MV 773 #if H_MV_HLS10_MULTILAYERSPS 774 if ( !pcSPS->getMultiLayerExtSpsFlag()) 775 #else 729 776 if ( pcSPS->getLayerId() == 0 ) 777 #endif 730 778 { 731 779 #endif … … 758 806 { 759 807 #if H_MV 808 #if H_MV_HLS10_MULTILAYERSPS 809 if ( pcSPS->getMultiLayerExtSpsFlag() ) 810 #else 760 811 if ( pcSPS->getLayerId() > 0 ) 812 #endif 761 813 { 762 814 WRITE_FLAG( pcSPS->getSpsInferScalingListFlag( ) ? 1 : 0 , "sps_infer_scaling_list_flag" ); … … 865 917 { 866 918 WRITE_FLAG( pcSPS->getInterViewMvVertConstraintFlag() ? 1 : 0, "inter_view_mv_vert_constraint_flag" ); 867 919 #if !H_MV_HLS10_PPS 868 920 WRITE_UVLC( pcSPS->getNumScaledRefLayerOffsets( ), "num_scaled_ref_layer_offsets" ); 869 921 … … 880 932 WRITE_FLAG( 0, "sps_multilayer_ext_reserved_zero_flag[ j ]" ); 881 933 } 882 } 934 #endif 935 } 936 937 938 #if H_MV_HLS10_PPS 939 Void TEncCavlc::codePPSMultilayerExtension(TComPPS* pcPPS) 940 { 941 WRITE_FLAG( pcPPS->getPocResetInfoPresentFlag( ) ? 1 : 0 , "poc_reset_info_present_flag" ); 942 WRITE_FLAG( pcPPS->getPpsInferScalingListFlag( ) ? 1 : 0 , "pps_infer_scaling_list_flag" ); 943 WRITE_CODE( pcPPS->getPpsScalingListRefLayerId( ), 6, "pps_scaling_list_ref_layer_id" ); 944 WRITE_UVLC( 0, "num_ref_loc_offsets" ); 945 } 946 #endif 947 883 948 #endif 884 949 … … 897 962 #endif 898 963 } 899 #endif 964 965 966 #endif 967 968 969 900 970 901 971 Void TEncCavlc::codeVPS( TComVPS* pcVPS ) … … 904 974 #if H_MV 905 975 WRITE_FLAG( pcVPS->getVpsBaseLayerInternalFlag( ) ? 1 : 0 , "vps_base_layer_internal_flag" ); 976 #if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL 977 WRITE_FLAG( pcVPS->getVpsBaseLayerAvailableFlag( ) ? 1 : 0 , "vps_base_layer_available_flag" ); 978 #else // H_MV_HLS10_GEN 906 979 WRITE_FLAG( 1 , "vps_reserved_one_bit" ); 980 #endif // H_MV_HLS10_GEN 907 981 #else 908 982 WRITE_CODE( 3, 2, "vps_reserved_three_2bits" ); … … 930 1004 } 931 1005 } 932 933 1006 assert( pcVPS->getNumHrdParameters() <= MAX_VPS_NUM_HRD_PARAMETERS ); 934 1007 #if H_MV 935 1008 assert( pcVPS->getVpsMaxLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 ); 936 1009 WRITE_CODE( pcVPS->getVpsMaxLayerId(), 6, "vps_max_layer_id" ); 937 1010 #if H_MV_HLS10_GEN_FIX 1011 WRITE_UVLC( pcVPS->getVpsNumLayerSetsMinus1(), "vps_num_layer_sets_minus1" ); 1012 #else 938 1013 WRITE_UVLC( pcVPS->getVpsNumLayerSetsMinus1(), "vps_max_num_layer_sets_minus1" ); 1014 #endif 939 1015 for( UInt opsIdx = 1; opsIdx <= pcVPS->getVpsNumLayerSetsMinus1(); opsIdx ++ ) 940 1016 { … … 1012 1088 #if H_MV 1013 1089 Void TEncCavlc::codeVPSExtension( TComVPS *pcVPS ) 1014 { 1090 { 1091 #if H_MV_HLS10_PTL 1092 if( pcVPS->getMaxLayersMinus1() > 0 && pcVPS->getVpsBaseLayerInternalFlag() ) 1093 { 1094 codePTL( pcVPS->getPTL( 1 ),0, pcVPS->getMaxSubLayersMinus1() ); 1095 } 1096 #endif 1097 1015 1098 WRITE_FLAG( pcVPS->getSplittingFlag() ? 1 : 0, "splitting_flag" ); 1016 1099 … … 1084 1167 } 1085 1168 1169 #if H_MV_HLS10_ADD_LAYERSETS 1170 if ( pcVPS->getNumIndependentLayers() > 1 ) 1171 { 1172 WRITE_UVLC( pcVPS->getNumAddLayerSets( ), "num_add_layer_sets" ); 1173 } 1174 for (Int i = 0; i < pcVPS->getNumAddLayerSets(); i++) 1175 { 1176 for (Int j = 1; j < pcVPS->getNumIndependentLayers(); j++) 1177 { 1178 WRITE_CODE( pcVPS->getHighestLayerIdxPlus1( i, j ), pcVPS->getHighestLayerIdxPlus1Len( j ) , "highest_layer_idx_plus1" ); 1179 } 1180 1181 } 1182 #endif 1183 1184 1086 1185 WRITE_FLAG( pcVPS->getVpsSubLayersMaxMinus1PresentFlag( ) ? 1 : 0 , "vps_sub_layers_max_minus1_present_flag" ); 1087 1186 if ( pcVPS->getVpsSubLayersMaxMinus1PresentFlag() ) … … 1119 1218 WRITE_UVLC( pcVPS->getVpsNumProfileTierLevelMinus1( ), "vps_num_profile_tier_level_minus1" ); 1120 1219 1220 #if H_MV_HLS10_PTL 1221 Int offsetVal = ( pcVPS->getMaxLayersMinus1() > 0 && pcVPS->getVpsBaseLayerInternalFlag() ) ? 2 : 1; 1222 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 2 : 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ ) 1223 { 1224 WRITE_FLAG( pcVPS->getVpsProfilePresentFlag( i ) ? 1 : 0, "vps_profile_present_flag[i]" ); 1225 codePTL( pcVPS->getPTL( offsetVal ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers() - 1 ); 1226 offsetVal++; 1227 } 1228 #else 1121 1229 for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ ) 1122 1230 { … … 1124 1232 codePTL( pcVPS->getPTL( i ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers() - 1 ); 1125 1233 } 1126 1234 #endif 1235 1236 #if !H_MV_HLS10_ADD_LAYERSETS 1127 1237 if ( pcVPS->getNumIndependentLayers() > 1 ) 1128 1238 { … … 1136 1246 } 1137 1247 } 1248 #endif 1249 1138 1250 if (pcVPS->getNumLayerSets() > 1) 1139 1251 { … … 1146 1258 1147 1259 1260 #if H_MV_HLS10_PTL_FIX 1261 if (pcVPS->getVpsBaseLayerInternalFlag() ) 1262 { 1263 assert( pcVPS->getProfileTierLevelIdx(0,0) == pcVPS->inferProfileTierLevelIdx(0,0) ); 1264 } 1265 #endif 1148 1266 1149 1267 … … 1152 1270 if( i >= pcVPS->getNumLayerSets( ) ) 1153 1271 { 1272 #if !VPS_MISC_UPDATES 1154 1273 WRITE_UVLC( pcVPS->getLayerSetIdxForOlsMinus1( i ), "layer_set_idx_for_ols_minus1[i]" ); 1274 #else 1275 WRITE_CODE( pcVPS->getLayerSetIdxForOlsMinus1( i ), pcVPS->getLayerSetIdxForOlsMinus1Len( i ) , "layer_set_idx_for_ols_minus1[i]" ); 1276 #endif 1155 1277 } 1156 1278 … … 1169 1291 } 1170 1292 } 1171 1172 1293 1294 #if H_MV_HLS10_PTL 1295 for ( Int j = 0; j < pcVPS->getNumLayersInIdList( pcVPS->olsIdxToLsIdx(i)); j++ ) 1296 { 1297 if (pcVPS->getNecessaryLayerFlag( i, j ) && pcVPS->getVpsNumProfileTierLevelMinus1() > 0 ) 1298 { 1299 WRITE_CODE( pcVPS->getProfileTierLevelIdx( i, j ), pcVPS->getProfileTierLevelIdxLen() ,"profile_tier_level_idx[ i ][ j ]" ); 1300 } 1301 #if H_MV_HLS10_PTL_FIX 1302 if (pcVPS->getNecessaryLayerFlag( i, j ) && pcVPS->getVpsNumProfileTierLevelMinus1() == 0 ) 1303 { 1304 assert( pcVPS->getProfileTierLevelIdx( i , j ) == pcVPS->inferProfileTierLevelIdx( i, j ) ); 1305 } 1306 #endif 1307 1308 } 1309 #else 1173 1310 if ( pcVPS->getProfileLevelTierIdxLen() > 0 ) 1174 1311 { 1175 1312 WRITE_CODE( pcVPS->getProfileLevelTierIdx( i ), pcVPS->getProfileLevelTierIdxLen() ,"profile_level_tier_idx[ i ]" ); 1176 1313 } 1314 #endif 1177 1315 if( pcVPS->getNumOutputLayersInOutputLayerSet( i ) == 1 && pcVPS->getNumDirectRefLayers( pcVPS->getOlsHighestOutputLayerId( i ) ) > 0 ) 1178 1316 { … … 1224 1362 } 1225 1363 1364 #if !H_MV_HLS10_GEN_FIX 1226 1365 WRITE_FLAG( 0, "vps_reserved_zero_flag" ); 1366 #endif 1227 1367 codeDpbSize( pcVPS ); 1228 1368 … … 1301 1441 for( Int k = 0; k < vps->getNumLayersInIdList( currLsIdx ); k++ ) 1302 1442 { 1443 #if H_MV_HLS10_DBP_SIZE 1444 if ( vps->getNecessaryLayerFlag( i, k ) && ( vps->getVpsBaseLayerInternalFlag() || ( vps->getLayerSetLayerIdList(vps->olsIdxToLsIdx(i),k) != 0 ) )) 1445 { 1446 WRITE_UVLC( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ), "max_vps_dec_pic_buffering_minus1" ); 1447 } 1448 else 1449 { 1450 if ( vps->getNecessaryLayerFlag( i, k ) && ( j == 0 ) && ( k == 0 ) ) 1451 { 1452 assert( dpbSize->getMaxVpsDecPicBufferingMinus1(i ,k, j ) == 0 ); 1453 } 1454 } 1455 #else 1303 1456 WRITE_UVLC( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ), "max_vps_dec_pic_buffering_minus1" ); 1457 #endif 1304 1458 } 1305 1459 WRITE_UVLC( dpbSize->getMaxVpsNumReorderPics( i, j ), "max_vps_num_reorder_pics" ); … … 1312 1466 for( Int k = 0; k < vps->getNumLayersInIdList( vps->olsIdxToLsIdx( i ) ); k++ ) 1313 1467 { 1314 assert( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) == dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) ); 1468 #if H_MV_HLS10_DBP_SIZE 1469 if ( vps->getNecessaryLayerFlag(i, k ) ) 1470 { 1471 #endif 1472 assert( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) == dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) ); 1473 #if H_MV_HLS10_DBP_SIZE 1474 } 1475 #endif 1315 1476 } 1316 1477 assert( dpbSize->getMaxVpsNumReorderPics ( i, j ) == dpbSize->getMaxVpsNumReorderPics ( i, j - 1 ) ); … … 1347 1508 pcRepFormat->inferChromaAndBitDepth(pcPrevRepFormat, true ); 1348 1509 } 1510 #if H_MV_HLS10_GEN_VSP_CONF_WIN 1511 WRITE_FLAG( pcRepFormat->getConformanceWindowVpsFlag( ) ? 1 : 0 , "conformance_window_vps_flag" ); 1512 if ( pcRepFormat->getConformanceWindowVpsFlag() ) 1513 { 1514 WRITE_UVLC( pcRepFormat->getConfWinVpsLeftOffset( ), "conf_win_vps_left_offset" ); 1515 WRITE_UVLC( pcRepFormat->getConfWinVpsRightOffset( ), "conf_win_vps_right_offset" ); 1516 WRITE_UVLC( pcRepFormat->getConfWinVpsTopOffset( ), "conf_win_vps_top_offset" ); 1517 WRITE_UVLC( pcRepFormat->getConfWinVpsBottomOffset( ), "conf_win_vps_bottom_offset" ); 1518 } 1519 #endif 1349 1520 } 1350 1521 … … 1371 1542 if( pcVPSVUI->getBitRatePresentVpsFlag( ) || pcVPSVUI->getPicRatePresentVpsFlag( ) ) 1372 1543 { 1544 #if H_MV_HLS10_VPS_VUI 1545 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i < pcVPS->getNumLayerSets(); i++ ) 1546 #else 1373 1547 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <= pcVPS->getVpsNumLayerSetsMinus1(); i++ ) 1548 #endif 1374 1549 { 1375 1550 for( Int j = 0; j <= pcVPS->getMaxSubLayersInLayerSetMinus1( i ); j++ ) … … 1404 1579 else 1405 1580 { 1581 #if H_MV_HLS10_VPS_VUI 1582 assert( pcVPSVUI->getVpsNumVideoSignalInfoMinus1() == pcVPS->getMaxLayersMinus1() - ( pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1) ); 1583 #else 1406 1584 pcVPSVUI->setVpsNumVideoSignalInfoMinus1( pcVPS->getMaxLayersMinus1() ); 1585 #endif 1407 1586 } 1408 1587 … … 1417 1596 if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() && pcVPSVUI->getVpsNumVideoSignalInfoMinus1() > 0 ) 1418 1597 { 1598 #if I0045_VPS_VUI_VST_PARAMS 1599 for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <= pcVPS->getMaxLayersMinus1(); i++ ) 1600 { 1601 WRITE_CODE( pcVPSVUI->getVpsVideoSignalInfoIdx( i ), 4, "vps_video_signal_info_idx" ); 1602 } 1603 #else 1419 1604 for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ ) 1420 1605 { … … 1429 1614 assert( pcVPSVUI->getVpsVideoSignalInfoIdx( i ) == ( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() ? 0 : i ) ); 1430 1615 } 1616 #endif 1431 1617 } 1432 1618 WRITE_FLAG( pcVPSVUI->getTilesNotInUseFlag( ) ? 1 : 0 , "tiles_not_in_use_flag" ); … … 1445 1631 for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ) ; j++ ) 1446 1632 { 1633 #if H_MV_HLS10_REF_PRED_LAYERS 1634 Int layerIdx = pcVPS->getLayerIdInVps(pcVPS->getIdRefLayer(pcVPS->getLayerIdInNuh( i ) , j )); 1635 #else 1447 1636 Int layerIdx = pcVPS->getLayerIdInVps(pcVPS->getRefLayerId(pcVPS->getLayerIdInNuh( i ) , j )); 1637 #endif 1448 1638 if( pcVPSVUI->getTilesInUseFlag( i ) && pcVPSVUI->getTilesInUseFlag( layerIdx ) ) 1449 1639 { … … 1463 1653 } 1464 1654 } 1655 #if H_MV_HLS10_VPS_VUI 1656 WRITE_FLAG( pcVPSVUI->getSingleLayerForNonIrapFlag( ) ? 1 : 0 , "single_layer_for_non_irap_flag" ); 1657 WRITE_FLAG( pcVPSVUI->getHigherLayerIrapSkipFlag( ) ? 1 : 0 , "higher_layer_irap_skip_flag" ); 1658 #else 1465 1659 WRITE_CODE( 0, 3, "vps_vui_reserved_zero_3bits" ); 1660 #endif 1466 1661 WRITE_FLAG( pcVPSVUI->getIlpRestrictedRefLayersFlag( ) ? 1 : 0 , "ilp_restricted_ref_layers_flag" ); 1467 1662 … … 1472 1667 for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ); j++ ) 1473 1668 { 1669 #if H_MV_HLS10_REF_PRED_LAYERS 1670 if( pcVPS->getVpsBaseLayerInternalFlag() || pcVPS->getIdRefLayer( pcVPS->getLayerIdInNuh( i ), j ) > 0 ) 1671 #else 1474 1672 if( pcVPS->getVpsBaseLayerInternalFlag() || pcVPS->getRefLayerId( pcVPS->getLayerIdInNuh( i ), j ) > 0 ) 1673 #endif 1475 1674 { 1476 1675 WRITE_UVLC( pcVPSVUI->getMinSpatialSegmentOffsetPlus1( i, j ), "min_spatial_segment_offset_plus1" ); … … 1514 1713 1515 1714 assert ( vpsVuiBspHrdP ); 1516 1517 1715 1716 #if H_MV_HLS10_VPS_VUI_BSP 1717 WRITE_UVLC( vpsVuiBspHrdP->getVpsNumAddHrdParams( ), "vps_num_add_hrd_params" ); 1718 1719 for( Int i = pcVPS->getNumHrdParameters(); i < pcVPS->getNumHrdParameters() + vpsVuiBspHrdP->getVpsNumAddHrdParams(); i++ ) 1720 { 1721 if( i > 0 ) 1722 { 1723 WRITE_FLAG( vpsVuiBspHrdP->getCprmsAddPresentFlag( i ) ? 1 : 0 , "cprms_add_present_flag" ); 1724 } 1725 WRITE_UVLC( vpsVuiBspHrdP->getNumSubLayerHrdMinus1( i ), "num_sub_layer_hrd_minus1" ); 1726 TComHRD* hrdParameters = vpsVuiBspHrdP->getHrdParametermeters( i ); 1727 codeHrdParameters( hrdParameters, vpsVuiBspHrdP->getCprmsAddPresentFlag( i ), vpsVuiBspHrdP->getNumSubLayerHrdMinus1( i ) ); 1728 } 1729 1730 for( Int h = 1; h < pcVPS->getNumOutputLayerSets(); h++ ) 1731 { 1732 WRITE_UVLC( vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ), "num_signalled_partitioning_schemes" ); 1733 1734 for( Int j = 1; j < vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ) + 1; j++ ) 1735 { 1736 WRITE_UVLC( vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ), "num_partitions_in_scheme_minus1" ); 1737 for( Int k = 0; k <= vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ); k++ ) 1738 { 1739 for( Int r = 0; r < pcVPS->getNumLayersInIdList(pcVPS->olsIdxToLsIdx( h ) ) ; r++ ) 1740 { 1741 WRITE_FLAG( vpsVuiBspHrdP->getLayerIncludedInPartitionFlag( h, j, k, r ) ? 1 : 0 , "layer_included_in_partition_flag" ); 1742 } 1743 } 1744 } 1745 for( Int i = 0; i < vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ) + 1; i++ ) 1746 { 1747 for( Int t = 0; t <= pcVPS->getMaxSubLayersInLayerSetMinus1( pcVPS->olsIdxToLsIdx( h ) ); t++ ) 1748 { 1749 WRITE_UVLC( vpsVuiBspHrdP->getNumBspSchedulesMinus1( h, i, t ), "num_bsp_schedules_minus1" ); 1750 for( Int j = 0; j <= vpsVuiBspHrdP->getNumBspSchedulesMinus1( h, i, t ); j++ ) 1751 { 1752 for( Int k = 0; k <= vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ); k++ ) 1753 { 1754 WRITE_CODE( vpsVuiBspHrdP->getBspHrdIdx( h, i, t, j, k ), vpsVuiBspHrdP->getBspHrdIdxLen( pcVPS ), "bsp_hrd_idx" ); 1755 WRITE_UVLC( vpsVuiBspHrdP->getBspSchedIdx( h, i, t, j, k ), "bsp_sched_idx" ); 1756 } 1757 } 1758 } 1759 } 1760 } 1761 1762 #else // H_MV_HLS10_GEN 1518 1763 WRITE_UVLC( vpsVuiBspHrdP->getVpsNumBspHrdParametersMinus1( ), "vps_num_bsp_hrd_parameters_minus1" ); 1519 1764 for( Int i = 0; i <= vpsVuiBspHrdP->getVpsNumBspHrdParametersMinus1( ); i++ ) … … 1552 1797 } 1553 1798 } 1554 } 1799 } 1800 #endif 1555 1801 } 1556 1557 1802 #endif 1558 1803 … … 1733 1978 esb++; 1734 1979 WRITE_FLAG( pcSlice->getDiscardableFlag( ) ? 1 : 0 , "discardable_flag" ); 1980 #if NON_REF_NAL_TYPE_DISCARDABLE 1981 if (pcSlice->getDiscardableFlag( )) 1982 { 1983 assert(pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_TRAIL_R && 1984 pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_TSA_R && 1985 pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_STSA_R && 1986 pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_RADL_R && 1987 pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_RASL_R); 1988 } 1989 #endif 1735 1990 } 1736 1991 … … 1893 2148 if (pcSlice->getSPS()->getTMVPFlagsPresent()) 1894 2149 { 2150 #if I0044_SLICE_TMVP 2151 WRITE_FLAG( pcSlice->getEnableTMVPFlag() ? 1 : 0, "slice_temporal_mvp_enabled_flag" ); 2152 #else 1895 2153 WRITE_FLAG( pcSlice->getEnableTMVPFlag() ? 1 : 0, "slice_temporal_mvp_enable_flag" ); 2154 #endif 1896 2155 } 1897 2156 } … … 2126 2385 } 2127 2386 #if H_3D 2387 #if LGE_FCO_I0116 2388 if( pcSlice->getVPS()->hasCamParInSliceHeader( pcSlice->getViewIndex() ) && pcSlice->getIsDepth() ) 2389 #else 2128 2390 if( pcSlice->getVPS()->hasCamParInSliceHeader( pcSlice->getViewIndex() ) && !pcSlice->getIsDepth() ) 2391 #endif 2129 2392 { 2130 2393 for( UInt uiId = 0; uiId < pcSlice->getViewIndex(); uiId++ ) … … 2312 2575 WRITE_FLAG(ptl->getFrameOnlyConstraintFlag(), "general_frame_only_constraint_flag"); 2313 2576 2577 #if H_MV_HLS10_PTL 2578 #if H_MV_HLS10_PTL_INFER_FIX 2579 if( ptl->getV2ConstraintsPresentFlag() ) 2580 #else 2581 if( ptl->getProfileIdc( ) == 4 || ptl->getProfileCompatibilityFlag( 4 ) || 2582 ptl->getProfileIdc( ) == 5 || ptl->getProfileCompatibilityFlag( 5 ) || 2583 ptl->getProfileIdc( ) == 6 || ptl->getProfileCompatibilityFlag( 6 ) || 2584 ptl->getProfileIdc( ) == 7 || ptl->getProfileCompatibilityFlag( 7 ) ) 2585 #endif 2586 { 2587 WRITE_FLAG( ptl->getMax12bitConstraintFlag( ) ? 1 : 0 , "max_12bit_constraint_flag" ); 2588 WRITE_FLAG( ptl->getMax10bitConstraintFlag( ) ? 1 : 0 , "max_10bit_constraint_flag" ); 2589 WRITE_FLAG( ptl->getMax8bitConstraintFlag( ) ? 1 : 0 , "max_8bit_constraint_flag" ); 2590 WRITE_FLAG( ptl->getMax422chromaConstraintFlag( ) ? 1 : 0 , "max_422chroma_constraint_flag" ); 2591 WRITE_FLAG( ptl->getMax420chromaConstraintFlag( ) ? 1 : 0 , "max_420chroma_constraint_flag" ); 2592 WRITE_FLAG( ptl->getMaxMonochromeConstraintFlag( ) ? 1 : 0 , "max_monochrome_constraint_flag" ); 2593 WRITE_FLAG( ptl->getIntraConstraintFlag( ) ? 1 : 0 , "intra_constraint_flag" ); 2594 WRITE_FLAG( ptl->getOnePictureOnlyConstraintFlag( ) ? 1 : 0 , "one_picture_only_constraint_flag" ); 2595 WRITE_FLAG( ptl->getLowerBitRateConstraintFlag( ) ? 1 : 0 , "lower_bit_rate_constraint_flag" ); 2596 WRITE_CODE( 0, 16, "XXX_reserved_zero_34bits[0..15]"); 2597 WRITE_CODE( 0, 16, "XXX_reserved_zero_34bits[16..31]"); 2598 WRITE_CODE( 0, 2 , "XXX_reserved_zero_34bits[32..33]"); 2599 } 2600 else 2601 { 2602 WRITE_CODE( 0, 16, "XXX_reserved_zero_43bits[0..15]"); 2603 WRITE_CODE( 0, 16, "XXX_reserved_zero_43bits[16..31]"); 2604 WRITE_CODE( 0, 11, "XXX_reserved_zero_43bits[32..42]"); 2605 } 2606 #if H_MV_HLS10_PTL_INFER_FIX 2607 if( ptl->getInbldPresentFlag() ) 2608 #else 2609 if( ( ptl->getProfileIdc() >= 1 && ptl->getProfileIdc() <= 5 ) || 2610 ptl->getProfileCompatibilityFlag( 1 ) || ptl->getProfileCompatibilityFlag( 2 ) || 2611 ptl->getProfileCompatibilityFlag( 3 ) || ptl->getProfileCompatibilityFlag( 4 ) || 2612 ptl->getProfileCompatibilityFlag( 5 ) ) 2613 #endif 2614 { 2615 WRITE_FLAG( ptl->getInbldFlag( ) ? 1 : 0 , "inbld_flag" ); 2616 } 2617 else 2618 { 2619 WRITE_FLAG(0, "reserved_zero_bit"); 2620 } 2621 #else 2314 2622 WRITE_CODE(0 , 16, "XXX_reserved_zero_44bits[0..15]"); 2315 2623 WRITE_CODE(0 , 16, "XXX_reserved_zero_44bits[16..31]"); 2316 2624 WRITE_CODE(0 , 12, "XXX_reserved_zero_44bits[32..43]"); 2317 } 2625 #endif 2626 } 2318 2627 2319 2628 /** -
trunk/source/Lib/TLibEncoder/TEncCavlc.h
r1039 r1066 107 107 Void codePPS ( TComPPS* pcPPS ); 108 108 109 #if H_MV_HLS10_PPS 110 #if H_MV 111 Void codePPSMultilayerExtension( TComPPS* pcPPS ); 112 #endif 113 #endif 114 109 115 #if H_3D 110 116 Void codePPSExtension ( TComPPS* pcPPS ); -
trunk/source/Lib/TLibEncoder/TEncCu.cpp
r1039 r1066 538 538 #if MTK_I0099_VPS_EX2 539 539 #if MTK_I0099_FIX 540 #if LGE_FCO_I0116 541 if(depthMapDetect && !bIntraSliceDetect && !rapPic && ( m_pcEncCfg->getUseQTL() || bLimQtPredFalg ) && pcTexture->getReconMark()) 542 #else 540 543 if(depthMapDetect && !bIntraSliceDetect && !rapPic && ( m_pcEncCfg->getUseQTL() || bLimQtPredFalg )) 544 #endif 541 545 #else 542 546 if(depthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFalg) … … 2588 2592 // fetch virtual depth block 2589 2593 UInt uiDepthStride = 0; 2594 #if LGE_FCO_I0116 2595 Pel* pDepthPels = rpcTempCU->getVirtualDepthBlock(rpcTempCU->getZorderIdxInCU(), uiWidth, uiHeight, uiDepthStride); 2596 #else 2590 2597 Pel* pDepthPels = rpcTempCU->getVirtualDepthBlock(0, uiWidth, uiHeight, uiDepthStride); 2598 #endif 2591 2599 AOF( pDepthPels != NULL ); 2592 2600 AOF( uiDepthStride != 0 ); -
trunk/source/Lib/TLibEncoder/TEncEntropy.cpp
r1039 r1066 185 185 else 186 186 { 187 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 188 Int ICEnableCandidate = pcCU->getSlice()->getICEnableCandidate(pcCU->getSlice()->getDepth()); 189 Int ICEnableNum = pcCU->getSlice()->getICEnableNum(pcCU->getSlice()->getDepth()); 190 ICEnableCandidate++; 191 if(pcCU->getICFlag(uiAbsPartIdx)) 192 { 193 ICEnableNum++; 194 } 195 pcCU->getSlice()->setICEnableCandidate(pcCU->getSlice()->getDepth(), ICEnableCandidate); 196 pcCU->getSlice()->setICEnableNum(pcCU->getSlice()->getDepth(), ICEnableNum); 197 #else 187 198 g_aICEnableCANDIDATE[pcCU->getSlice()->getDepth()]++; 188 199 if(pcCU->getICFlag(uiAbsPartIdx)) … … 190 201 g_aICEnableNUM[pcCU->getSlice()->getDepth()]++; 191 202 } 203 #endif 192 204 } 193 205 if( pcCU->isICFlagRequired( uiAbsPartIdx ) ) -
trunk/source/Lib/TLibEncoder/TEncGOP.cpp
r1039 r1066 160 160 #endif 161 161 #endif 162 162 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 163 m_aICEnableCandidate = pcTEncTop->getICEnableCandidate(); 164 m_aICEnableNum = pcTEncTop->getICEnableNum(); 165 #endif 163 166 #if KWU_FIX_URQ 164 167 m_pcRateCtrl = pcTEncTop->getRateCtrl(); … … 968 971 #endif 969 972 #endif 973 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 974 pcSlice->setICEnableCandidate( m_aICEnableCandidate ); 975 pcSlice->setICEnableNum( m_aICEnableNum ); 976 #endif 970 977 // Slice info. refinement 971 978 #if H_MV -
trunk/source/Lib/TLibEncoder/TEncGOP.h
r964 r1066 116 116 #endif 117 117 #endif 118 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 119 Int *m_aICEnableCandidate; 120 Int *m_aICEnableNum; 121 #endif 118 122 //--Adaptive Loop filter 119 123 TEncSampleAdaptiveOffset* m_pcSAO; -
trunk/source/Lib/TLibEncoder/TEncSbac.cpp
r1039 r1066 732 732 UInt uiTexturePart = eSize; 733 733 #if MTK_I0099_VPS_EX2 734 #if LGE_FCO_I0116 735 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && bLimQtPredFlag && pcTexture->getReconMark()) 736 #else 734 737 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && bLimQtPredFlag ) 738 #endif 735 739 #else 736 740 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && sps->getUseQTL() && sps->getUsePC() ) … … 1106 1110 1107 1111 #if MTK_I0099_VPS_EX2 1112 #if LGE_FCO_I0116 1113 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && bLimQtPredFlag && pcTexture->getReconMark() ) 1114 #else 1108 1115 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && bLimQtPredFlag ) 1116 #endif 1109 1117 #else 1110 1118 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && sps->getUseQTL() && sps->getUsePC()) -
trunk/source/Lib/TLibEncoder/TEncSearch.cpp
r1039 r1066 3083 3083 Double dLambda; 3084 3084 if ( m_pcRdCost->getUseLambdaScaleVSO() ) 3085 { 3085 3086 dLambda = m_pcRdCost->getUseRenModel() ? m_pcRdCost->getLambdaVSO() : m_pcRdCost->getSqrtLambdaVSO(); 3087 } 3086 3088 else 3089 { 3087 3090 dLambda = m_pcRdCost->getSqrtLambda(); 3088 3089 Double cost = (Double)uiSad + (Double)iModeBits * m_pcRdCost->getSqrtLambda(); 3091 } 3092 3093 Double cost = (Double)uiSad + (Double)iModeBits * dLambda; 3090 3094 #else 3091 3095 Double cost = (Double)uiSad + (Double)iModeBits * m_pcRdCost->getSqrtLambda(); … … 3212 3216 #if H_3D_FCO 3213 3217 TComPic* picTexture = pcCU->getSlice()->getIvPic(false, pcCU->getSlice()->getViewIndex() ); 3218 #if LGE_FCO_I0116 3219 if ( !picTexture->getReconMark() && (DMM4_IDX == dmmType ) ) 3220 #else 3214 3221 if ( !picTexture->getReconMark() && (DMM3_IDX == dmmType || DMM4_IDX == dmmType ) ) 3222 #endif 3215 3223 { 3216 3224 continue; -
trunk/source/Lib/TLibEncoder/TEncTop.cpp
r1039 r1066 72 72 ContextModel::buildNextStateTable(); 73 73 #endif 74 #if H_MV_HLS10_GEN_FIX 75 #if H_MV 76 m_iNumSubstreams = 0; 77 #endif 78 #endif 74 79 75 80 m_pcSbacCoders = NULL; … … 84 89 m_ivPicLists = NULL; 85 90 #endif 91 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 92 m_aICEnableCandidate = NULL; 93 m_aICEnableNum = NULL; 94 #endif 86 95 } 87 96 … … 227 236 for (Int iCIIdx = 0; iCIIdx < CI_NUM; iCIIdx ++ ) 228 237 { 238 #if H_MV_HLS10_GEN_FIX 239 #if H_MV 240 xDelete( false, m_pppcRDSbacCoder, iDepth, iCIIdx); 241 xDelete( false, m_pppcBinCoderCABAC, iDepth, iCIIdx); 242 #else 229 243 delete m_pppcRDSbacCoder[iDepth][iCIIdx]; 230 244 delete m_pppcBinCoderCABAC[iDepth][iCIIdx]; 245 #endif 246 #endif 231 247 } 232 248 } … … 234 250 for ( iDepth = 0; iDepth < g_uiMaxCUDepth+1; iDepth++ ) 235 251 { 252 #if H_MV_HLS10_GEN_FIX 253 #if H_MV 254 xDelete( true, m_pppcRDSbacCoder , iDepth); 255 xDelete( true, m_pppcBinCoderCABAC, iDepth); 256 #else 236 257 delete [] m_pppcRDSbacCoder[iDepth]; 237 258 delete [] m_pppcBinCoderCABAC[iDepth]; 238 } 239 259 #endif 260 #endif 261 } 262 263 #if H_MV_HLS10_GEN_FIX 264 #if H_MV 265 xDelete( true, m_pppcRDSbacCoder ); 266 xDelete( true, m_pppcBinCoderCABAC); 267 #else 240 268 delete [] m_pppcRDSbacCoder; 241 269 delete [] m_pppcBinCoderCABAC; 242 270 #endif 271 #endif 243 272 for ( UInt ui = 0; ui < m_iNumSubstreams; ui++ ) 244 273 { … … 247 276 for (Int iCIIdx = 0; iCIIdx < CI_NUM; iCIIdx ++ ) 248 277 { 278 #if H_MV_HLS10_GEN_FIX 279 #if H_MV 280 xDelete(false, m_ppppcRDSbacCoders ,ui, iDepth, iCIIdx); 281 xDelete(false, m_ppppcBinCodersCABAC,ui, iDepth, iCIIdx); 282 #else 249 283 delete m_ppppcRDSbacCoders [ui][iDepth][iCIIdx]; 250 284 delete m_ppppcBinCodersCABAC[ui][iDepth][iCIIdx]; 285 #endif 286 #endif 251 287 } 252 288 } … … 254 290 for ( iDepth = 0; iDepth < g_uiMaxCUDepth+1; iDepth++ ) 255 291 { 292 #if H_MV_HLS10_GEN_FIX 293 #if H_MV 294 xDelete(true, m_ppppcRDSbacCoders ,ui, iDepth); 295 xDelete(true, m_ppppcBinCodersCABAC,ui, iDepth); 296 #else 256 297 delete [] m_ppppcRDSbacCoders [ui][iDepth]; 257 298 delete [] m_ppppcBinCodersCABAC[ui][iDepth]; 258 } 299 #endif 300 #endif 301 } 302 303 304 #if H_MV_HLS10_GEN_FIX 305 #if H_MV 306 xDelete(true, m_ppppcRDSbacCoders, ui); 307 xDelete(true, m_ppppcBinCodersCABAC, ui); 308 #else 259 309 delete[] m_ppppcRDSbacCoders [ui]; 260 310 delete[] m_ppppcBinCodersCABAC[ui]; 261 } 311 #endif 312 #endif 313 } 314 #if H_MV_HLS10_GEN_FIX 315 #if H_MV 316 xDelete(true, m_ppppcRDSbacCoders ) ; 317 xDelete(true, m_ppppcBinCodersCABAC); 318 xDelete(true, m_pcSbacCoders); 319 xDelete(true, m_pcBinCoderCABACs); 320 xDelete(true, m_pcRDGoOnSbacCoders); 321 xDelete(true, m_pcRDGoOnBinCodersCABAC); 322 xDelete(true, m_pcBitCounters); 323 xDelete(true, m_pcRdCosts); 324 #else 262 325 delete[] m_ppppcRDSbacCoders; 263 326 delete[] m_ppppcBinCodersCABAC; … … 268 331 delete[] m_pcBitCounters; 269 332 delete[] m_pcRdCosts; 270 333 #endif 334 #endif 335 271 336 #if !H_MV 272 337 // destroy ROM … … 305 370 306 371 xInitPPSforTiles(); 307 372 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 373 m_aICEnableCandidate = new Int[ 10 ]; 374 m_aICEnableNum = new Int[ 10 ]; 375 376 for(int i=0;i<10;i++) 377 { 378 m_aICEnableCandidate[i]=0; 379 m_aICEnableNum[i]=0; 380 } 381 #endif 308 382 // initialize processing unit classes 309 383 m_cGOPEncoder. init( this ); … … 695 769 #if H_MV 696 770 m_cSPS.setUpdateRepFormatFlag ( false ); 771 #if H_MV_HLS10_MULTILAYERSPS 772 Bool multiLayerExtensionFlag = ( getLayerId() > 0 ) && ( m_cVPS->getNumRefLayers( getLayerId() ) > 0 ); 773 774 m_cSPS.setSpsExtOrMaxSubLayersMinus1( multiLayerExtensionFlag ? 7 : m_maxTempLayer - 1 ); 775 if ( multiLayerExtensionFlag ) 776 { 777 m_cSPS.setSpsInferScalingListFlag ( true ); 778 m_cSPS.setSpsScalingListRefLayerId( m_cVPS->getIdRefLayer( getLayerId(), 0 ) ); 779 } 780 #else 697 781 m_cSPS.setSpsInferScalingListFlag ( m_layerId > 0 && m_cVPS->getInDirectDependencyFlag( getLayerIdInVps(), 0 ) ); 698 782 m_cSPS.setSpsScalingListRefLayerId ( 0 ); 699 m_cSPS.setSpsExtensionPresentFlag ( true ); 783 #endif 784 m_cSPS.setSpsExtensionPresentFlag ( true ); 700 785 m_cSPS.setSpsMultilayerExtensionFlag ( true ); 701 786 #if H_3D … … 778 863 for( Int is = 0; is < targetDecLayerIdList.size(); is++ ) 779 864 { 865 #if H_MV_HLS10_ADD_LAYERSETS 866 if ( m_cVPS->getNecessaryLayerFlag( ols, is ) ) 867 { 868 m_cSPS.inferSpsMaxDecPicBufferingMinus1( m_cVPS, ols, targetDecLayerIdList[is], true ); 869 } 870 #else 780 871 m_cSPS.inferSpsMaxDecPicBufferingMinus1( m_cVPS, ols, targetDecLayerIdList[is], true ); 781 } 782 } 783 872 #endif 873 } 874 } 875 #if !H_MV_HLS10_ADD_LAYERSETS 784 876 m_cVPS->inferDbpSizeLayerSetZero( &m_cSPS, true ); 877 #endif 785 878 #endif 786 879 m_cSPS.setPCMBitDepthLuma (g_uiPCMBitDepthLuma); -
trunk/source/Lib/TLibEncoder/TEncTop.h
r872 r1066 80 80 TComPicLists* m_ivPicLists; ///< access to picture lists of other layers 81 81 #endif 82 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 83 Int *m_aICEnableCandidate; 84 Int *m_aICEnableNum; 85 #endif 82 86 // encoder search 83 87 TEncSearch m_cSearch; ///< encoder search class … … 146 150 Void xInitPPSforTiles (); 147 151 Void xInitRPS (Bool isFieldCoding); ///< initialize PPS from encoder options 148 152 #if H_MV_HLS10_GEN_FIX 153 #if H_MV 154 155 template <class T> Void xDelete( Bool ar, T inArray ) 156 { 157 if( inArray != NULL) 158 { 159 if ( ar ) 160 { 161 delete[] inArray; 162 } 163 else 164 { 165 delete inArray; 166 } 167 } 168 } 169 170 template <class T> Void xDelete( Bool ar, T inArray, Int idx1 ) 171 { 172 if( inArray != NULL) 173 { 174 xDelete( ar, inArray[idx1]); 175 } 176 } 177 178 template <class T> Void xDelete( Bool ar, T inArray, Int idx1, Int idx2 ) 179 { 180 if( inArray != NULL ) 181 { 182 xDelete( ar, inArray[idx1], idx2 ); 183 } 184 } 185 186 template <class T> Void xDelete( Bool ar, T inArray, Int idx1, Int idx2, Int idx3 ) 187 { 188 if( inArray != NULL ) 189 { 190 xDelete( ar, inArray[idx1], idx2, idx3 ); 191 } 192 } 193 194 #endif 195 #endif 149 196 public: 150 197 TEncTop(); … … 161 208 #if H_MV 162 209 TComPicLists* getIvPicLists() { return m_ivPicLists; } 210 #endif 211 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 212 Int *getICEnableCandidate() { return m_aICEnableCandidate; } 213 Int *getICEnableNum() { return m_aICEnableNum; } 163 214 #endif 164 215 Void deletePicBuffer (); … … 221 272 Void setIvPicLists ( TComPicLists* picLists) { m_ivPicLists = picLists; } 222 273 #endif 274 #if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX 275 Void setICEnableCandidate ( Int* ICEnableCandidate) { m_aICEnableCandidate = ICEnableCandidate; } 276 Void setICEnableNum ( Int* ICEnableNum) { m_aICEnableNum = ICEnableNum; } 277 #endif 223 278 // ------------------------------------------------------------------------------------------------------------------- 224 279 // encoder function
Note: See TracChangeset for help on using the changeset viewer.