Changeset 1054 in 3DVCSoftware for branches/HTM-12.0-dev1/source/App
- Timestamp:
- 26 Sep 2014, 18:34:05 (11 years ago)
- Location:
- branches/HTM-12.0-dev1/source/App
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-12.0-dev1/source/App/TAppDecoder/TAppDecCfg.cpp
r872 r1054 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); -
branches/HTM-12.0-dev1/source/App/TAppDecoder/TAppDecCfg.h
r964 r1054 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 -
branches/HTM-12.0-dev1/source/App/TAppDecoder/TAppDecTop.cpp
r976 r1054 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 m_vps->printLayerDependencies(); 263 m_vps->printLayerSets(); 264 m_vps->printPTL(); 245 265 } 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 } 266 #endif 267 } 260 268 #if H_3D 261 269 if (nalu.m_nalUnitType == NAL_UNIT_VPS ) … … 569 577 Int dpbFullness = 0; 570 578 #if H_MV 579 #if H_MV_HLS10_ADD_LAYERSETS 580 TComSPS* activeSPS = m_tDecTop[ decIdx ]->getActiveSPS(); 581 #else 571 582 // preliminary fix 572 583 TComSPS* activeSPS = m_tDecTop[0]->getActiveSPS(); 584 #endif 573 585 #else 574 586 TComSPS* activeSPS = m_cTDecTop.getActiveSPS(); -
branches/HTM-12.0-dev1/source/App/TAppEncoder/TAppEncCfg.cpp
r1039 r1054 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 … … 388 401 #endif 389 402 #endif 390 ("LayerIdInNuh", m_layerIdInNuh , std::vector<Int>(1,0), "LayerId in Nuh") 403 #if H_MV_HLS10_GEN_FIX 404 ("TargetEncLayerIdList", m_targetEncLayerIdList, std::vector<Int>(0,0), "LayerIds in Nuh to be encoded") 405 #endif 406 ("LayerIdInNuh", m_layerIdInNuh , std::vector<Int>(1,0), "LayerId in Nuh") 391 407 ("SplittingFlag", m_splittingFlag , false , "Splitting Flag") 392 408 … … 394 410 ("VpsNumLayerSets", m_vpsNumLayerSets , 1 , "Number of layer sets") 395 411 ("LayerIdsInSet_%d", m_layerIdsInSets , std::vector<Int>(1,0), MAX_VPS_OP_SETS_PLUS1 ,"LayerIds of Layer set") 412 #if H_MV_HLS10_ADD_LAYERSETS 413 ("NumAddLayerSets" , m_numAddLayerSets , 0 , "NumAddLayerSets ") 414 ("HighestLayerIdxPlus1_%d", m_highestLayerIdxPlus1, std::vector< Int >(0,0) ,MAX_VPS_NUM_ADD_LAYER_SETS, "HighestLayerIdxPlus1") 415 #endif 396 416 ("DefaultTargetOutputLayerIdc" , m_defaultOutputLayerIdc , 0, "Specifies output layers of layer sets, 0: output all layers, 1: output highest layer, 2: specified by LayerIdsInDefOutputLayerSet") 397 417 ("OutputLayerSetIdx", m_outputLayerSetIdx , std::vector<Int>(0,0), "Indices of layer sets used as additional output layer sets") … … 400 420 ("LayerIdsInDefOutputLayerSet_%d", m_layerIdsInDefOutputLayerSet , std::vector<Int>(0,0), MAX_VPS_OP_SETS_PLUS1, "Indices in VPS of output layers in layer set") 401 421 ("AltOutputLayerFlag", m_altOutputLayerFlag , std::vector<Bool>(1,0), "Alt output layer flag") 422 423 #if H_MV_HLS10_PTL 424 ("ProfileTierLevelIdx_%d", m_profileTierLevelIdx, std::vector<Int>(0), MAX_NUM_LAYERS, "Indices to profile level tier") 425 #else 402 426 ("ProfileLevelTierIdx", m_profileLevelTierIdx, std::vector<Int>(1,0), "Indices to profile level tier") 403 427 #endif 404 428 // Layer dependencies 405 429 ("DirectRefLayers_%d", m_directRefLayers , std::vector<Int>(0,0), MAX_NUM_LAYERS, "LayerIds of direct reference layers") … … 431 455 432 456 // Profile and level 457 #if H_MV_HLS10_PTL 458 ("Profile", cfg_profiles, string(""), "Profile in VpsProfileTierLevel (Indication only)") 459 ("Level", cfg_levels , string(""), "Level indication in VpsProfileTierLevel (Indication only)") 460 ("Tier", cfg_tiers , string(""), "Tier indication in VpsProfileTierLevel (Indication only)") 461 ("InblFlag",m_inblFlag , std::vector<Bool>(0), "InblFlags in VpsProfileTierLevel (Indication only)" ) 462 #else 433 463 ("Profile", m_profile, Profile::NONE, "Profile to be used when encoding (Incomplete)") 434 464 ("Level", m_level, Level::NONE, "Level limit to be used, eg 5.1 (Incomplete)") 435 465 ("Tier", m_levelTier, Level::MAIN, "Tier to use for interpretation of --Level") 436 466 #endif 437 467 ("ProgressiveSource", m_progressiveSourceFlag, false, "Indicate that source is progressive") 438 468 ("InterlacedSource", m_interlacedSourceFlag, false, "Indicate that source is interlaced") … … 613 643 #endif 614 644 #if H_MV 615 645 #if H_MV_HLS10_GEN_FIX 646 // A lot of this stuff could should actually be derived by the encoder. 647 #endif // H_MV_HLS10_GEN 616 648 // VPS VUI 617 649 ("VpsVuiPresentFlag" , m_vpsVuiPresentFlag , false , "VpsVuiPresentFlag ") … … 637 669 ("CtuBasedOffsetEnabledFlag" , m_ctuBasedOffsetEnabledFlag , std::vector< Bool >(1,0) ,MAX_NUM_LAYERS , "CtuBasedOffsetEnabledFlag per direct reference for the N-th layer") 638 670 ("MinHorizontalCtuOffsetPlus1" , m_minHorizontalCtuOffsetPlus1 , std::vector< Int >(1,0) ,MAX_NUM_LAYERS , "MinHorizontalCtuOffsetPlus1 per direct reference for the N-th layer") 671 #if H_MV_HLS10_VPS_VUI 672 ("SingleLayerForNonIrapFlag", m_singleLayerForNonIrapFlag, false , "SingleLayerForNonIrapFlag") 673 ("HigherLayerIrapSkipFlag" , m_higherLayerIrapSkipFlag , false , "HigherLayerIrapSkipFlag ") 674 #endif 639 675 #endif 640 676 … … 742 778 ("SEISubBitstreamAvgBitRate", m_sbPropAvgBitRate, std::vector< Int >(1,0) ,"Specifies average bit rate of the i-th sub-bitstream") 743 779 ("SEISubBitstreamMaxBitRate", m_sbPropMaxBitRate, std::vector< Int >(1,0) ,"Specifies maximum bit rate of the i-th sub-bitstream") 780 781 #if H_MV_HLS10_GEN_FIX 782 ("OutputVpsInfo", m_outputVpsInfo, false ,"Output information about the layer dependencies and layer sets") 783 #endif 744 784 #endif 745 785 #if H_3D … … 792 832 #endif //H_3D 793 833 ; 794 #if H_MV 834 835 #if H_MV 795 836 // parse coding structure 796 837 for( Int k = 0; k < MAX_NUM_LAYERS; k++ ) … … 1067 1108 xResizeVector( m_wppInUseFlag ); 1068 1109 1110 #if H_MV_HLS10_ADD_LAYERSETS 1111 for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + m_numAddLayerSets + (Int) m_outputLayerSetIdx.size(); olsIdx++) 1112 #else 1069 1113 for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + (Int) m_outputLayerSetIdx.size(); olsIdx++) 1114 #endif 1070 1115 { 1071 1116 m_altOutputLayerFlag.push_back( false ); … … 1177 1222 } 1178 1223 } 1224 1225 #if H_MV 1226 #if H_MV_HLS10_PTL 1227 // parse PTL 1228 Bool anyEmpty = false; 1229 if( cfg_profiles.empty() ) 1230 { 1231 #if H_3D 1232 cfg_profiles = string("main main 3D-main"); 1233 #else 1234 cfg_profiles = string("main main multiview-main"); 1235 #endif 1236 fprintf(stderr, "\nWarning: No profiles given, using defaults: %s", cfg_profiles.c_str() ); 1237 anyEmpty = true; 1238 } 1239 1240 if( cfg_levels.empty() ) 1241 { 1242 cfg_levels = string("none none none"); 1243 fprintf(stderr, "\nWarning: No levels given, using defaults: %s", cfg_levels.c_str() ); 1244 anyEmpty = true; 1245 } 1246 1247 if( cfg_tiers.empty() ) 1248 { 1249 cfg_tiers = string("main main main"); 1250 fprintf(stderr, "\nWarning: No tiers given, using defaults: %s", cfg_tiers.c_str()); 1251 anyEmpty = true; 1252 } 1253 1254 if( m_inblFlag.empty() ) 1255 { 1256 fprintf(stderr, "\nWarning: No inblFlags given, using defaults:"); 1257 for( Int i = 0; i < 3; i++) 1258 { 1259 m_inblFlag.push_back( false ); 1260 fprintf(stderr," %d", (Int) m_inblFlag[i]); 1261 } 1262 anyEmpty = true; 1263 } 1264 1265 if ( anyEmpty ) 1266 { 1267 fprintf( stderr, "\n" ); 1268 } 1269 1270 xReadStrToEnum( cfg_profiles, m_profile ); 1271 xReadStrToEnum( cfg_levels, m_level ); 1272 xReadStrToEnum( cfg_tiers , m_levelTier ); 1273 #endif 1274 #endif 1179 1275 #if H_3D 1180 1276 // set global varibles … … 1291 1387 fprintf(stderr, "******************************************************************\n"); 1292 1388 } 1389 1390 1391 #if !H_MV_HLS10_PTL 1293 1392 if( m_profile==Profile::NONE ) 1294 1393 { … … 1303 1402 fprintf(stderr, "***************************************************************************\n"); 1304 1403 } 1404 #endif 1305 1405 1306 1406 Bool check_failed = false; /* abort if there is a fatal configuration problem */ … … 1428 1528 { 1429 1529 Int refLayerSetIdx = m_outputLayerSetIdx[ lsIdx ]; 1530 #if H_MV_HLS10_ADD_LAYERSETS 1531 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." ); 1532 #else 1430 1533 xConfirmPara( refLayerSetIdx < 0 || refLayerSetIdx >= m_vpsNumLayerSets, "Output layer set idx must be greater or equal to 0 and less than the VpsNumLayerSets." ); 1431 1534 #endif 1535 #if !H_MV_HLS10_ADD_LAYERSETS 1432 1536 for (Int i = 0; i < m_layerIdsInAddOutputLayerSet[ lsIdx ].size(); i++) 1433 1537 { … … 1443 1547 xConfirmPara( !isAlsoInLayerSet, "All output layers of a output layer set be included in corresponding layer set."); 1444 1548 } 1549 #endif 1445 1550 } 1446 1551 … … 1454 1559 anyDefaultOutputFlag = anyDefaultOutputFlag || ( m_layerIdsInDefOutputLayerSet[lsIdx].size() != 0 ); 1455 1560 } 1561 #if H_MV_HLS10_ADD_LAYERSETS 1562 if ( anyDefaultOutputFlag ) 1563 { 1564 printf( "\nWarning: Ignoring LayerIdsInDefOutputLayerSet parameters, since defaultTargetOuputLayerIdc is not equal 2.\n" ); 1565 } 1566 #else 1456 1567 printf( "\nWarning: Ignoring LayerIdsInDefOutputLayerSet parameters, since defaultTargetOuputLayerIdc is not equal 2.\n" ); 1568 #endif 1457 1569 } 1458 1570 else … … 1476 1588 } 1477 1589 1590 #if H_MV_HLS10_ADD_LAYERSETS 1591 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" ); 1592 #else 1478 1593 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 1594 #endif 1595 1596 // PTL 1597 #if H_MV_HLS10_PTL 1598 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." ); 1599 1600 if ( m_numberOfLayers > 1) 1601 { 1602 xConfirmPara( m_profile.size() <= 1, "The number of profiles, tiers, levels, and inblFlags must be greater than 1."); 1603 xConfirmPara( m_inblFlag[0], "VpsProfileTierLevel[0] must have inblFlag equal to 0"); 1604 if (m_profile.size() > 1 ) 1605 { 1606 xConfirmPara( m_profile[0] != m_profile[1], "The profile in VpsProfileTierLevel[1] must be equal to the profile in VpsProfileTierLevel[0]."); 1607 xConfirmPara( m_inblFlag[0] != m_inblFlag[1], "inblFlag in VpsProfileTierLevel[1] must be equal to the inblFlag in VpsProfileTierLevel[0]."); 1608 } 1609 } 1610 #else 1611 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" ); 1612 #endif 1613 1614 // Layer Dependencies 1482 1615 for (Int i = 0; i < m_numberOfLayers; i++ ) 1483 1616 { … … 2341 2474 #endif 2342 2475 #if H_MV 2476 #if H_MV_HLS10_GEN_FIX 2477 xPrintParaVector( "NuhLayerId" , m_layerIdInNuh ); 2478 if ( m_targetEncLayerIdList.size() > 0) 2479 { 2480 xPrintParaVector( "TargetEncLayerIdList" , m_targetEncLayerIdList ); 2481 } 2482 #endif 2343 2483 xPrintParaVector( "ViewIdVal" , m_viewId ); 2344 2484 xPrintParaVector( "ViewOrderIndex", m_viewOrderIndex ); -
branches/HTM-12.0-dev1/source/App/TAppEncoder/TAppEncCfg.h
r1039 r1054 81 81 std::vector<Int> m_depthFlag; ///< depth flag 82 82 #endif 83 #if H_MV_HLS10_GEN_FIX 84 std::vector<Int> m_targetEncLayerIdList; ///< layer Ids in Nuh to be encoded 85 #endif 83 86 std::vector<Int> m_layerIdInNuh; ///< layer Id in Nuh for each layer 84 87 Bool m_splittingFlag; ///< Splitting Flag … … 89 92 Int m_vpsNumLayerSets; ///< Number of layer sets 90 93 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 94 #if H_MV_HLS10_ADD_LAYERSETS 95 Int m_numAddLayerSets; ///< Number of additional layer sets 96 std::vector< std::vector<Int> > m_highestLayerIdxPlus1; ///< HighestLayerIdxPlus1 for each additional layer set and each independent layer (value with index 0 will be ignored) 97 #endif 98 Int m_defaultOutputLayerIdc; ///< Specifies output layers of layer sets, 0: output all layers, 1: output highest layers, 2: specified by LayerIdsInDefOuputLayerSet 92 99 std::vector<Int> m_outputLayerSetIdx; ///< Indices of layer sets used as additional output layer sets 93 100 std::vector< std::vector<Int> > m_layerIdsInAddOutputLayerSet; ///< LayerIds in vps of additional output layers 94 101 std::vector< std::vector<Int> > m_layerIdsInDefOutputLayerSet; ///< Indices in vps of output layers in layer sets 102 #if H_MV_HLS10_ADD_LAYERSETS 103 std::vector< std::vector< Int > > m_profileTierLevelIdx; ///< Indices of of profile, per layer in layer set 104 #else 95 105 std::vector<Int> m_profileLevelTierIdx; ///< Indices of of profile level tier 106 #endif 96 107 std::vector<Bool> m_altOutputLayerFlag; ///< Alt output layer flag 97 108 … … 124 135 std::vector< std::vector<Bool > > m_ctuBasedOffsetEnabledFlag; 125 136 std::vector< std::vector<Int > > m_minHorizontalCtuOffsetPlus1; 137 #if H_MV_HLS10_VPS_VUI 138 Bool m_singleLayerForNonIrapFlag; 139 Bool m_higherLayerIrapSkipFlag; 140 #endif // H_MV_HLS10_VPS_VUI 141 126 142 127 143 #if H_3D_IV_MERGE … … 174 190 175 191 // profile/level 192 #if H_MV_HLS10_PTL 193 #if H_MV 194 std::vector< Profile::Name > m_profile; 195 std::vector< Level::Tier > m_levelTier; 196 std::vector< Level::Name > m_level; 197 std::vector< Bool > m_inblFlag; 198 #else 176 199 Profile::Name m_profile; 177 200 Level::Tier m_levelTier; 178 201 Level::Name m_level; 202 #endif 203 #endif 204 179 205 Bool m_progressiveSourceFlag; 180 206 Bool m_interlacedSourceFlag; 181 207 Bool m_nonPackedConstraintFlag; 182 208 Bool m_frameOnlyConstraintFlag; 183 184 209 // coding structure 185 210 #if H_MV … … 440 465 std::vector<Int> m_sbPropAvgBitRate; 441 466 std::vector<Int> m_sbPropMaxBitRate; 467 #if H_MV_HLS10_GEN_FIX 468 Bool m_outputVpsInfo; 469 #endif 442 470 #endif 443 471 #if H_3D … … 506 534 Void xPrintUsage (); ///< print usage 507 535 #if H_MV 536 537 #if H_MV_HLS10_PTL 538 template<typename T> 539 Void xReadStrToEnum(string in, std::vector<T> &val) 540 { 541 val.clear(); 542 543 char* cElement = NULL; 544 char* cString = new char[in.size()+1]; 545 strcpy(cString, in.c_str()); 546 547 cElement = strtok( cString, " " ); 548 while ( cElement != NULL ) 549 { 550 T profile; 551 std::istringstream ss( cElement ); 552 ss >> profile; 553 val.push_back( profile ); 554 cElement = strtok( NULL, " " ); 555 } 556 } 557 #endif 558 559 508 560 template <typename T> 509 561 Void xResizeVector( std::vector<T> & rpcVector ) -
branches/HTM-12.0-dev1/source/App/TAppEncoder/TAppEncTop.cpp
r1048 r1054 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 Bool wasEmpty = true; 148 if ( m_targetEncLayerIdList.size() == 0 ) 149 { 150 for (Int i = 0; i < m_numberOfLayers; i++ ) 151 { 152 m_targetEncLayerIdList.push_back( m_layerIdInNuh[ i ] ); 153 } 154 } 155 for( Int i = (Int) m_targetEncLayerIdList.size()-1 ; i >= 0 ; i--) 156 { 157 Int iNuhLayerId = m_targetEncLayerIdList[i]; 158 Bool allRefLayersPresent = true; 159 for( Int j = 0; j < vps.getNumRefLayers( iNuhLayerId ); j++) 160 { 161 allRefLayersPresent = allRefLayersPresent && xLayerIdInTargetEncLayerIdList( vps.getIdRefLayer( iNuhLayerId, j) ); 162 } 163 if ( !allRefLayersPresent ) 164 { 165 printf("\nCannot encode layer with nuh_layer_id equal to %d since not all reference layers are in TargetEncLayerIdList\n", iNuhLayerId); 166 m_targetEncLayerIdList.erase( m_targetEncLayerIdList.begin() + i ); 167 } 168 } 169 #endif 170 171 #if H_MV_HLS10_ADD_LAYERSETS 172 if ( m_outputVpsInfo ) 173 { 174 vps.printLayerDependencies(); 175 vps.printLayerSets(); 176 vps.printPTL(); 177 } 178 #endif 147 179 148 180 for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++) … … 248 280 #endif 249 281 282 #if H_MV 283 m_cTEncTop.setProfile(m_profile[0]); 284 m_cTEncTop.setLevel (m_levelTier[0], m_level[0]); 285 #else 250 286 m_cTEncTop.setProfile(m_profile); 251 287 m_cTEncTop.setLevel(m_levelTier, m_level); 288 #endif 252 289 m_cTEncTop.setProgressiveSourceFlag(m_progressiveSourceFlag); 253 290 m_cTEncTop.setInterlacedSourceFlag(m_interlacedSourceFlag); … … 801 838 802 839 #if H_MV 840 #if H_MV_HLS10_GEN_FIX 841 while ( (m_targetEncLayerIdList.size() != 0 ) && !allEos ) 842 #else 803 843 while ( !allEos ) 844 #endif 804 845 { 805 846 for(Int layer=0; layer < m_numberOfLayers; layer++ ) 806 847 { 848 #if H_MV_HLS10_GEN_FIX 849 if (!xLayerIdInTargetEncLayerIdList( m_layerIdInNuh[ layer ] )) 850 { 851 continue; 852 } 853 #endif 854 807 855 Int frmCnt = 0; 808 856 while ( !eos[layer] && !(frmCnt == gopSize)) … … 844 892 for(Int layer=0; layer < m_numberOfLayers; layer++ ) 845 893 { 894 #if H_MV_HLS10_GEN_FIX 895 if (!xLayerIdInTargetEncLayerIdList( m_layerIdInNuh[ layer ] )) 896 { 897 continue; 898 } 899 #endif 900 846 901 #if H_3D_VSO 847 902 if( m_bUseVSO && m_bUseEstimatedVSD && iNextPoc < m_framesToBeEncoded ) … … 870 925 for(Int layer=0; layer < m_numberOfLayers; layer++ ) 871 926 { 927 #if H_MV_HLS10_GEN_FIX 928 if (!xLayerIdInTargetEncLayerIdList( m_layerIdInNuh[ layer ] )) 929 { 930 continue; 931 } 932 #endif 872 933 m_acTEncTopList[layer]->printSummary( m_acTEncTopList[layer]->getNumAllPicCoded(), m_isField ); 873 934 } … … 1499 1560 Void TAppEncTop::xSetProfileTierLevel( TComVPS& vps ) 1500 1561 { 1562 #if H_MV_HLS10_PTL 1563 1564 // SET PTL 1565 assert( m_profile.size() == m_level.size() && m_profile.size() == m_levelTier.size() ); 1566 vps.setVpsNumProfileTierLevelMinus1( (Int) m_profile.size() - 1 ); 1567 for ( Int ptlIdx = 0; ptlIdx <= vps.getVpsNumProfileTierLevelMinus1(); ptlIdx++ ) 1568 { 1569 if ( ptlIdx > 1 ) 1570 { 1571 Bool vpsProfilePresentFlag = ( m_profile[ptlIdx] != m_profile[ptlIdx - 1] ) 1572 || ( m_inblFlag[ptlIdx ] != m_inblFlag[ptlIdx - 1] ); 1573 vps.setVpsProfilePresentFlag( ptlIdx, vpsProfilePresentFlag ); 1574 } 1575 1576 xSetProfileTierLevel( vps, ptlIdx, -1, m_profile[ptlIdx], m_level[ptlIdx], 1577 m_levelTier[ ptlIdx ], m_progressiveSourceFlag, m_interlacedSourceFlag, 1578 m_nonPackedConstraintFlag, m_frameOnlyConstraintFlag, m_inblFlag[ptlIdx] ); 1579 } 1580 #else 1501 1581 const Int vpsNumProfileTierLevelMinus1 = 0; //TBD 1502 1582 vps.setVpsNumProfileTierLevelMinus1( vpsNumProfileTierLevelMinus1 ); … … 1506 1586 vps.setVpsProfilePresentFlag( i, true ); 1507 1587 } 1588 #endif 1508 1589 } 1509 1590 … … 1525 1606 //repFormat->setSeparateColourPlaneVpsFlag( ); 1526 1607 1608 #if H_MV_HLS10_GEN_VSP_CONF_WIN 1609 repFormat->setConformanceWindowVpsFlag( true ); 1610 repFormat->setConfWinVpsLeftOffset ( m_confLeft / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) ); 1611 repFormat->setConfWinVpsRightOffset ( m_confRight / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) ); 1612 repFormat->setConfWinVpsTopOffset ( m_confTop / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) ); 1613 repFormat->setConfWinVpsBottomOffset ( m_confBottom / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) ); 1614 #endif 1615 1527 1616 assert( vps.getRepFormat( 0 ) == NULL ); 1528 1617 vps.setRepFormat( 0 , repFormat ); … … 1540 1629 { 1541 1630 Int currLsIdx = vps.olsIdxToLsIdx( i ); 1631 #if !H_MV_HLS10_ADD_LAYERSETS 1542 1632 std::vector<Int> targetDecLayerIdList = vps.getTargetDecLayerIdList( i ); 1633 #endif 1543 1634 Bool subLayerFlagInfoPresentFlag = false; 1544 1635 … … 1546 1637 { 1547 1638 Bool subLayerDpbInfoPresentFlag = false; 1639 #if !H_MV_HLS10_ADD_LAYERSETS 1548 1640 assert( vps.getNumLayersInIdList( currLsIdx ) == targetDecLayerIdList.size() ); 1641 #endif 1549 1642 for( Int k = 0; k < vps.getNumLayersInIdList( currLsIdx ); k++ ) 1550 1643 { 1644 #if H_MV_HLS10_DBP_SIZE 1645 Int layerIdInVps = vps.getLayerIdInVps( vps.getLayerSetLayerIdList( currLsIdx, k ) ); 1646 if ( vps.getNecessaryLayerFlag( i,k ) && ( vps.getVpsBaseLayerInternalFlag() || vps.getLayerSetLayerIdList( currLsIdx, k ) != 0 ) ) 1647 { 1648 dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, m_maxDecPicBufferingMvc[ layerIdInVps ][ j ] - 1 ); 1649 if ( j > 0 ) 1650 { 1651 subLayerDpbInfoPresentFlag = subLayerDpbInfoPresentFlag || ( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) != dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j - 1 ) ); 1652 } 1653 } 1654 else 1655 { 1656 if (vps.getNecessaryLayerFlag(i,k) && j == 0 && k == 0 ) 1657 { 1658 dpbSize->setMaxVpsDecPicBufferingMinus1(i, k ,j, 0 ); 1659 } 1660 } 1661 #else 1551 1662 Int layerIdInVps = vps.getLayerIdInVps( targetDecLayerIdList[k] ); 1552 1663 dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, m_maxDecPicBufferingMvc[ layerIdInVps ][ j ] - 1 ); 1664 1553 1665 if ( j > 0 ) 1554 1666 { 1555 1667 subLayerDpbInfoPresentFlag = subLayerDpbInfoPresentFlag || ( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) != dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j - 1 ) ); 1556 1668 } 1669 #endif 1557 1670 } 1558 1671 1559 1672 Int maxNumReorderPics = MIN_INT; 1673 #if H_MV_HLS10_DBP_SIZE 1674 for ( Int idx = 0; idx < vps.getNumLayersInIdList( currLsIdx ); idx++ ) 1675 { 1676 if (vps.getNecessaryLayerFlag(i, idx )) 1677 { 1678 Int layerIdInVps = vps.getLayerIdInVps( vps.getLayerSetLayerIdList(currLsIdx, idx) ); 1679 maxNumReorderPics = std::max( maxNumReorderPics, m_numReorderPicsMvc[ layerIdInVps ][ j ] ); 1680 } 1681 } 1682 #else 1560 1683 for ( Int idx = 0; idx < targetDecLayerIdList.size(); idx++ ) 1561 1684 { … … 1563 1686 maxNumReorderPics = std::max( maxNumReorderPics, m_numReorderPicsMvc[ layerIdInVps ][ j ] ); 1564 1687 } 1688 #endif 1565 1689 assert( maxNumReorderPics != MIN_INT ); 1566 1690 … … 1588 1712 } 1589 1713 1590 1591 1714 Void TAppEncTop::xSetLayerSets( TComVPS& vps ) 1592 1715 { … … 1610 1733 // Additional output layer sets + profileLevelTierIdx 1611 1734 vps.setDefaultOutputLayerIdc ( m_defaultOutputLayerIdc ); 1735 #if H_MV_HLS10_ADD_LAYERSETS 1736 if( vps.getNumIndependentLayers() == 0 && m_numAddLayerSets > 0 ) 1737 { 1738 fprintf( stderr, "\nWarning: Ignoring additional layer sets since NumIndependentLayers is equal to 0.\n"); 1739 } 1740 else 1741 { 1742 vps.setNumAddLayerSets( m_numAddLayerSets ); 1743 if ( m_highestLayerIdxPlus1.size() < vps.getNumAddLayerSets() ) 1744 { 1745 fprintf(stderr, "\nError: Number of highestLayerIdxPlus1 parameters must be greater than or equal to NumAddLayerSets\n"); 1746 exit(EXIT_FAILURE); 1747 } 1748 1749 for (Int i = 0; i < vps.getNumAddLayerSets(); i++) 1750 { 1751 if ( m_highestLayerIdxPlus1[ i ].size() < vps.getNumIndependentLayers() ) 1752 { 1753 fprintf(stderr, "Error: Number of elements in highestLayerIdxPlus1[ %d ] parameters must be greater than or equal to NumIndependentLayers(= %d)\n", i, vps.getNumIndependentLayers()); 1754 exit(EXIT_FAILURE); 1755 } 1756 1757 for (Int j = 1; j < vps.getNumIndependentLayers(); j++) 1758 { 1759 if ( m_highestLayerIdxPlus1[ i ][ j ] < 0 || m_highestLayerIdxPlus1[ i ][ j ] > vps.getNumLayersInTreePartition( j ) ) 1760 { 1761 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 ) ); 1762 exit(EXIT_FAILURE); 1763 } 1764 vps.setHighestLayerIdxPlus1( i, j, m_highestLayerIdxPlus1[ i ][ j ] ); 1765 } 1766 vps.deriveAddLayerSetLayerIdList( i ); 1767 } 1768 } 1769 #else 1612 1770 vps.setNumAddLayerSets ( 0 ); 1771 #endif 1613 1772 vps.setNumAddOlss ( numAddOuputLayerSets ); 1614 1773 vps.initTargetLayerIdLists(); 1615 1774 1775 #if H_MV_HLS10_ADD_LAYERSETS 1776 for (Int olsIdx = 0; olsIdx < vps.getNumLayerSets() + numAddOuputLayerSets; olsIdx++) 1777 { 1778 Int addOutLsIdx = olsIdx - vps.getNumLayerSets(); 1779 #else 1616 1780 for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + numAddOuputLayerSets; olsIdx++) 1617 1781 { 1618 1782 Int addOutLsIdx = olsIdx - m_vpsNumLayerSets; 1619 1783 #endif 1620 1784 vps.setLayerSetIdxForOlsMinus1( olsIdx, ( ( addOutLsIdx < 0 ) ? olsIdx : m_outputLayerSetIdx[ addOutLsIdx ] ) - 1 ); 1621 1785 1786 #if H_MV_HLS10_ADD_LAYERSETS 1787 Int lsIdx = vps.olsIdxToLsIdx( olsIdx ); 1788 #else 1622 1789 std::vector<Int>& layerIdList = m_layerIdsInSets[ vps.olsIdxToLsIdx( olsIdx ) ]; 1623 1790 #endif 1624 1791 if (vps.getDefaultOutputLayerIdc() == 2 || addOutLsIdx >= 0 ) 1625 1792 { 1793 #if H_MV_HLS10_ADD_LAYERSETS 1794 for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++) 1795 #else 1626 1796 for ( Int i = 0; i < layerIdList.size(); i++) 1797 #endif 1627 1798 { 1628 1799 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 ! … … 1634 1805 for (Int j = 0; j < outLayerIdList.size(); j++) 1635 1806 { 1807 #if H_MV_HLS10_ADD_LAYERSETS 1808 for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++) 1809 { 1810 if ( vps.getLayerSetLayerIdList( lsIdx, i ) == outLayerIdList[ j ] ) 1811 #else 1636 1812 for (Int i = 0; i < layerIdList.size(); i++ ) 1637 1813 { 1638 1814 if ( layerIdList[ i ] == outLayerIdList[ j ] ) 1815 #endif 1639 1816 { 1640 1817 vps.setOutputLayerFlag( olsIdx, i, true ); … … 1643 1820 } 1644 1821 } 1645 assert( outputLayerInLayerSetFlag ); // The output layer is not not in the layer set. 1822 #if H_MV_HLS10_ADD_LAYERSETS 1823 if ( !outputLayerInLayerSetFlag ) 1824 { 1825 fprintf(stderr, "Error: Output layer %d in output layer set %d not in corresponding layer set %d \n", outLayerIdList[ j ], olsIdx , lsIdx ); 1826 exit(EXIT_FAILURE); 1827 } 1828 #else 1829 assert( outputLayerInLayerSetFlag ); // The output layer is not in the layer set. 1830 #endif 1646 1831 } 1647 1832 } 1648 1833 else 1649 1834 { 1835 #if H_MV_HLS10_ADD_LAYERSETS 1836 for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++) 1837 #else 1650 1838 for ( Int i = 0; i < layerIdList.size(); i++) 1839 #endif 1651 1840 { 1652 1841 vps.setOutputLayerFlag( olsIdx, i, vps.inferOutputLayerFlag( olsIdx, i ) ); … … 1654 1843 } 1655 1844 1845 #if H_MV_HLS10_NESSECARY_LAYER 1846 vps.deriveNecessaryLayerFlags( olsIdx ); 1847 #endif 1656 1848 vps.deriveTargetLayerIdList( olsIdx ); 1657 1849 1850 #if H_MV_HLS10_PTL 1851 // SET profile_tier_level_index. 1852 if ( olsIdx == 0 ) 1853 { 1854 vps.setProfileTierLevelIdx( 0, 0 , vps.getMaxLayersMinus1() > 0 ? 1 : 0 ); 1855 } 1856 else 1857 { 1858 Int lsIdx = vps.olsIdxToLsIdx( olsIdx ); 1859 if( (Int) m_profileTierLevelIdx[ olsIdx ].size() < vps.getNumLayersInIdList( lsIdx ) ) 1860 { 1861 fprintf( stderr, "Warning: Not enough profileTierLevelIdx values given for the %d-th OLS. Inferring default values.\n", olsIdx ); 1862 } 1863 for (Int j = 0; j < vps.getNumLayersInIdList( lsIdx ); j++) 1864 { 1865 if( j < (Int) m_profileTierLevelIdx[ olsIdx ].size() ) 1866 { 1867 vps.setProfileTierLevelIdx(olsIdx, j, m_profileTierLevelIdx[olsIdx][j] ); 1868 } 1869 else 1870 { 1871 // setting default values 1872 if ( j == 0 || vps.getVpsNumProfileTierLevelMinus1() < 1 ) 1873 { 1874 // set base layer as default 1875 vps.setProfileTierLevelIdx(olsIdx, j, 1 ); 1876 } 1877 else 1878 { 1879 // set VpsProfileTierLevel[2] as default 1880 vps.setProfileTierLevelIdx(olsIdx, j, 2 ); 1881 } 1882 } 1883 } 1884 } 1885 #else 1658 1886 if ( olsIdx > 0 ) 1659 1887 { 1660 1888 vps.setProfileLevelTierIdx( olsIdx, m_profileLevelTierIdx[ olsIdx ] ); 1661 1889 } 1890 #endif 1662 1891 1663 1892 if ( vps.getNumOutputLayersInOutputLayerSet( olsIdx ) == 1 && … … 1697 1926 if( pcVPSVUI->getBitRatePresentVpsFlag( ) || pcVPSVUI->getPicRatePresentVpsFlag( ) ) 1698 1927 { 1928 #if H_MV_HLS10_VPS_VUI 1929 for( Int i = 0; i < vps.getNumLayerSets(); i++ ) 1930 #else 1699 1931 for( Int i = 0; i <= vps.getVpsNumLayerSetsMinus1(); i++ ) 1932 #endif 1700 1933 { 1701 1934 for( Int j = 0; j <= vps.getMaxTLayers(); j++ ) … … 1746 1979 for( Int j = 0; j < vps.getNumDirectRefLayers( vps.getLayerIdInNuh( i ) ) ; j++ ) 1747 1980 { 1981 #if H_MV_HLS10_REF_PRED_LAYERS 1982 Int layerIdx = vps.getLayerIdInVps( vps.getIdDirectRefLayer(vps.getLayerIdInNuh( i ) , j )); 1983 #else 1748 1984 Int layerIdx = vps.getLayerIdInVps( vps.getRefLayerId(vps.getLayerIdInNuh( i ) , j )); 1985 #endif 1749 1986 if( pcVPSVUI->getTilesInUseFlag( i ) && pcVPSVUI->getTilesInUseFlag( layerIdx ) ) 1750 1987 { … … 1764 2001 } 1765 2002 } 2003 2004 #if H_MV_HLS10_VPS_VUI 2005 pcVPSVUI->setSingleLayerForNonIrapFlag( m_singleLayerForNonIrapFlag ); 2006 pcVPSVUI->setHigherLayerIrapSkipFlag( m_higherLayerIrapSkipFlag ); 2007 #endif 1766 2008 1767 2009 pcVPSVUI->setIlpRestrictedRefLayersFlag( m_ilpRestrictedRefLayersFlag ); -
branches/HTM-12.0-dev1/source/App/TAppEncoder/TAppEncTop.h
r976 r1054 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 { 142 TComPTL* ptlStruct = vps.getPTL( profileTierLevelIdx ); 143 assert( ptlStruct != NULL ); 144 145 ProfileTierLevel* ptl; 146 if ( subLayer == -1 ) 147 { 148 ptl = ptlStruct->getGeneralPTL(); 149 } 150 else 151 { 152 ptl = ptlStruct->getSubLayerPTL( subLayer ); 153 } 154 155 assert( ptl != NULL ); 156 157 158 ptl->setProfileIdc( profile ); 159 ptl->setTierFlag ( tier ); 160 ptl->setLevelIdc ( level ); 161 ptl->setProfileCompatibilityFlag( profile, true ); 162 163 switch ( profile ) 164 { 165 case Profile::MAIN: 166 break; 167 case Profile::MULTIVIEWMAIN: 168 #if H_3D 169 case Profile::MAIN3D: 170 #endif 171 ptl->setMax12bitConstraintFlag ( true ); 172 ptl->setMax12bitConstraintFlag ( true ); 173 ptl->setMax10bitConstraintFlag ( true ); 174 ptl->setMax8bitConstraintFlag ( true ); 175 ptl->setMax422chromaConstraintFlag ( true ); 176 ptl->setMax420chromaConstraintFlag ( true ); 177 ptl->setMaxMonochromeConstraintFlag ( false ); 178 ptl->setIntraConstraintFlag ( false ); 179 ptl->setOnePictureOnlyConstraintFlag( false ); 180 ptl->setLowerBitRateConstraintFlag ( true ); 181 break; 182 default: 183 assert( 0 ); // other profiles currently not supported 184 break; 185 } 186 } 187 188 189 #endif 134 190 Void xSetRepFormat ( TComVPS& vps ); 135 191 Void xSetDpbSize ( TComVPS& vps ); … … 137 193 GOPEntry* xGetGopEntry( Int layerIdInVps, Int poc ); 138 194 Int xGetMax( std::vector<Int>& vec); 195 #if H_MV_HLS10_GEN_FIX 196 Bool xLayerIdInTargetEncLayerIdList( Int nuhLayerId ) 197 { 198 return ( std::find(m_targetEncLayerIdList.begin(), m_targetEncLayerIdList.end(), nuhLayerId) != m_targetEncLayerIdList.end()) ; 199 } 200 #endif 139 201 #endif 140 202 #if H_3D
Note: See TracChangeset for help on using the changeset viewer.