Changeset 805 in SHVCSoftware for branches/SHM-6-dev/source/App
- Timestamp:
- 17 Jun 2014, 16:58:15 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-6-dev/source/App/TAppEncoder/TAppEncTop.cpp
r804 r805 1119 1119 #endif 1120 1120 #if Q0078_ADD_LAYER_SETS 1121 vps->setVpsNumLayerSetsMinus1(vps->getNumLayerSets() - 1); 1121 1122 vps->setNumAddLayerSets(m_numAddLayerSets); 1123 vps->setNumLayerSets(vps->getNumLayerSets() + vps->getNumAddLayerSets()); 1122 1124 if (m_numAddLayerSets > 0) 1123 1125 { … … 1247 1249 } 1248 1250 #endif 1249 // Target output layer1250 vps->setNumOutputLayerSets(vps->getNumLayerSets());1251 vps->setNumProfileTierLevel(vps->getNumLayerSets());1252 #if P0295_DEFAULT_OUT_LAYER_IDC1253 vps->setDefaultTargetOutputLayerIdc(1);1254 #else1255 #if O0109_DEFAULT_ONE_OUT_LAYER_IDC1256 vps->setDefaultOneTargetOutputLayerIdc(1);1257 #else1258 vps->setDefaultOneTargetOutputLayerFlag(true);1259 #endif1260 #endif1261 for(i = 1; i < vps->getNumLayerSets(); i++)1262 {1263 vps->setProfileLevelTierIdx(i, i);1264 vps->setOutputLayerSetIdx(i, i);1265 }1266 #endif1267 #if VPS_DPB_SIZE_TABLE1268 // The Layer ID List variables can be derived here.1269 #if DERIVE_LAYER_ID_LIST_VARIABLES1270 vps->deriveLayerIdListVariables();1271 #endif1272 #if RESOLUTION_BASED_DPB1273 vps->assignSubDpbIndices();1274 #else1275 vps->deriveNumberOfSubDpbs();1276 #endif1277 1278 // derive OutputLayerFlag[i][j]1279 if( vps->getDefaultTargetOutputLayerIdc() == 1 )1280 {1281 // default_output_layer_idc equal to 1 specifies that only the layer with the highest value of nuh_layer_id such that nuh_layer_id equal to nuhLayerIdA and1282 // AuxId[ nuhLayerIdA ] equal to 0 in each of the output layer sets with index in the range of 1 to vps_num_layer_sets_minus1, inclusive, is an output layer of its output layer set.1283 1284 // Include the highest layer as output layer for each layer set1285 for(Int lsIdx = 1; lsIdx < vps->getNumLayerSets(); lsIdx++)1286 {1287 for( UInt layer = 0; layer < vps->getNumLayersInIdList(lsIdx); layer++ )1288 {1289 if( vps->getLayerIdIncludedFlag(lsIdx, layer) )1290 {1291 vps->setOutputLayerFlag( lsIdx, layer, layer == vps->getNumLayersInIdList(lsIdx) - 1 );1292 }1293 }1294 }1295 }1296 else1297 {1298 // cases when default_output_layer_idc is not equal to 11299 assert(!"default_output_layer_idc not equal to 1 is not yet supported");1300 }1301 1302 // Initialize dpb_size_table() for all ouput layer sets in the VPS extension1303 for(i = 1; i < vps->getNumOutputLayerSets(); i++)1304 {1305 #if CHANGE_NUMSUBDPB_IDX1306 Int layerSetIdxForOutputLayerSet = vps->getOutputLayerSetIdx( i );1307 #endif1308 Int layerSetId = vps->getOutputLayerSetIdx(i);1309 1310 for(Int j = 0; j < vps->getMaxTLayers(); j++)1311 {1312 1313 Int maxNumReorderPics = -1;1314 #if CHANGE_NUMSUBDPB_IDX1315 #if RESOLUTION_BASED_DPB1316 for(Int k = 0; k < vps->getNumLayersInIdList(layerSetIdxForOutputLayerSet); k++)1317 #else1318 for(Int k = 0; k < vps->getNumSubDpbs(layerSetIdxForOutputLayerSet); k++)1319 #endif1320 #else1321 for(Int k = 0; k < vps->getNumSubDpbs(i); k++)1322 #endif1323 {1324 Int layerId = vps->getLayerSetLayerIdList(layerSetId, k); // k-th layer in the output layer set1325 #if RESOLUTION_BASED_DPB1326 vps->setMaxVpsLayerDecPicBuffMinus1( i, k, j, m_acTEncTop[layerId].getMaxDecPicBuffering(j) - 1 );1327 // Add sub-DPB sizes of layers belonging to a sub-DPB. If a different sub-DPB size is calculated1328 // at the encoder, modify below1329 Int oldValue = vps->getMaxVpsDecPicBufferingMinus1( i, vps->getSubDpbAssigned( layerSetIdxForOutputLayerSet, k ), j );1330 oldValue += vps->getMaxVpsLayerDecPicBuffMinus1( i, k, j ) + 1;1331 vps->setMaxVpsDecPicBufferingMinus1( i, vps->getSubDpbAssigned( layerSetIdxForOutputLayerSet, k ), j, oldValue );1332 #else1333 vps->setMaxVpsDecPicBufferingMinus1( i, k, j, m_acTEncTop[layerId].getMaxDecPicBuffering(j) - 1 );1334 #endif1335 maxNumReorderPics = std::max( maxNumReorderPics, m_acTEncTop[layerId].getNumReorderPics(j));1336 }1337 #if RESOLUTION_BASED_DPB1338 for(Int k = 0; k < vps->getNumSubDpbs(i); k++)1339 {1340 // Decrement m_maxVpsDecPicBufferingMinus11341 Int oldValue = vps->getMaxVpsDecPicBufferingMinus1( i, vps->getSubDpbAssigned( layerSetIdxForOutputLayerSet, k ), j );1342 vps->setMaxVpsDecPicBufferingMinus1( i, vps->getSubDpbAssigned( layerSetIdxForOutputLayerSet, k ), j, oldValue - 1 );1343 }1344 #endif1345 vps->setMaxVpsNumReorderPics(i, j, maxNumReorderPics);1346 vps->determineSubDpbInfoFlags();1347 }1348 }1349 #endif1350 1251 #if VPS_EXTN_DIRECT_REF_LAYERS 1351 1252 // Direct reference layers … … 1354 1255 Bool isDefaultDirectDependencyTypeSet = false; 1355 1256 #endif 1356 for (UInt layerCtr = 1;layerCtr <= vps->getMaxLayers() - 1; layerCtr++)1357 { 1358 vps->setNumDirectRefLayers( layerCtr, m_acTEncTop[layerCtr].getNumDirectRefLayers());1359 maxDirectRefLayers = max<UInt>( maxDirectRefLayers, vps->getNumDirectRefLayers( layerCtr ));1360 1361 for (i = 0; i < vps->getNumDirectRefLayers(layerCtr); i++)1362 { 1363 vps->setRefLayerId( layerCtr, i, m_acTEncTop[layerCtr].getRefLayerId(i));1257 for (UInt layerCtr = 1; layerCtr <= vps->getMaxLayers() - 1; layerCtr++) 1258 { 1259 vps->setNumDirectRefLayers(layerCtr, m_acTEncTop[layerCtr].getNumDirectRefLayers()); 1260 maxDirectRefLayers = max<UInt>(maxDirectRefLayers, vps->getNumDirectRefLayers(layerCtr)); 1261 1262 for (i = 0; i < vps->getNumDirectRefLayers(layerCtr); i++) 1263 { 1264 vps->setRefLayerId(layerCtr, i, m_acTEncTop[layerCtr].getRefLayerId(i)); 1364 1265 } 1365 1266 // Set direct dependency flag 1366 1267 // Initialize flag to 0 1367 for (Int refLayerCtr = 0; refLayerCtr < layerCtr; refLayerCtr++)1368 { 1369 vps->setDirectDependencyFlag( layerCtr, refLayerCtr, false);1370 } 1371 for (i = 0; i < vps->getNumDirectRefLayers(layerCtr); i++)1372 { 1373 vps->setDirectDependencyFlag( 1268 for (Int refLayerCtr = 0; refLayerCtr < layerCtr; refLayerCtr++) 1269 { 1270 vps->setDirectDependencyFlag(layerCtr, refLayerCtr, false); 1271 } 1272 for (i = 0; i < vps->getNumDirectRefLayers(layerCtr); i++) 1273 { 1274 vps->setDirectDependencyFlag(layerCtr, vps->getLayerIdInVps(m_acTEncTop[layerCtr].getRefLayerId(i)), true); 1374 1275 } 1375 1276 // prediction indications 1376 1277 vps->setDirectDepTypeLen(2); // sample and motion types are encoded 1377 for (Int refLayerCtr = 0; refLayerCtr < layerCtr; refLayerCtr++)1378 { 1379 if (vps->getDirectDependencyFlag( 1278 for (Int refLayerCtr = 0; refLayerCtr < layerCtr; refLayerCtr++) 1279 { 1280 if (vps->getDirectDependencyFlag(layerCtr, refLayerCtr)) 1380 1281 { 1381 1282 assert(m_acTEncTop[layerCtr].getSamplePredEnabledFlag(refLayerCtr) || m_acTEncTop[layerCtr].getMotionPredEnabledFlag(refLayerCtr)); 1382 vps->setDirectDependencyType( 1383 1283 vps->setDirectDependencyType(layerCtr, refLayerCtr, ((m_acTEncTop[layerCtr].getSamplePredEnabledFlag(refLayerCtr) ? 1 : 0) | 1284 (m_acTEncTop[layerCtr].getMotionPredEnabledFlag(refLayerCtr) ? 2 : 0)) - 1); 1384 1285 #if O0096_DEFAULT_DEPENDENCY_TYPE 1385 1286 if (!isDefaultDirectDependencyTypeSet) … … 1397 1298 else 1398 1299 { 1399 vps->setDirectDependencyType( layerCtr, refLayerCtr, 0);1300 vps->setDirectDependencyType(layerCtr, refLayerCtr, 0); 1400 1301 } 1401 1302 } … … 1405 1306 vps->setNumRefLayers(); 1406 1307 1407 if (vps->getMaxLayers() > MAX_REF_LAYERS)1408 { 1409 for (UInt layerCtr = 1; layerCtr <= vps->getMaxLayers() - 1; layerCtr++)1410 { 1411 assert( 1308 if (vps->getMaxLayers() > MAX_REF_LAYERS) 1309 { 1310 for (UInt layerCtr = 1; layerCtr <= vps->getMaxLayers() - 1; layerCtr++) 1311 { 1312 assert(vps->getNumRefLayers(vps->getLayerIdInNuh(layerCtr)) <= MAX_REF_LAYERS); 1412 1313 } 1413 1314 } … … 1416 1317 vps->setPredictedLayerIds(); 1417 1318 vps->setTreePartitionLayerIdList(); 1418 #endif 1319 vps->setLayerIdIncludedFlagsForAddLayerSets(); 1320 #endif 1321 #endif 1322 // Target output layer 1323 vps->setNumOutputLayerSets(vps->getNumLayerSets()); 1324 vps->setNumProfileTierLevel(vps->getNumLayerSets()); 1325 #if P0295_DEFAULT_OUT_LAYER_IDC 1326 vps->setDefaultTargetOutputLayerIdc(1); 1327 #else 1328 #if O0109_DEFAULT_ONE_OUT_LAYER_IDC 1329 vps->setDefaultOneTargetOutputLayerIdc(1); 1330 #else 1331 vps->setDefaultOneTargetOutputLayerFlag(true); 1332 #endif 1333 #endif 1334 for(i = 1; i < vps->getNumLayerSets(); i++) 1335 { 1336 vps->setProfileLevelTierIdx(i, i); 1337 vps->setOutputLayerSetIdx(i, i); 1338 } 1339 #endif 1340 #if VPS_DPB_SIZE_TABLE 1341 // The Layer ID List variables can be derived here. 1342 #if DERIVE_LAYER_ID_LIST_VARIABLES 1343 vps->deriveLayerIdListVariables(); 1344 #endif 1345 #if RESOLUTION_BASED_DPB 1346 vps->assignSubDpbIndices(); 1347 #else 1348 vps->deriveNumberOfSubDpbs(); 1349 #endif 1350 1351 // derive OutputLayerFlag[i][j] 1352 if( vps->getDefaultTargetOutputLayerIdc() == 1 ) 1353 { 1354 // default_output_layer_idc equal to 1 specifies that only the layer with the highest value of nuh_layer_id such that nuh_layer_id equal to nuhLayerIdA and 1355 // AuxId[ nuhLayerIdA ] equal to 0 in each of the output layer sets with index in the range of 1 to vps_num_layer_sets_minus1, inclusive, is an output layer of its output layer set. 1356 1357 // Include the highest layer as output layer for each layer set 1358 for(Int lsIdx = 1; lsIdx < vps->getNumLayerSets(); lsIdx++) 1359 { 1360 for( UInt layer = 0; layer < vps->getNumLayersInIdList(lsIdx); layer++ ) 1361 { 1362 #if !Q0078_ADD_LAYER_SETS // the following condition is incorrect and is not needed anyway 1363 if( vps->getLayerIdIncludedFlag(lsIdx, layer) ) 1364 #endif 1365 { 1366 vps->setOutputLayerFlag( lsIdx, layer, layer == vps->getNumLayersInIdList(lsIdx) - 1 ); 1367 } 1368 } 1369 } 1370 } 1371 else 1372 { 1373 // cases when default_output_layer_idc is not equal to 1 1374 assert(!"default_output_layer_idc not equal to 1 is not yet supported"); 1375 } 1376 1377 // Initialize dpb_size_table() for all ouput layer sets in the VPS extension 1378 for(i = 1; i < vps->getNumOutputLayerSets(); i++) 1379 { 1380 #if CHANGE_NUMSUBDPB_IDX 1381 Int layerSetIdxForOutputLayerSet = vps->getOutputLayerSetIdx( i ); 1382 #endif 1383 Int layerSetId = vps->getOutputLayerSetIdx(i); 1384 1385 for(Int j = 0; j < vps->getMaxTLayers(); j++) 1386 { 1387 1388 Int maxNumReorderPics = -1; 1389 #if CHANGE_NUMSUBDPB_IDX 1390 #if RESOLUTION_BASED_DPB 1391 for(Int k = 0; k < vps->getNumLayersInIdList(layerSetIdxForOutputLayerSet); k++) 1392 #else 1393 for(Int k = 0; k < vps->getNumSubDpbs(layerSetIdxForOutputLayerSet); k++) 1394 #endif 1395 #else 1396 for(Int k = 0; k < vps->getNumSubDpbs(i); k++) 1397 #endif 1398 { 1399 Int layerId = vps->getLayerSetLayerIdList(layerSetId, k); // k-th layer in the output layer set 1400 #if RESOLUTION_BASED_DPB 1401 vps->setMaxVpsLayerDecPicBuffMinus1( i, k, j, m_acTEncTop[layerId].getMaxDecPicBuffering(j) - 1 ); 1402 // Add sub-DPB sizes of layers belonging to a sub-DPB. If a different sub-DPB size is calculated 1403 // at the encoder, modify below 1404 Int oldValue = vps->getMaxVpsDecPicBufferingMinus1( i, vps->getSubDpbAssigned( layerSetIdxForOutputLayerSet, k ), j ); 1405 oldValue += vps->getMaxVpsLayerDecPicBuffMinus1( i, k, j ) + 1; 1406 vps->setMaxVpsDecPicBufferingMinus1( i, vps->getSubDpbAssigned( layerSetIdxForOutputLayerSet, k ), j, oldValue ); 1407 #else 1408 vps->setMaxVpsDecPicBufferingMinus1( i, k, j, m_acTEncTop[layerId].getMaxDecPicBuffering(j) - 1 ); 1409 #endif 1410 maxNumReorderPics = std::max( maxNumReorderPics, m_acTEncTop[layerId].getNumReorderPics(j)); 1411 } 1412 #if RESOLUTION_BASED_DPB 1413 for(Int k = 0; k < vps->getNumSubDpbs(i); k++) 1414 { 1415 // Decrement m_maxVpsDecPicBufferingMinus1 1416 Int oldValue = vps->getMaxVpsDecPicBufferingMinus1( i, vps->getSubDpbAssigned( layerSetIdxForOutputLayerSet, k ), j ); 1417 vps->setMaxVpsDecPicBufferingMinus1( i, vps->getSubDpbAssigned( layerSetIdxForOutputLayerSet, k ), j, oldValue - 1 ); 1418 } 1419 #endif 1420 vps->setMaxVpsNumReorderPics(i, j, maxNumReorderPics); 1421 vps->determineSubDpbInfoFlags(); 1422 } 1423 } 1419 1424 #endif 1420 1425 vps->setMaxOneActiveRefLayerFlag(maxDirectRefLayers > 1 ? false : true); … … 1505 1510 { 1506 1511 vps->setVpsVuiBspHrdPresentFlag(true); 1512 #if Q0078_ADD_LAYER_SETS 1513 vps->setVpsNumBspHrdParametersMinus1(vps->getVpsNumLayerSetsMinus1() - 1); 1514 #else 1507 1515 vps->setVpsNumBspHrdParametersMinus1(vps->getNumLayerSets() - 2); 1516 #endif 1508 1517 vps->createBspHrdParamBuffer(vps->getVpsNumBspHrdParametersMinus1() + 1); 1509 1518 for ( i = 0; i <= vps->getVpsNumBspHrdParametersMinus1(); i++ ) … … 1538 1547 vps->setBspHrdParameters( i, pcCfgLayer->getFrameRate(), numDU, pcCfgLayer->getTargetBitrate(), ( pcCfgLayer->getIntraPeriod() > 0 ) ); 1539 1548 } 1549 #if Q0078_ADD_LAYER_SETS 1550 for (UInt h = 1; h <= vps->getVpsNumLayerSetsMinus1(); h++) 1551 #else 1540 1552 for(UInt h = 1; h <= (vps->getNumLayerSets()-1); h++) 1553 #endif 1541 1554 { 1542 1555 vps->setNumBitstreamPartitions(h, 1);
Note: See TracChangeset for help on using the changeset viewer.