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


Ignore:
Timestamp:
11 Sep 2013, 14:40:25 (11 years ago)
Author:
tech
Message:

Merged 8.0-dev0@621 (MV-HEVC 5 HLS).

File:
1 edited

Legend:

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

    r608 r622  
    8888    vps.setTemporalNestingFlag(true);
    8989  }
     90#if H_MV5
     91  vps.setMaxLayersMinus1( m_numberOfLayers - 1);
     92#else
    9093  vps.setMaxLayers( m_numberOfLayers );
     94#endif
    9195  for(Int i = 0; i < MAX_TLAYER; i++)
    9296  {
     
    120124  xSetDependencies( vps );
    121125  xSetProfileTierLevel     ( vps );
     126#if H_MV5
     127  xSetRepFormat            ( vps );
     128#endif
    122129  xSetLayerSets            ( vps );
     130#if H_MV5
     131  xSetVPSVUI               ( vps );
     132#endif
    123133#if H_3D
     134#if !H_MV5
    124135  vps.initViewIndex();
     136#endif
    125137  xSetVPSExtension2        ( vps );
    126138  m_ivPicLists.setVPS      ( &vps );
    127139#endif
    128140
     141
     142#if H_MV5
     143  for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++)
     144#else
    129145  for(Int layer = 0; layer < m_numberOfLayers; layer++)
     146#endif
    130147  {
    131148    m_frameRcvd                 .push_back(0);
     
    134151    m_acTVideoIOYuvReconFileList.push_back(new TVideoIOYuv);
    135152    m_picYuvRec                 .push_back(new TComList<TComPicYuv*>) ;
    136 
     153#if H_MV5   
     154    m_ivPicLists.push_back( m_acTEncTopList[ layerIdInVps ]->getListPic()  );
     155    TEncTop& m_cTEncTop = *m_acTEncTopList[ layerIdInVps ];  // It is not a member, but this name helps avoiding code duplication !!!
     156
     157    Int layerId = vps.getLayerIdInNuh( layerIdInVps );
     158    m_cTEncTop.setLayerIdInVps                 ( layerIdInVps );
     159    m_cTEncTop.setLayerId                      ( layerId );   
     160    m_cTEncTop.setViewId                       ( vps.getViewId      (  layerId ) );
     161    m_cTEncTop.setViewIndex                    ( vps.getViewIndex   (  layerId ) );
     162#else
    137163    m_ivPicLists.push_back( m_acTEncTopList[ layer ]->getListPic()  );
    138164    TEncTop& m_cTEncTop = *m_acTEncTopList[ layer ];  // It is not a member, but this name helps avoiding code duplication !!!
     
    141167    m_cTEncTop.setLayerId                      ( vps.getLayerIdInNuh( layer ) );   
    142168    m_cTEncTop.setViewId                       ( vps.getViewId      ( layer ) );
     169
     170#endif
    143171#if H_3D
     172#if H_MV5
     173    Bool isDepth = ( vps.getDepthId     ( layerId ) != 0 ) ;
     174#else
    144175    Bool isDepth = ( vps.getDepthId     ( layer ) != 0 ) ;
    145176    m_cTEncTop.setViewIndex                    ( vps.getViewIndex   ( layer ) );
     177#endif
    146178    m_cTEncTop.setIsDepth                      ( isDepth );
    147179    //====== Camera Parameters =========
     
    169201    m_cTEncTop.setDWeight                      ( isDepth ? m_iDWeight             : 0     );
    170202#endif // H_3D_VSO
     203#if H_MV5
     204#if H_3D_ARP
     205    //====== Advanced Inter-view Residual Prediction =========
     206    m_cTEncTop.setUseAdvRP                     ( ( isDepth || 0==layerIdInVps ) ? 0 : m_uiUseAdvResPred );
     207    m_cTEncTop.setARPStepNum                   ( ( isDepth || 0==layerIdInVps ) ? 1 : H_3D_ARP_WFNR     );
     208#endif
     209#if H_3D_IC
     210    m_cTEncTop.setUseIC                        ( vps.getViewIndex( layerId ) == 0 ? false : m_abUseIC[isDepth ? 1 : 0] );
     211#endif
     212#else
    171213#if H_3D_ARP
    172214    //====== Advanced Inter-view Residual Prediction =========
     
    176218#if H_3D_IC
    177219    m_cTEncTop.setUseIC                        ( vps.getViewIndex( layer ) == 0 ? false : m_abUseIC[isDepth ? 1 : 0] );
     220#endif
    178221#endif
    179222  //========== Depth intra modes ==========
     
    217260  m_cTEncTop.setGOPSize                      ( m_iGOPSize );
    218261#if H_MV
     262#if H_MV5
     263m_cTEncTop.setGopList                      ( m_GOPListMvc[layerIdInVps] );
     264  m_cTEncTop.setExtraRPSs                    ( m_extraRPSsMvc[layerIdInVps] );
     265  for(Int i = 0; i < MAX_TLAYER; i++)
     266  {
     267    m_cTEncTop.setNumReorderPics             ( m_numReorderPicsMvc[layerIdInVps][i], i );
     268    m_cTEncTop.setMaxDecPicBuffering         ( m_maxDecPicBufferingMvc[layerIdInVps][i], i );
     269  }
     270#else
    219271  m_cTEncTop.setGopList                      ( m_GOPListMvc[layer] );
    220272  m_cTEncTop.setExtraRPSs                    ( m_extraRPSsMvc[layer] );
     
    224276    m_cTEncTop.setMaxDecPicBuffering         ( m_maxDecPicBufferingMvc[layer][i], i );
    225277  }
     278#endif
    226279#else
    227280  m_cTEncTop.setGopList                      ( m_GOPList );
     
    238291  }
    239292#if H_MV
     293#if H_MV5
     294  m_cTEncTop.setQP                           ( m_iQP[layerIdInVps] );
     295#else
    240296  m_cTEncTop.setQP                           ( m_iQP[layer] );
     297#endif
    241298#else
    242299  m_cTEncTop.setQP                           ( m_iQP );
     
    246303
    247304#if H_MV
     305#if H_MV5
     306  m_cTEncTop.setMaxTempLayer                 ( m_maxTempLayerMvc[layerIdInVps] );
     307#else
    248308  m_cTEncTop.setMaxTempLayer                 ( m_maxTempLayerMvc[layer] );
     309#endif
    249310#else
    250311  m_cTEncTop.setMaxTempLayer                 ( m_maxTempLayer );
     
    256317  //====== Loop/Deblock Filter ========
    257318#if H_MV
     319#if H_MV5
     320  m_cTEncTop.setLoopFilterDisable            ( m_bLoopFilterDisable[layerIdInVps]);
     321#else
    258322  m_cTEncTop.setLoopFilterDisable            ( m_bLoopFilterDisable[layer]);
     323#endif
    259324#else
    260325  m_cTEncTop.setLoopFilterDisable            ( m_bLoopFilterDisable       );
     
    286351
    287352#if H_MV
     353#if H_MV5
     354  if ((m_iMaxDeltaQP == 0 ) && (m_iQP[layerIdInVps] == lowestQP) && (m_useLossless == true))
     355#else
    288356  if ((m_iMaxDeltaQP == 0 ) && (m_iQP[layer] == lowestQP) && (m_useLossless == true))
     357#endif
    289358#else
    290359  if ((m_iMaxDeltaQP == 0 ) && (m_iQP == lowestQP) && (m_useLossless == true))
     
    303372  m_cTEncTop.setUseLossless                  ( m_useLossless );
    304373#if H_MV
     374#if H_MV5
     375  m_cTEncTop.setdQPs                         ( m_aidQP[layerIdInVps]   );
     376#else
    305377  m_cTEncTop.setdQPs                         ( m_aidQP[layer]   );
     378#endif
    306379#else
    307380  m_cTEncTop.setdQPs                         ( m_aidQP        );
     
    362435  m_cTEncTop.setLFCrossSliceBoundaryFlag( m_bLFCrossSliceBoundaryFlag );
    363436#if H_MV
     437#if H_MV5
     438  m_cTEncTop.setUseSAO ( m_bUseSAO[layerIdInVps] );
     439#else
    364440  m_cTEncTop.setUseSAO ( m_bUseSAO[layer] );
     441#endif
    365442#else
    366443  m_cTEncTop.setUseSAO ( m_bUseSAO );
     
    10441121Void TAppEncTop::xSetDimensionIdAndLength( TComVPS& vps )
    10451122{   
     1123#if H_MV5
     1124  vps.setScalabilityMaskFlag( m_scalabilityMask );
     1125#else
    10461126  vps.setScalabilityMask( m_scalabilityMask );
     1127#endif
    10471128  for( Int dim = 0; dim < m_dimIds.size(); dim++ )
    10481129  {
    10491130    vps.setDimensionIdLen( dim, m_dimensionIdLen[ dim ] );
     1131#if H_MV5
     1132    for( Int layer = 0; layer <= vps.getMaxLayersMinus1(); layer++ )
     1133#else
    10501134    for( Int layer = 0; layer < vps.getMaxLayers(); layer++ )
     1135#endif
     1136
    10511137    {       
    10521138      vps.setDimensionId( layer, dim, m_dimIds[ dim ][ layer ] );       
    10531139    } 
    10541140  }
     1141
     1142#if H_MV5
     1143  Int maxViewId = xGetMax( m_viewId );
     1144
     1145  Int viewIdLenMinus1 = std::max( gCeilLog2( maxViewId + 1 ) - 1, 0 ) ;
     1146  const Int maxViewIdLenMinus1 = ( 1 << 4 ) - 1;
     1147  assert( viewIdLenMinus1 <= maxViewIdLenMinus1  );
     1148  vps.setViewIdLenMinus1( viewIdLenMinus1 );
     1149  for (Int i = 0; i < m_iNumberOfViews; i++)
     1150  {
     1151    vps.setViewIdVal( i, m_viewId[ i] );
     1152  }
     1153
     1154  assert( m_iNumberOfViews == vps.getNumViews() );
     1155#endif
    10551156}
    10561157
     
    10781179  }
    10791180
    1080   // Max temporal id for inter layer reference pictures
     1181  // Max temporal id for inter layer reference pictures + presence flag
     1182#if H_MV5
     1183  Bool maxTidRefPresentFlag = false;
     1184#endif
    10811185  for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++)
    10821186    {
     
    10991203    }
    11001204    vps.setMaxTidIlRefPicPlus1( refLayerIdInVps, maxTid + 1 );
    1101   }
    1102 
     1205#if H_MV5
     1206    maxTidRefPresentFlag = maxTidRefPresentFlag || ( maxTid != 6 );   
     1207#endif
     1208  }
     1209
     1210#if H_MV5
     1211  vps.setMaxTidRefPresentFlag( maxTidRefPresentFlag );
     1212#endif
    11031213  // Max one active ref layer flag
    11041214  Bool maxOneActiveRefLayerFlag = true; 
     1215#if H_MV5
     1216  for ( Int layerIdInVps = 1; layerIdInVps < m_numberOfLayers && maxOneActiveRefLayerFlag; layerIdInVps++)
     1217#else
    11051218  for ( Int currLayerIdInVps = 1; currLayerIdInVps < m_numberOfLayers && maxOneActiveRefLayerFlag; currLayerIdInVps++)
     1219#endif
    11061220  {
    11071221    for( Int i = 0; i < ( getGOPSize() + 1) && maxOneActiveRefLayerFlag; i++ )
    11081222    {       
     1223#if H_MV5
     1224      GOPEntry ge =  m_GOPListMvc[layerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ];
     1225#else
    11091226      GOPEntry ge =  m_GOPListMvc[currLayerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ];
     1227#endif
    11101228      maxOneActiveRefLayerFlag =  maxOneActiveRefLayerFlag && (ge.m_numActiveRefLayerPics <= 1);
    11111229    }           
     
    11131231
    11141232  vps.setMaxOneActiveRefLayerFlag( maxOneActiveRefLayerFlag );
     1233 
     1234 
     1235#if H_MV5
     1236  // All Ref layers active flag
     1237  Bool allRefLayersActiveFlag = true;
     1238  for ( Int layerIdInVps = 1; layerIdInVps < m_numberOfLayers && allRefLayersActiveFlag; layerIdInVps++)
     1239  {   
     1240    for( Int i = 0; i < ( getGOPSize() + 1) && allRefLayersActiveFlag; i++ )
     1241    {       
     1242      GOPEntry ge =  m_GOPListMvc[layerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ];
     1243      allRefLayersActiveFlag = allRefLayersActiveFlag && (ge.m_numActiveRefLayerPics == m_directRefLayers[ layerIdInVps ].size() );
     1244    }           
     1245  }
     1246
     1247  vps.setAllRefLayersActiveFlag( allRefLayersActiveFlag );
     1248
     1249  // Currently cross layer irap aligned is always true.   
     1250  vps.setCrossLayerIrapAlignedFlag( true );
     1251#endif
    11151252  vps.setRefLayers();
    11161253};
    11171254
     1255#if H_MV5
     1256GOPEntry* TAppEncTop::xGetGopEntry( Int layerIdInVps, Int poc )
     1257{
     1258  GOPEntry* geFound = NULL;
     1259  for( Int i = 0; i < ( getGOPSize() + 1) && geFound == NULL ; i++ )
     1260  {
     1261    GOPEntry* ge = &(m_GOPListMvc[layerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ]);
     1262    if ( ge->m_POC == poc )
     1263    {
     1264      geFound = ge;       
     1265    }
     1266  }
     1267  assert( geFound != NULL );
     1268  return geFound;
     1269}
     1270#endif
     1271
    11181272Void TAppEncTop::xSetLayerIds( TComVPS& vps )
    11191273{
     
    11371291  Int maxVec = 0;
    11381292  for ( Int i = 0; i < vec.size(); i++)   
     1293  {
    11391294    maxVec = max( vec[i], maxVec );
     1295  }
    11401296  return maxVec;
    11411297}
     
    11521308}
    11531309
     1310#if H_MV5
     1311
     1312Void TAppEncTop::xSetRepFormat( TComVPS& vps )
     1313{
     1314  vps.setRepFormatIdxPresentFlag( true );
     1315  vps.setVpsNumRepFormatsMinus1 ( 0    );
     1316
     1317  TComRepFormat* repFormat = new TComRepFormat;
     1318
     1319  repFormat->setBitDepthVpsChromaMinus8   ( g_bitDepthC - 8 );
     1320  repFormat->setBitDepthVpsLumaMinus8     ( g_bitDepthY - 8 );
     1321  repFormat->setChromaFormatVpsIdc        ( CHROMA_420      );
     1322  repFormat->setPicHeightVpsInLumaSamples ( m_iSourceHeight );
     1323  repFormat->setPicWidthVpsInLumaSamples  ( m_iSourceWidth  );   
     1324  // ToDo not supported yet.
     1325  //repFormat->setSeparateColourPlaneVpsFlag( );
     1326
     1327  assert( vps.getRepFormat( 0 ) == NULL );
     1328  vps.setRepFormat( 0 , repFormat );
     1329
     1330  for(Int i = 0; i <= vps.getMaxLayersMinus1(); i++ )
     1331  {
     1332    vps.setVpsRepFormatIdx( i , 0 );
     1333  }
     1334}
     1335#endif
    11541336
    11551337Void TAppEncTop::xSetLayerSets( TComVPS& vps )
     
    12041386  }
    12051387}
     1388#if H_MV5
     1389
     1390Void TAppEncTop::xSetVPSVUI( TComVPS& vps )
     1391{
     1392  vps.setVpsVuiPresentFlag( m_vpsVuiPresentFlag );
     1393
     1394  if ( m_vpsVuiPresentFlag )
     1395  {
     1396    TComVPSVUI* pcVPSVUI = vps.getVPSVUI(  );
     1397
     1398    assert( pcVPSVUI );
     1399
     1400    pcVPSVUI->setBitRatePresentVpsFlag( m_bitRatePresentVpsFlag );
     1401    pcVPSVUI->setPicRatePresentVpsFlag( m_picRatePresentVpsFlag );
     1402
     1403    if( pcVPSVUI->getBitRatePresentVpsFlag( )  ||  pcVPSVUI->getPicRatePresentVpsFlag( ) )
     1404    {
     1405      for( Int i = 0; i  <=  vps.getVpsNumberLayerSetsMinus1(); i++ )
     1406      {
     1407        for( Int j = 0; j  <=  vps.getMaxTLayers(); j++ )
     1408        {
     1409          if( pcVPSVUI->getBitRatePresentVpsFlag( ) && m_bitRatePresentFlag[i].size() > j )
     1410          {
     1411            pcVPSVUI->setBitRatePresentFlag( i, j, m_bitRatePresentFlag[i][j] );           
     1412          }
     1413          if( pcVPSVUI->getPicRatePresentVpsFlag( ) && m_picRatePresentFlag[i].size() > j   )
     1414          {
     1415            pcVPSVUI->setPicRatePresentFlag( i, j, m_picRatePresentFlag[i][j] );
     1416          }
     1417          if( pcVPSVUI->getBitRatePresentFlag( i, j )  && m_avgBitRate[i].size() > j )
     1418          {
     1419            pcVPSVUI->setAvgBitRate( i, j, m_avgBitRate[i][j] );         
     1420          }
     1421          if( pcVPSVUI->getBitRatePresentFlag( i, j )  && m_maxBitRate[i].size() > j )
     1422          {
     1423            pcVPSVUI->setMaxBitRate( i, j, m_maxBitRate[i][j] );
     1424          }
     1425          if( pcVPSVUI->getPicRatePresentFlag( i, j ) && m_constantPicRateIdc[i].size() > j )
     1426          {
     1427            pcVPSVUI->setConstantPicRateIdc( i, j, m_constantPicRateIdc[i][j] );
     1428          }
     1429          if( pcVPSVUI->getPicRatePresentFlag( i, j ) && m_avgPicRate[i].size() > j )
     1430          {
     1431            pcVPSVUI->setAvgPicRate( i, j, m_avgPicRate[i][j] );
     1432          }
     1433        }
     1434      }
     1435    }
     1436
     1437    for( Int i = 1; i  <=  vps.getMaxLayersMinus1(); i++ )
     1438    {
     1439      for( Int  j = 0; j < vps.getNumDirectRefLayers( vps.getLayerIdInNuh( i ) ); j++ )
     1440      {
     1441        if ( m_tileBoundariesAlignedFlag[i].size() > j )
     1442        {
     1443          pcVPSVUI->setTileBoundariesAlignedFlag( i, j, m_tileBoundariesAlignedFlag[i][j]);
     1444        }
     1445      }
     1446    }
     1447
     1448    pcVPSVUI->setIlpRestrictedRefLayersFlag( m_ilpRestrictedRefLayersFlag );
     1449
     1450    if( pcVPSVUI->getIlpRestrictedRefLayersFlag( ) )
     1451    {
     1452      for( Int i = 1; i  <=  vps.getMaxLayersMinus1(); i++ )
     1453      {
     1454        for( Int j = 0; j < vps.getNumDirectRefLayers( vps.getLayerIdInNuh( i ) ); j++ )
     1455        {
     1456          if ( m_minSpatialSegmentOffsetPlus1[i].size() > j )
     1457          {       
     1458            pcVPSVUI->setMinSpatialSegmentOffsetPlus1( i, j, m_minSpatialSegmentOffsetPlus1[i][j] );
     1459          }
     1460          if( pcVPSVUI->getMinSpatialSegmentOffsetPlus1( i, j ) > 0 )
     1461          {
     1462            if ( m_ctuBasedOffsetEnabledFlag[i].size() > j )
     1463            {       
     1464              pcVPSVUI->setCtuBasedOffsetEnabledFlag( i, j, m_ctuBasedOffsetEnabledFlag[i][j] );
     1465            }
     1466            if( pcVPSVUI->getCtuBasedOffsetEnabledFlag( i, j ) )
     1467            {
     1468              if ( m_minHorizontalCtuOffsetPlus1[i].size() > j )
     1469              {
     1470                pcVPSVUI->setMinHorizontalCtuOffsetPlus1( i, j, m_minHorizontalCtuOffsetPlus1[i][j] );
     1471              }
     1472            }
     1473          }
     1474        }
     1475      }
     1476    }     
     1477  }
     1478}
     1479#endif
    12061480#endif
    12071481#if H_3D
    12081482Void TAppEncTop::xSetVPSExtension2( TComVPS& vps )
    12091483{
     1484#if H_MV5
     1485
     1486  for ( Int layer = 0; layer <= vps.getMaxLayersMinus1(); layer++ )
     1487#else
    12101488  for ( Int layer = 0; layer < vps.getMaxLayers(); layer++ )
     1489#endif
    12111490  {
    12121491    Bool isDepth      = ( vps.getDepthId( layer ) == 1 ) ;
     
    12421521#endif
    12431522  } 
    1244 #if H_3D_TMVP
     1523#if H_3D
    12451524  vps.setIvMvScalingFlag( m_ivMvScalingFlag );   
    12461525#endif
Note: See TracChangeset for help on using the changeset viewer.