Changeset 1124 in 3DVCSoftware for trunk/source/App/TAppEncoder/TAppEncTop.cpp


Ignore:
Timestamp:
10 Nov 2014, 12:22:20 (9 years ago)
Author:
tech
Message:

Merged branch 12.2-dev0@1123

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/App/TAppEncoder/TAppEncTop.cpp

    r1084 r1124  
    140140  xSetVPSVUI               ( vps );
    141141#if H_3D
     142#if !HHI_TOOL_PARAMETERS_I2_J0107
    142143  xSetVPSExtension2        ( vps );
     144#endif
    143145  m_ivPicLists.setVPS      ( &vps );
    144146  xDeriveDltArray          ( vps, dlt );
     
    173175    vps.printPTL();
    174176  }
     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
    175207
    176208  for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++)
     
    216248    m_cTEncTop.setDWeight                      ( isDepth ? m_iDWeight             : 0     );
    217249#endif // H_3D_VSO
     250#if !HHI_TOOL_PARAMETERS_I2_J0107
    218251#if H_3D_SPIVMP
    219252    m_cTEncTop.setSubPULog2Size                 (( isDepth || 0==layerIdInVps ) ? 0 : m_iSubPULog2Size   );
    220253    m_cTEncTop.setSubPUMPILog2Size              ( !isDepth ? 0 : m_iSubPUMPILog2Size   );
    221254#endif
     255#endif
    222256#if H_3D_IC
    223257    m_cTEncTop.setUseIC                        ( vps.getViewIndex( layerId ) == 0 || isDepth ? false : m_abUseIC );
    224258    m_cTEncTop.setUseICLowLatencyEnc           ( m_bUseLowLatencyICEnc );
    225259#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 ==========
    227269#if H_3D_DIM
    228270    m_cTEncTop.setUseDMM                       ( isDepth ? m_useDMM               : false );
     271#if !HHI_TOOL_PARAMETERS_I2_J0107
    229272#if H_3D_FCO
    230273    m_cTEncTop.setUseIVP                       ( vps.getViewIndex( layerId ) == 0 && isDepth ? m_useIVP               : false );
     
    232275    m_cTEncTop.setUseIVP                       ( isDepth ? m_useIVP               : false );
    233276#endif
     277#endif
    234278    m_cTEncTop.setUseSDC                       ( isDepth ? m_useSDC               : false );
    235279    m_cTEncTop.setUseDLT                       ( isDepth ? m_useDLT               : false );
    236280#endif
     281
     282
    237283#if H_3D_SINGLE_DEPTH
    238284    m_cTEncTop.setUseSingleDepthMode           ( isDepth ? m_useSingleDepthMode   : false );
     
    254300    m_cTEncTop.setUseMPI                       ( isDepth ? m_bMPIFlag    : false );
    255301#endif
     302#endif
     303#endif
     304
     305
     306#if HHI_TOOL_PARAMETERS_I2_J0107
     307  m_cTEncTop.setSps3dExtension                 ( m_sps3dExtension );
    256308#endif
    257309#endif // H_3D
     
    885937#endif
    886938
     939#if !LGE_DDD_REMOVAL_J0042_J0030
    887940#if H_3D_DDD
    888941          m_acTEncTopList[ layer ]->getSliceEncoder()->setDDDPar( m_cCameraData.getCodedScale()[0][ m_acTEncTopList[layer]->getViewIndex() ],
    889942              m_cCameraData.getCodedOffset()[0][ m_acTEncTopList[layer]->getViewIndex() ],
    890943              m_cCameraData.getCamParsCodedPrecision() );
     944#endif
    891945#endif
    892946        Int   iNumEncoded = 0;
     
    13201374  }
    13211375
     1376#if H_MV_FIX_NUM_VIEWS
     1377  vps.initNumViews();
     1378#endif
    13221379  Int maxViewId = xGetMax( m_viewId );
    13231380
     
    13441401      vps.setDirectDependencyType( depLayer, refLayer,    -1 );
    13451402    }
    1346     }
     1403  }
    13471404
    13481405  Int  defaultDirectDependencyType = -1;
     
    13751432  vps.setDefaultDirectDependencyFlag( defaultDirectDependencyFlag );       
    13761433  vps.setDefaultDirectDependencyType( defaultDirectDependencyFlag ? defaultDirectDependencyType : -1 );       
     1434
     1435#if HHI_DEPENDENCY_SIGNALLING_I1_J0107
     1436  vps.setRefLayers();
     1437#endif
    13771438
    13781439  // Max sub layers, + presence flag
     
    13931454  vps.setVpsSubLayersMaxMinus1PresentFlag( subLayersMaxMinus1PresentFlag );
    13941455
    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
    13961549  // Max temporal id for inter layer reference pictures + presence flag
    13971550  Bool maxTidRefPresentFlag = false;
     
    14001553    for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++)
    14011554    {
    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++ )
    14081557        {       
    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++)
    14101561          {
    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            }
    14141568          }
    14151569        }
    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 );   
    14191572    }
    14201573  }
    14211574
    14221575  vps.setMaxTidRefPresentFlag( maxTidRefPresentFlag );
     1576#endif 
     1577
     1578
    14231579  // Max one active ref layer flag
    14241580  Bool maxOneActiveRefLayerFlag = true; 
     
    14301586      maxOneActiveRefLayerFlag =  maxOneActiveRefLayerFlag && (ge.m_numActiveRefLayerPics <= 1);
    14311587    }           
    1432 }
     1588  }
    14331589
    14341590  vps.setMaxOneActiveRefLayerFlag( maxOneActiveRefLayerFlag );
     
    14411597      vps.setPocLsbNotPresentFlag( layerIdInVps,  true ); 
    14421598    }
    1443   }
     1599  } 
    14441600 
    14451601  // All Ref layers active flag
     
    14471603  for ( Int layerIdInVps = 1; layerIdInVps < m_numberOfLayers && allRefLayersActiveFlag; layerIdInVps++)
    14481604  {   
     1605#if HHI_DEPENDENCY_SIGNALLING_I1_J0107
     1606    Int layerIdInNuh = vps.getLayerIdInNuh( layerIdInVps );
     1607#endif
    14491608    for( Int i = 0; i < ( getGOPSize() + 1) && allRefLayersActiveFlag; i++ )
    14501609    {       
     
    14531612     
    14541613      // 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
    14551625      for (Int k = 0; k < m_directRefLayers[ layerIdInVps].size() && allRefLayersActiveFlag; k++ )
    14561626      {
    14571627        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
    14581632        if ( vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId  && vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId )
     1633#endif
    14591634        {
    14601635          Bool gopEntryFoundFlag = false;
     
    14731648      {   
    14741649        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
    14751661        for (Int k = 0; k < m_directRefLayers[ layerIdInVps].size(); k++ )
    14761662        {
    14771663          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
    14791668          if ( vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId  && vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId )
     1669#endif
    14801670          {         
    14811671            referenceLayerFoundFlag = referenceLayerFoundFlag || ( ge.m_interLayerPredLayerIdc[l] == k );
     
    14891679
    14901680  vps.setAllRefLayersActiveFlag( allRefLayersActiveFlag );
    1491 
     1681#if !HHI_DEPENDENCY_SIGNALLING_I1_J0107
    14921682  vps.setRefLayers();
     1683#endif
    14931684};
     1685
    14941686
    14951687GOPEntry* TAppEncTop::xGetGopEntry( Int layerIdInVps, Int poc )
     
    20182210
    20192211#if H_3D
     2212#if HHI_TOOL_PARAMETERS_I2_J0107
     2213#else
    20202214Void TAppEncTop::xSetVPSExtension2( TComVPS& vps )
    20212215{
     
    20912285    vps.setInterSDCFlag( layer, !isLayerZero && isDepth && m_bDepthInterSDCFlag );
    20922286#endif
     2287#if MTK_SINGLE_DEPTH_VPS_FLAG_J0060
     2288    vps.setSingleDepthModeFlag( layer, !isLayerZero && isDepth && m_useSingleDepthMode );         
     2289#endif
    20932290#if H_3D_IV_MERGE
    20942291#if H_3D_FCO
     
    21002297  } 
    21012298}
     2299#endif
    21022300
    21032301Void TAppEncTop::xDeriveDltArray( TComVPS& vps, TComDLT& dlt )
Note: See TracChangeset for help on using the changeset viewer.