Changeset 1124 in 3DVCSoftware for trunk/source/App/TAppEncoder/TAppEncTop.cpp
- Timestamp:
- 10 Nov 2014, 12:22:20 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/App/TAppEncoder/TAppEncTop.cpp
r1084 r1124 140 140 xSetVPSVUI ( vps ); 141 141 #if H_3D 142 #if !HHI_TOOL_PARAMETERS_I2_J0107 142 143 xSetVPSExtension2 ( vps ); 144 #endif 143 145 m_ivPicLists.setVPS ( &vps ); 144 146 xDeriveDltArray ( vps, dlt ); … … 173 175 vps.printPTL(); 174 176 } 177 178 #if HHI_TOOL_PARAMETERS_I2_J0107 179 #if H_3D 180 // Set 3d tool parameters 181 182 for (Int d = 0; d < 2; d++) 183 { 184 m_sps3dExtension.setIvMvPredFlag ( d, m_ivMvPredFlag[d] ); 185 m_sps3dExtension.setIvMvScalingFlag ( d, m_ivMvScalingFlag[d] ); 186 if (d == 0 ) 187 { 188 m_sps3dExtension.setLog2SubPbSizeMinus3 ( d, m_log2SubPbSizeMinus3 ); 189 m_sps3dExtension.setIvResPredFlag ( d, m_ivResPredFlag ); 190 m_sps3dExtension.setDepthRefinementFlag ( d, m_depthRefinementFlag ); 191 m_sps3dExtension.setViewSynthesisPredFlag ( d, m_viewSynthesisPredFlag ); 192 m_sps3dExtension.setDepthBasedBlkPartFlag ( d, m_depthBasedBlkPartFlag ); 193 } 194 else 195 { 196 m_sps3dExtension.setMpiFlag ( d, m_mpiFlag ); 197 m_sps3dExtension.setLog2MpiSubPbSizeMinus3( d, m_log2MpiSubPbSizeMinus3); 198 m_sps3dExtension.setIntraContourFlag ( d, m_intraContourFlag ); 199 m_sps3dExtension.setIntraSdcWedgeFlag ( d, m_intraSdcFlag || m_intraWedgeFlag ); 200 m_sps3dExtension.setQtPredFlag ( d, m_qtPredFlag ); 201 m_sps3dExtension.setInterSdcFlag ( d, m_interSdcFlag ); 202 m_sps3dExtension.setIntraSingleFlag ( d, m_intraSingleFlag ); 203 } 204 } 205 #endif 206 #endif 175 207 176 208 for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++) … … 216 248 m_cTEncTop.setDWeight ( isDepth ? m_iDWeight : 0 ); 217 249 #endif // H_3D_VSO 250 #if !HHI_TOOL_PARAMETERS_I2_J0107 218 251 #if H_3D_SPIVMP 219 252 m_cTEncTop.setSubPULog2Size (( isDepth || 0==layerIdInVps ) ? 0 : m_iSubPULog2Size ); 220 253 m_cTEncTop.setSubPUMPILog2Size ( !isDepth ? 0 : m_iSubPUMPILog2Size ); 221 254 #endif 255 #endif 222 256 #if H_3D_IC 223 257 m_cTEncTop.setUseIC ( vps.getViewIndex( layerId ) == 0 || isDepth ? false : m_abUseIC ); 224 258 m_cTEncTop.setUseICLowLatencyEnc ( m_bUseLowLatencyICEnc ); 225 259 #endif 226 //========== Depth intra modes ========== 260 261 262 #if HHI_TOOL_PARAMETERS_I2_J0107 263 m_cTEncTop.setUseDMM ( isDepth ? m_intraWedgeFlag : false ); 264 m_cTEncTop.setUseSDC ( isDepth ? m_intraSdcFlag : false ); 265 m_cTEncTop.setUseDLT ( isDepth ? m_useDLT : false ); 266 m_cTEncTop.setUseQTL ( isDepth ? m_bUseQTL : false ); 267 #else 268 //========== Depth intra modes ========== 227 269 #if H_3D_DIM 228 270 m_cTEncTop.setUseDMM ( isDepth ? m_useDMM : false ); 271 #if !HHI_TOOL_PARAMETERS_I2_J0107 229 272 #if H_3D_FCO 230 273 m_cTEncTop.setUseIVP ( vps.getViewIndex( layerId ) == 0 && isDepth ? m_useIVP : false ); … … 232 275 m_cTEncTop.setUseIVP ( isDepth ? m_useIVP : false ); 233 276 #endif 277 #endif 234 278 m_cTEncTop.setUseSDC ( isDepth ? m_useSDC : false ); 235 279 m_cTEncTop.setUseDLT ( isDepth ? m_useDLT : false ); 236 280 #endif 281 282 237 283 #if H_3D_SINGLE_DEPTH 238 284 m_cTEncTop.setUseSingleDepthMode ( isDepth ? m_useSingleDepthMode : false ); … … 254 300 m_cTEncTop.setUseMPI ( isDepth ? m_bMPIFlag : false ); 255 301 #endif 302 #endif 303 #endif 304 305 306 #if HHI_TOOL_PARAMETERS_I2_J0107 307 m_cTEncTop.setSps3dExtension ( m_sps3dExtension ); 256 308 #endif 257 309 #endif // H_3D … … 885 937 #endif 886 938 939 #if !LGE_DDD_REMOVAL_J0042_J0030 887 940 #if H_3D_DDD 888 941 m_acTEncTopList[ layer ]->getSliceEncoder()->setDDDPar( m_cCameraData.getCodedScale()[0][ m_acTEncTopList[layer]->getViewIndex() ], 889 942 m_cCameraData.getCodedOffset()[0][ m_acTEncTopList[layer]->getViewIndex() ], 890 943 m_cCameraData.getCamParsCodedPrecision() ); 944 #endif 891 945 #endif 892 946 Int iNumEncoded = 0; … … 1320 1374 } 1321 1375 1376 #if H_MV_FIX_NUM_VIEWS 1377 vps.initNumViews(); 1378 #endif 1322 1379 Int maxViewId = xGetMax( m_viewId ); 1323 1380 … … 1344 1401 vps.setDirectDependencyType( depLayer, refLayer, -1 ); 1345 1402 } 1346 1403 } 1347 1404 1348 1405 Int defaultDirectDependencyType = -1; … … 1375 1432 vps.setDefaultDirectDependencyFlag( defaultDirectDependencyFlag ); 1376 1433 vps.setDefaultDirectDependencyType( defaultDirectDependencyFlag ? defaultDirectDependencyType : -1 ); 1434 1435 #if HHI_DEPENDENCY_SIGNALLING_I1_J0107 1436 vps.setRefLayers(); 1437 #endif 1377 1438 1378 1439 // Max sub layers, + presence flag … … 1393 1454 vps.setVpsSubLayersMaxMinus1PresentFlag( subLayersMaxMinus1PresentFlag ); 1394 1455 1395 1456 #if HHI_DEPENDENCY_SIGNALLING_I1_J0107 1457 // Max temporal id for inter layer reference pictures 1458 for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++) 1459 { 1460 Int refLayerIdInNuh = vps.getLayerIdInNuh( refLayerIdInVps ); 1461 for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++) 1462 { 1463 Int curLayerIdInNuh = vps.getLayerIdInNuh( curLayerIdInVps ); 1464 #if H_3D 1465 Int maxTid = -1; 1466 if ( vps.getDirectDependencyFlag( curLayerIdInVps, refLayerIdInVps ) ) 1467 { 1468 if ( m_depthFlag[ curLayerIdInVps] == m_depthFlag[ refLayerIdInVps ] ) 1469 { 1470 #endif 1471 for( Int i = 0; i < ( getGOPSize() + 1); i++ ) 1472 { 1473 GOPEntry geCur = m_GOPListMvc[curLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )]; 1474 GOPEntry geRef = m_GOPListMvc[refLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )]; 1475 for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++) 1476 { 1477 #if H_3D 1478 if ( vps.getIdRefListLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[ j ] ) == refLayerIdInNuh ) 1479 #else 1480 if ( vps.getIdDirectRefLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[ j ] ) == refLayerIdInNuh ) 1481 #endif 1482 { 1483 Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 ); 1484 Bool refLayerZero = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 ); 1485 maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId ); 1486 } 1487 } 1488 } 1489 #if H_3D 1490 } 1491 else 1492 { 1493 #if HHI_TOOL_PARAMETERS_I2_J0107 1494 if( m_depthFlag[ curLayerIdInVps ] && ( m_mpiFlag|| m_qtPredFlag || m_intraContourFlag ) ) 1495 #else 1496 if( m_depthFlag[ curLayerIdInVps ] && ( m_bMPIFlag || m_bLimQtPredFlag || m_useIVP ) ) 1497 #endif 1498 { 1499 Int nuhLayerIdTex = vps.getLayerIdInNuh( vps.getViewIndex( curLayerIdInNuh ), false ); 1500 if ( nuhLayerIdTex == refLayerIdInNuh ) 1501 { 1502 maxTid = std::max( maxTid, vps.getSubLayersVpsMaxMinus1( refLayerIdInVps) + 1 ); 1503 } 1504 } 1505 #if HHI_TOOL_PARAMETERS_I2_J0107 1506 if( !m_depthFlag[ curLayerIdInVps ] && vps.getNumRefListLayers( curLayerIdInNuh) > 0 && ( m_depthRefinementFlag || m_viewSynthesisPredFlag || m_depthBasedBlkPartFlag ) ) 1507 #else 1508 if( !m_depthFlag[ curLayerIdInVps ] && vps.getNumRefListLayers( curLayerIdInNuh) > 0 && ( m_depthRefinementFlag || m_viewSynthesisPredFlag || m_bUseDBBP) ) 1509 #endif 1510 { 1511 Int maxPresentTid =-1; 1512 Bool allPresent = true; 1513 for (Int i = 0; i < vps.getNumRefListLayers( curLayerIdInNuh); i++ ) 1514 { 1515 Int nuhLayerIdDep = vps.getLayerIdInNuh( vps.getViewIndex( vps.getIdRefListLayer(curLayerIdInNuh, i ) ), true ); 1516 if ( nuhLayerIdDep== refLayerIdInNuh ) 1517 { 1518 maxPresentTid= std::max( maxTid, vps.getSubLayersVpsMaxMinus1( refLayerIdInVps) + 1 ); 1519 } 1520 else 1521 { 1522 allPresent = false; 1523 } 1524 } 1525 1526 if ( allPresent ) 1527 { 1528 maxTid= std::max( maxTid, maxPresentTid ); 1529 } 1530 } 1531 } 1532 } 1533 vps.setMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps, maxTid + 1 ); 1534 #endif 1535 } 1536 } 1537 1538 // Max temporal id for inter layer reference pictures presence flag 1539 Bool maxTidRefPresentFlag = false; 1540 for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++) 1541 { 1542 for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++) 1543 { 1544 maxTidRefPresentFlag = maxTidRefPresentFlag || ( vps.getMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps ) != 7 ); 1545 } 1546 } 1547 vps.setMaxTidRefPresentFlag( maxTidRefPresentFlag ); 1548 #else 1396 1549 // Max temporal id for inter layer reference pictures + presence flag 1397 1550 Bool maxTidRefPresentFlag = false; … … 1400 1553 for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++) 1401 1554 { 1402 Int maxTid = -1; 1403 for( Int i = 0; i < ( getGOPSize() + 1); i++ ) 1404 { 1405 GOPEntry geCur = m_GOPListMvc[curLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )]; 1406 GOPEntry geRef = m_GOPListMvc[refLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )]; 1407 for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++) 1555 Int maxTid = -1; 1556 for( Int i = 0; i < ( getGOPSize() + 1); i++ ) 1408 1557 { 1409 if ( m_directRefLayers[ curLayerIdInVps ][ geCur.m_interLayerPredLayerIdc[ j ]] == refLayerIdInVps ) 1558 GOPEntry geCur = m_GOPListMvc[curLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )]; 1559 GOPEntry geRef = m_GOPListMvc[refLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )]; 1560 for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++) 1410 1561 { 1411 Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 ); 1412 Bool refLayerZero = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 ); 1413 maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId ); 1562 if ( m_directRefLayers[ curLayerIdInVps ][ geCur.m_interLayerPredLayerIdc[ j ]] == refLayerIdInVps ) 1563 { 1564 Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 ); 1565 Bool refLayerZero = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 ); 1566 maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId ); 1567 } 1414 1568 } 1415 1569 } 1416 } 1417 vps.setMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps, maxTid + 1 ); 1418 maxTidRefPresentFlag = maxTidRefPresentFlag || ( maxTid != 6 ); 1570 vps.setMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps, maxTid + 1 ); 1571 maxTidRefPresentFlag = maxTidRefPresentFlag || ( maxTid != 6 ); 1419 1572 } 1420 1573 } 1421 1574 1422 1575 vps.setMaxTidRefPresentFlag( maxTidRefPresentFlag ); 1576 #endif 1577 1578 1423 1579 // Max one active ref layer flag 1424 1580 Bool maxOneActiveRefLayerFlag = true; … … 1430 1586 maxOneActiveRefLayerFlag = maxOneActiveRefLayerFlag && (ge.m_numActiveRefLayerPics <= 1); 1431 1587 } 1432 }1588 } 1433 1589 1434 1590 vps.setMaxOneActiveRefLayerFlag( maxOneActiveRefLayerFlag ); … … 1441 1597 vps.setPocLsbNotPresentFlag( layerIdInVps, true ); 1442 1598 } 1443 } 1599 } 1444 1600 1445 1601 // All Ref layers active flag … … 1447 1603 for ( Int layerIdInVps = 1; layerIdInVps < m_numberOfLayers && allRefLayersActiveFlag; layerIdInVps++) 1448 1604 { 1605 #if HHI_DEPENDENCY_SIGNALLING_I1_J0107 1606 Int layerIdInNuh = vps.getLayerIdInNuh( layerIdInVps ); 1607 #endif 1449 1608 for( Int i = 0; i < ( getGOPSize() + 1) && allRefLayersActiveFlag; i++ ) 1450 1609 { … … 1453 1612 1454 1613 // check if all reference layers when allRefLayerActiveFlag is equal to 1 are reference layer pictures specified in the gop entry 1614 #if HHI_DEPENDENCY_SIGNALLING_I1_J0107 1615 #if H_3D 1616 for (Int k = 0; k < vps.getNumRefListLayers( layerIdInNuh ) && allRefLayersActiveFlag; k++ ) 1617 { 1618 Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdRefListLayer( layerIdInNuh , k ) ); 1619 #else 1620 for (Int k = 0; k < vps.getNumDirectRefLayers( layerIdInNuh ) && allRefLayersActiveFlag; k++ ) 1621 { 1622 Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdDirectRefLayer( layerIdInNuh , k ) ); 1623 #endif 1624 #else 1455 1625 for (Int k = 0; k < m_directRefLayers[ layerIdInVps].size() && allRefLayersActiveFlag; k++ ) 1456 1626 { 1457 1627 Int refLayerIdInVps = vps.getLayerIdInVps( m_directRefLayers[ layerIdInVps ][ k ] ); 1628 #endif 1629 #if H_MV_FIX_REF_LAYER_PIC_FLAG 1630 if ( vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId && ( tId == 0 || vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId ) ) 1631 #else 1458 1632 if ( vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId && vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId ) 1633 #endif 1459 1634 { 1460 1635 Bool gopEntryFoundFlag = false; … … 1473 1648 { 1474 1649 Bool referenceLayerFoundFlag = false; 1650 #if HHI_DEPENDENCY_SIGNALLING_I1_J0107 1651 #if H_3D 1652 for (Int k = 0; k < vps.getNumRefListLayers( layerIdInNuh ); k++ ) 1653 { 1654 Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdRefListLayer( layerIdInNuh, k) ); 1655 #else 1656 for (Int k = 0; k < vps.getNumDirectRefLayers( layerIdInNuh ); k++ ) 1657 { 1658 Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdDirectRefLayer( layerIdInNuh, k) ); 1659 #endif 1660 #else 1475 1661 for (Int k = 0; k < m_directRefLayers[ layerIdInVps].size(); k++ ) 1476 1662 { 1477 1663 Int refLayerIdInVps = vps.getLayerIdInVps( m_directRefLayers[ layerIdInVps ][ k ] ); 1478 1664 #endif 1665 #if H_MV_FIX_REF_LAYER_PIC_FLAG 1666 if ( vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId && ( tId == 0 || vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId ) ) 1667 #else 1479 1668 if ( vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId && vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId ) 1669 #endif 1480 1670 { 1481 1671 referenceLayerFoundFlag = referenceLayerFoundFlag || ( ge.m_interLayerPredLayerIdc[l] == k ); … … 1489 1679 1490 1680 vps.setAllRefLayersActiveFlag( allRefLayersActiveFlag ); 1491 1681 #if !HHI_DEPENDENCY_SIGNALLING_I1_J0107 1492 1682 vps.setRefLayers(); 1683 #endif 1493 1684 }; 1685 1494 1686 1495 1687 GOPEntry* TAppEncTop::xGetGopEntry( Int layerIdInVps, Int poc ) … … 2018 2210 2019 2211 #if H_3D 2212 #if HHI_TOOL_PARAMETERS_I2_J0107 2213 #else 2020 2214 Void TAppEncTop::xSetVPSExtension2( TComVPS& vps ) 2021 2215 { … … 2091 2285 vps.setInterSDCFlag( layer, !isLayerZero && isDepth && m_bDepthInterSDCFlag ); 2092 2286 #endif 2287 #if MTK_SINGLE_DEPTH_VPS_FLAG_J0060 2288 vps.setSingleDepthModeFlag( layer, !isLayerZero && isDepth && m_useSingleDepthMode ); 2289 #endif 2093 2290 #if H_3D_IV_MERGE 2094 2291 #if H_3D_FCO … … 2100 2297 } 2101 2298 } 2299 #endif 2102 2300 2103 2301 Void TAppEncTop::xDeriveDltArray( TComVPS& vps, TComDLT& dlt )
Note: See TracChangeset for help on using the changeset viewer.