Ignore:
Timestamp:
13 Jul 2013, 10:26:41 (11 years ago)
Author:
tech
Message:

MergeMerged tags/HTM-DEV-1.0.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-DEV-0.3-dev2/source/App/TAppEncoder/TAppEncTop.cpp

    r532 r534  
    118118  xSetLayerIds             ( vps );   
    119119  xSetDimensionIdAndLength ( vps );
    120   xSetDirectDependencyFlags( vps );
     120  xSetDependencies( vps );
     121  xSetProfileTierLevel     ( vps );
     122  xSetLayerSets            ( vps );
    121123#if H_3D
    122124  vps.initViewIndex();
     
    10791081}
    10801082
    1081 Void TAppEncTop::xSetDirectDependencyFlags( TComVPS& vps )
    1082 {
    1083   for( Int layer = 0; layer < m_numberOfLayers; layer++ )
    1084   {
    1085     if( m_GOPListMvc[layer][MAX_GOP].m_POC == -1 )
    1086     {
    1087       continue;
    1088     }
    1089     for( Int i = 0; i < getGOPSize()+1; i++ )
    1090     {
    1091       GOPEntry ge = ( i < getGOPSize() ) ? m_GOPListMvc[layer][i] : m_GOPListMvc[layer][MAX_GOP];
    1092       for( Int j = 0; j < ge.m_numInterViewRefPics; j++ )
     1083Void TAppEncTop::xSetDependencies( TComVPS& vps )
     1084{
     1085  // Direct dependency flags + dependency types
     1086  for( Int depLayer = 1; depLayer < MAX_NUM_LAYERS; depLayer++ )
     1087  {
     1088    for( Int refLayer = 0; refLayer < MAX_NUM_LAYERS; refLayer++ )
     1089    {
     1090      vps.setDirectDependencyFlag( depLayer, refLayer, false);
     1091      vps.setDirectDependencyType( depLayer, refLayer,    -1 );
     1092    }
     1093    }
     1094  for( Int depLayer = 1; depLayer < m_numberOfLayers; depLayer++ )
     1095  {
     1096    Int numRefLayers = (Int) m_directRefLayers[depLayer].size();
     1097    assert(  numRefLayers == (Int) m_dependencyTypes[depLayer].size() );
     1098    for( Int i = 0; i < numRefLayers; i++ )
     1099    {
     1100      Int refLayer = m_directRefLayers[depLayer][i];
     1101      vps.setDirectDependencyFlag( depLayer, refLayer, true);
     1102      vps.setDirectDependencyType( depLayer, refLayer,m_dependencyTypes[depLayer][i]);
     1103    }
     1104  }
     1105
     1106  // Max temporal id for inter layer reference pictures
     1107  for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++)
     1108    {
     1109    Int maxTid = -1;
     1110    for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++)
    10931111      {
    1094         Int interLayerRef = layer + ge.m_interViewRefs[j];
    1095         vps.setDirectDependencyFlag( layer, interLayerRef, true );
     1112      for( Int i = 0; i < getGOPSize(); i++ )
     1113      {       
     1114        GOPEntry geCur =  m_GOPListMvc[curLayerIdInVps][i];
     1115        GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][i];
     1116       
     1117        for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++)
     1118        {       
     1119          if ( m_directRefLayers[ curLayerIdInVps ][ geCur.m_interLayerPredLayerIdc[ j ]] == refLayerIdInVps )
     1120          {
     1121            maxTid = std::max( maxTid, geRef.m_temporalId );
     1122          }
     1123        }
    10961124      }
    10971125    }
    1098   }
    1099 
    1100   vps.checkVPSExtensionSyntax();
    1101   vps.calcIvRefLayers();
    1102 }
     1126    vps.setMaxTidIlRefPicPlus1( refLayerIdInVps, maxTid + 1 );
     1127  }
     1128
     1129  // Max one active ref layer flag
     1130  Bool maxOneActiveRefLayerFlag = true; 
     1131  for ( Int currLayerIdInVps = 1; currLayerIdInVps < m_numberOfLayers && maxOneActiveRefLayerFlag; currLayerIdInVps++)
     1132  {
     1133    for( Int i = 0; i < ( getGOPSize() + 1) && maxOneActiveRefLayerFlag; i++ )
     1134    {       
     1135      GOPEntry ge =  m_GOPListMvc[currLayerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ];
     1136      maxOneActiveRefLayerFlag =  maxOneActiveRefLayerFlag && (ge.m_numActiveRefLayerPics <= 1);
     1137    }           
     1138}
     1139
     1140  vps.setMaxOneActiveRefLayerFlag( maxOneActiveRefLayerFlag );
     1141  vps.setRefLayers();
     1142};
    11031143
    11041144Void TAppEncTop::xSetLayerIds( TComVPS& vps )
     
    11091149  Int  maxNuhLayerId = nuhLayerIdPresentFlag ? xGetMax( m_layerIdInNuh ) : ( m_numberOfLayers - 1 ) ;
    11101150
    1111   vps.setMaxNuhLayerId( maxNuhLayerId );
     1151  vps.setVpsMaxLayerId( maxNuhLayerId );
    11121152  vps.setVpsNuhLayerIdPresentFlag( nuhLayerIdPresentFlag );
    11131153
     
    11251165    maxVec = max( vec[i], maxVec );
    11261166  return maxVec;
     1167}
     1168
     1169Void TAppEncTop::xSetProfileTierLevel( TComVPS& vps )
     1170{
     1171  const Int vpsNumProfileTierLevelMinus1 = 0; //TBD
     1172  vps.setVpsNumProfileTierLevelMinus1( vpsNumProfileTierLevelMinus1 );
     1173 
     1174  for (Int i = 0; i <= vps.getVpsNumProfileTierLevelMinus1(); i++ )
     1175  {
     1176    vps.setVpsProfilePresentFlag( i, true );
     1177  }
     1178}
     1179
     1180
     1181Void TAppEncTop::xSetLayerSets( TComVPS& vps )
     1182{   
     1183  // Layer sets
     1184  vps.setVpsNumLayerSetsMinus1   ( m_vpsNumLayerSets - 1 );
     1185  vps.setVpsNumberLayerSetsMinus1( vps.getVpsNumLayerSetsMinus1() );
     1186   
     1187  for (Int lsIdx = 0; lsIdx < m_vpsNumLayerSets; lsIdx++ )
     1188  {
     1189    for( Int layerId = 0; layerId < MAX_NUM_LAYER_IDS; layerId++ )
     1190    {
     1191      vps.setLayerIdIncludedFlag( false, lsIdx, layerId );
     1192    }
     1193    for ( Int i = 0; i < m_layerIdsInSets[lsIdx].size(); i++)
     1194    {       
     1195      vps.setLayerIdIncludedFlag( true, lsIdx, vps.getLayerIdInNuh( m_layerIdsInSets[lsIdx][i] ) );
     1196    }
     1197  }
     1198
     1199  Int numAddOuputLayerSets = (Int) m_outputLayerSetIdx.size();
     1200  // Additional output layer sets + profileLevelTierIdx
     1201  vps.setDefaultOneTargetOutputLayerFlag   ( m_defaultOneTargetOutputLayerFlag );
     1202  vps.setMoreOutputLayerSetsThanDefaultFlag( numAddOuputLayerSets       != 0 );   
     1203  vps.setNumAddOutputLayerSetsMinus1       ( numAddOuputLayerSets - 1        );
     1204
     1205  for (Int lsIdx = 1; lsIdx < m_vpsNumLayerSets; lsIdx++)
     1206  {
     1207    vps.setProfileLevelTierIdx( lsIdx, m_profileLevelTierIdx[ lsIdx ] );
     1208  }
     1209
     1210  for (Int addOutLs = 0; addOutLs < numAddOuputLayerSets; addOutLs++ )
     1211  {
     1212    vps.setProfileLevelTierIdx( m_vpsNumLayerSets + addOutLs, m_profileLevelTierIdx[ addOutLs ] );
     1213
     1214    Int refLayerSetIdx = m_outputLayerSetIdx[ addOutLs ];     
     1215    vps.setOutputLayerSetIdxMinus1( m_vpsNumLayerSets + addOutLs, refLayerSetIdx - 1 );
     1216
     1217    for (Int i = 0; i < m_layerIdsInSets[ refLayerSetIdx].size(); i++ )
     1218    {
     1219      Bool outputLayerFlag = false;
     1220      for (Int j = 0; j < m_layerIdsInAddOutputLayerSet[ addOutLs ].size(); j++ )
     1221      {
     1222        if (  m_layerIdsInAddOutputLayerSet[addOutLs][ j ] == m_layerIdsInSets[ refLayerSetIdx][ i ] )
     1223        {
     1224          outputLayerFlag = true;
     1225          break;
     1226        }
     1227      }
     1228      vps.setOutputLayerFlag( m_vpsNumLayerSets + addOutLs, i, outputLayerFlag );       
     1229    }
     1230  }
    11271231}
    11281232#endif
Note: See TracChangeset for help on using the changeset viewer.