Ignore:
Timestamp:
5 Nov 2014, 19:13:24 (9 years ago)
Author:
tech
Message:

HHI_DEPENDENCY_SIGNALLING_I1_J0107: Encoder related modifications and cfg file changes
H_MV_FIX_REF_LAYER_PIC_FLAG: related fix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-12.2-dev2-HHI/source/App/TAppEncoder/TAppEncTop.cpp

    r1094 r1104  
    13461346      vps.setDirectDependencyType( depLayer, refLayer,    -1 );
    13471347    }
    1348     }
     1348  }
    13491349
    13501350  Int  defaultDirectDependencyType = -1;
     
    13771377  vps.setDefaultDirectDependencyFlag( defaultDirectDependencyFlag );       
    13781378  vps.setDefaultDirectDependencyType( defaultDirectDependencyFlag ? defaultDirectDependencyType : -1 );       
     1379
     1380#if HHI_DEPENDENCY_SIGNALLING_I1_J0107
     1381  vps.setRefLayers();
     1382#endif
    13791383
    13801384  // Max sub layers, + presence flag
     
    13951399  vps.setVpsSubLayersMaxMinus1PresentFlag( subLayersMaxMinus1PresentFlag );
    13961400
    1397 
     1401#if HHI_DEPENDENCY_SIGNALLING_I1_J0107
     1402  // Max temporal id for inter layer reference pictures
     1403  for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++)
     1404  {
     1405    Int refLayerIdInNuh = vps.getLayerIdInNuh( refLayerIdInVps );
     1406    for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++)
     1407    {
     1408      Int curLayerIdInNuh = vps.getLayerIdInNuh( curLayerIdInVps );     
     1409#if H_3D
     1410      Int maxTid = -1;
     1411      if ( vps.getDirectDependencyFlag( curLayerIdInVps, refLayerIdInVps ) )
     1412      {
     1413        if ( m_depthFlag[ curLayerIdInVps] == m_depthFlag[ refLayerIdInVps ] )
     1414        {
     1415#endif
     1416          for( Int i = 0; i < ( getGOPSize() + 1); i++ )
     1417          {       
     1418            GOPEntry geCur =  m_GOPListMvc[curLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1419            GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1420            for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++)
     1421            {
     1422#if H_3D
     1423              if ( vps.getIdRefListLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[ j ] ) == refLayerIdInNuh )
     1424#else
     1425              if ( vps.getIdDirectRefLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[ j ] ) == refLayerIdInNuh )
     1426#endif
     1427              {
     1428                Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 );
     1429                Bool refLayerZero   = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );
     1430                maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId );
     1431              }
     1432            }
     1433          }             
     1434#if H_3D
     1435        }
     1436        else
     1437        {       
     1438          if( m_depthFlag[ curLayerIdInVps ] && ( m_bMPIFlag || m_bLimQtPredFlag || m_useIVP  ) )
     1439          {         
     1440            Int nuhLayerIdTex = vps.getLayerIdInNuh( vps.getViewIndex( curLayerIdInNuh ), false );
     1441            if ( nuhLayerIdTex == refLayerIdInNuh )
     1442            {
     1443              maxTid = std::max( maxTid, vps.getSubLayersVpsMaxMinus1( refLayerIdInVps) + 1 );
     1444            }
     1445          }
     1446
     1447          if( !m_depthFlag[ curLayerIdInVps ] && vps.getNumRefListLayers( curLayerIdInNuh) > 0  && ( m_depthRefinementFlag || m_viewSynthesisPredFlag || m_bUseDBBP) )
     1448          { 
     1449            Int maxPresentTid =-1;
     1450            Bool allPresent = true;
     1451            for (Int i = 0; i < vps.getNumRefListLayers( curLayerIdInNuh); i++ )
     1452            {
     1453              Int nuhLayerIdDep = vps.getLayerIdInNuh( vps.getViewIndex( vps.getIdRefListLayer(curLayerIdInNuh, i ) ), true );
     1454              if ( nuhLayerIdDep== refLayerIdInNuh )
     1455              {
     1456                maxPresentTid= std::max( maxTid, vps.getSubLayersVpsMaxMinus1( refLayerIdInVps) + 1 );             
     1457              }
     1458              else
     1459              {
     1460                allPresent = false;
     1461              }
     1462            }
     1463
     1464            if ( allPresent )
     1465            {
     1466              maxTid= std::max( maxTid, maxPresentTid );             
     1467            }
     1468          }       
     1469        }
     1470      }
     1471      vps.setMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps, maxTid + 1 );
     1472#endif
     1473    }   
     1474  }
     1475
     1476  // Max temporal id for inter layer reference pictures presence flag
     1477  Bool maxTidRefPresentFlag = false;   
     1478  for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++)
     1479  {
     1480    for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++)
     1481    {
     1482        maxTidRefPresentFlag = maxTidRefPresentFlag || ( vps.getMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps ) != 7 );   
     1483    }
     1484  }
     1485  vps.setMaxTidRefPresentFlag( maxTidRefPresentFlag );
     1486#else
    13981487  // Max temporal id for inter layer reference pictures + presence flag
    13991488  Bool maxTidRefPresentFlag = false;
     
    14021491    for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++)
    14031492    {
    1404       Int maxTid = -1;
    1405       for( Int i = 0; i < ( getGOPSize() + 1); i++ )
    1406       {       
    1407         GOPEntry geCur =  m_GOPListMvc[curLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
    1408         GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
    1409         for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++)
     1493        Int maxTid = -1;
     1494        for( Int i = 0; i < ( getGOPSize() + 1); i++ )
    14101495        {       
    1411           if ( m_directRefLayers[ curLayerIdInVps ][ geCur.m_interLayerPredLayerIdc[ j ]] == refLayerIdInVps )
     1496          GOPEntry geCur =  m_GOPListMvc[curLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1497          GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1498          for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++)
    14121499          {
    1413             Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 );
    1414             Bool refLayerZero   = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );
    1415             maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId );
     1500            if ( m_directRefLayers[ curLayerIdInVps ][ geCur.m_interLayerPredLayerIdc[ j ]] == refLayerIdInVps )
     1501            {
     1502              Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 );
     1503              Bool refLayerZero   = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );
     1504              maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId );
     1505            }
    14161506          }
    14171507        }
    1418       }
    1419       vps.setMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps, maxTid + 1 );
    1420       maxTidRefPresentFlag = maxTidRefPresentFlag || ( maxTid != 6 );   
     1508        vps.setMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps, maxTid + 1 );
     1509        maxTidRefPresentFlag = maxTidRefPresentFlag || ( maxTid != 6 );   
    14211510    }
    14221511  }
    14231512
    14241513  vps.setMaxTidRefPresentFlag( maxTidRefPresentFlag );
     1514#endif 
     1515
     1516
    14251517  // Max one active ref layer flag
    14261518  Bool maxOneActiveRefLayerFlag = true; 
     
    14321524      maxOneActiveRefLayerFlag =  maxOneActiveRefLayerFlag && (ge.m_numActiveRefLayerPics <= 1);
    14331525    }           
    1434 }
     1526  }
    14351527
    14361528  vps.setMaxOneActiveRefLayerFlag( maxOneActiveRefLayerFlag );
     
    14431535      vps.setPocLsbNotPresentFlag( layerIdInVps,  true ); 
    14441536    }
    1445   }
     1537  } 
    14461538 
    14471539  // All Ref layers active flag
     
    14491541  for ( Int layerIdInVps = 1; layerIdInVps < m_numberOfLayers && allRefLayersActiveFlag; layerIdInVps++)
    14501542  {   
     1543#if HHI_DEPENDENCY_SIGNALLING_I1_J0107
     1544    Int layerIdInNuh = vps.getLayerIdInNuh( layerIdInVps );
     1545#endif
    14511546    for( Int i = 0; i < ( getGOPSize() + 1) && allRefLayersActiveFlag; i++ )
    14521547    {       
     
    14551550     
    14561551      // check if all reference layers when allRefLayerActiveFlag is equal to 1 are reference layer pictures specified in the gop entry
     1552#if HHI_DEPENDENCY_SIGNALLING_I1_J0107
     1553#if H_3D
     1554      for (Int k = 0; k < vps.getNumRefListLayers( layerIdInNuh ) && allRefLayersActiveFlag; k++ )
     1555      {
     1556        Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdRefListLayer( layerIdInNuh , k ) );
     1557#else
     1558      for (Int k = 0; k < vps.getNumDirectRefLayers( layerIdInNuh ) && allRefLayersActiveFlag; k++ )
     1559      {
     1560        Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdDirectRefLayer( layerIdInNuh , k ) );
     1561#endif
     1562#else
    14571563      for (Int k = 0; k < m_directRefLayers[ layerIdInVps].size() && allRefLayersActiveFlag; k++ )
    14581564      {
    14591565        Int refLayerIdInVps = vps.getLayerIdInVps( m_directRefLayers[ layerIdInVps ][ k ] );
     1566#endif
     1567#if H_MV_FIX_REF_LAYER_PIC_FLAG
     1568        if ( vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId  && ( tId == 0 || vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId )  )
     1569#else
    14601570        if ( vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId  && vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId )
     1571#endif
    14611572        {
    14621573          Bool gopEntryFoundFlag = false;
     
    14751586      {   
    14761587        Bool referenceLayerFoundFlag = false;
     1588#if HHI_DEPENDENCY_SIGNALLING_I1_J0107
     1589#if H_3D
     1590        for (Int k = 0; k < vps.getNumRefListLayers( layerIdInNuh ); k++ )
     1591        {
     1592          Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdRefListLayer( layerIdInNuh, k) );
     1593#else
     1594        for (Int k = 0; k < vps.getNumDirectRefLayers( layerIdInNuh ); k++ )
     1595        {
     1596          Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdDirectRefLayer( layerIdInNuh, k) );
     1597#endif
     1598#else
    14771599        for (Int k = 0; k < m_directRefLayers[ layerIdInVps].size(); k++ )
    14781600        {
    14791601          Int refLayerIdInVps = vps.getLayerIdInVps( m_directRefLayers[ layerIdInVps ][ k ] );
    1480 
     1602#endif
     1603#if H_MV_FIX_REF_LAYER_PIC_FLAG
     1604          if ( vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId  && ( tId == 0 || vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId )  )
     1605#else
    14811606          if ( vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId  && vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId )
     1607#endif
    14821608          {         
    14831609            referenceLayerFoundFlag = referenceLayerFoundFlag || ( ge.m_interLayerPredLayerIdc[l] == k );
     
    14911617
    14921618  vps.setAllRefLayersActiveFlag( allRefLayersActiveFlag );
    1493 
     1619#if !HHI_DEPENDENCY_SIGNALLING_I1_J0107
    14941620  vps.setRefLayers();
     1621#endif
    14951622};
     1623
    14961624
    14971625GOPEntry* TAppEncTop::xGetGopEntry( Int layerIdInVps, Int poc )
Note: See TracChangeset for help on using the changeset viewer.