Changeset 170 in SHVCSoftware for branches/SHM-2.0-dev/source/Lib


Ignore:
Timestamp:
9 May 2013, 17:40:26 (12 years ago)
Author:
qualcomm
Message:

JCTVC-M0458:signalling and derivation of inter-layer RPS. Author: krapaka@…

Location:
branches/SHM-2.0-dev/source/Lib
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-2.0-dev/source/Lib/TLibCommon/TComSlice.cpp

    r165 r170  
    126126  m_aiNumILRRefIdx = 0;
    127127#endif
     128#if JCTVC_M0458
     129  m_aiActiveNumILRRefIdx      = 0;
     130  m_InterLayerPredEnabledFlag = 0;
     131
     132  for ( Int idx = 0; idx < MAX_VPS_LAYER_ID_PLUS1; idx++ )
     133    m_interLayerPredLayerIdc[idx] = 0;
     134#endif
     135
    128136  initEqualRef();
    129137 
     
    178186  {
    179187    m_aiNumILRRefIdx      = 1;  // to be set to NumDirectRefLayers[LayerIdInVps[nuh_layer_id]]
     188#if JCTVC_M0458
     189    m_aiActiveNumILRRefIdx      = 1;         
     190    m_InterLayerPredEnabledFlag = 1;   
     191#endif
    180192  }
    181193  else
    182194  {
    183195    m_aiNumILRRefIdx = 0;
     196#if JCTVC_M0458
     197    m_aiActiveNumILRRefIdx      = 0;
     198    m_InterLayerPredEnabledFlag = 0;
     199#endif
    184200  }
    185201#endif
     
    528544  TComPic*  rpsCurrList1[MAX_NUM_REF+1];
    529545#if REF_IDX_FRAMEWORK
     546#if JCTVC_M0458
     547  Int numPocTotalCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr + m_aiActiveNumILRRefIdx;
     548#else
    530549  Int numPocTotalCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr + m_aiNumILRRefIdx;
     550#endif
    531551#else
    532552  Int numPocTotalCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr;
     
    574594    if(getLayerId())
    575595    {
     596#if JCTVC_M0458
     597      for( i = 0; i < m_aiActiveNumILRRefIdx && cIdx < numPocTotalCurr; cIdx ++, i ++)     
     598#else
    576599      for( i = 0; i < m_aiNumILRRefIdx && cIdx < numPocTotalCurr; cIdx ++, i ++)
     600#endif
    577601      {
    578602        rpsCurrList0[cIdx] = ilpPic[i];
     
    598622    if(getLayerId())
    599623    {
     624#if JCTVC_M0458
     625      for( i = 0; i < m_aiActiveNumILRRefIdx && cIdx < numPocTotalCurr; cIdx ++, i ++)
     626#else
    600627      for( i = 0; i < m_aiNumILRRefIdx && cIdx < numPocTotalCurr; cIdx ++, i ++)
     628#endif
    601629      {
    602630        rpsCurrList1[cIdx] = ilpPic[i];
     
    668696    else
    669697    {
     698#if JCTVC_M0458
     699      for(Int i = m_aiActiveNumILRRefIdx; i > 0; i-- )
     700#else
    670701      for(Int i = m_aiNumILRRefIdx; i > 0; i-- )
     702#endif
    671703      {
    672704        refPicListModification->setRefPicSetIdxL0(m_aiNumRefIdx[REF_PIC_LIST_0] - i, numberOfRpsCurrTempList - i);
     
    694726    else
    695727    {
     728#if JCTVC_M0458
     729      for(Int i = m_aiActiveNumILRRefIdx; i > 0; i-- )
     730#else
    696731      for(Int i = m_aiNumILRRefIdx; i > 0; i-- )
     732#endif
    697733      {
    698734        refPicListModification->setRefPicSetIdxL1(m_aiNumRefIdx[REF_PIC_LIST_1] - i, numberOfRpsCurrTempList - i);
     
    717753  {
    718754#if REF_IDX_FRAMEWORK
     755#if JCTVC_M0458
     756    return m_aiActiveNumILRRefIdx;
     757#else
    719758    return m_aiNumILRRefIdx;
     759#endif
    720760#else
    721761    return 0;
     
    732772  if(getLayerId())
    733773  {
     774#if JCTVC_M0458
     775    numRpsCurrTempList += getActiveNumILRRefIdx();
     776#else
    734777    numRpsCurrTempList += getNumILRRefIdx();
     778#endif
    735779  }
    736780#endif
     
    15411585#if VPS_PROFILE_OUTPUT_LAYERS
    15421586  ::memset(m_profileLevelTierIdx,  0, sizeof(m_profileLevelTierIdx));
     1587#endif
     1588#if JCTVC_M0458
     1589  m_maxOneActiveRefLayerFlag = true;
    15431590#endif
    15441591}
  • branches/SHM-2.0-dev/source/Lib/TLibCommon/TComSlice.h

    r165 r170  
    557557  Int        m_profileLevelTierIdx[64];     
    558558#endif
     559#if JCTVC_M0458
     560  Bool       m_maxOneActiveRefLayerFlag;
     561#endif
    559562public:
    560563  TComVPS();
     
    705708  Void   setProfileLevelTierIdx(Int i, Int x)                 { m_profileLevelTierIdx[i] = x   ; }
    706709#endif
     710#if JCTVC_M0458
     711  Bool   getMaxOneActiveRefLayerFlag()                                          { return m_maxOneActiveRefLayerFlag;                      }
     712  Void   setMaxOneActiveRefLayerFlag(Bool x)                                    { m_maxOneActiveRefLayerFlag = x;                         }
     713#endif
    707714};
    708715
     
    14131420  Int         m_aiNumILRRefIdx;       //< for inter-layer reference picture ser
    14141421#endif
     1422#if JCTVC_M0458
     1423  UInt         m_aiActiveNumILRRefIdx;        //< Active inter-layer reference pictures
     1424  UInt         m_interLayerPredLayerIdc  [MAX_VPS_LAYER_ID_PLUS1];
     1425#endif
    14151426#if L0034_COMBINED_LIST_CLEANUP
    14161427  Int         m_list1IdxToList0Idx[MAX_NUM_REF];
     
    15051516
    15061517  Bool       m_enableTMVPFlag;
     1518#if JCTVC_M0458
     1519  Bool       m_InterLayerPredEnabledFlag;
     1520  UInt       m_NumInterLayerRefPics;
     1521#endif
    15071522public:
    15081523  TComSlice();
     
    15641579  Void      setNumILRRefIdx     ( Int i )                     { m_aiNumILRRefIdx = i; }
    15651580#endif
     1581#if JCTVC_M0458
     1582  Int       getActiveNumILRRefIdx     ( )               { return  m_aiActiveNumILRRefIdx; }
     1583  Void      setActiveNumILRRefIdx     ( Int i )         { m_aiActiveNumILRRefIdx = i; } 
     1584
     1585  Int       getInterLayerPredLayerIdc (UInt Idx )               { return  m_interLayerPredLayerIdc[Idx];       }
     1586  Void      setInterLayerPredLayerIdc (UInt val,UInt Idx)       { m_interLayerPredLayerIdc[Idx] = val;         }
     1587#endif
    15661588  Int       getNumRefIdx        ( RefPicList e )                { return  m_aiNumRefIdx[e];             }
    15671589  TComPic*  getPic              ()                              { return  m_pcPic;                      }
     
    17671789  Void      setEnableTMVPFlag     ( Bool   b )    { m_enableTMVPFlag = b; }
    17681790  Bool      getEnableTMVPFlag     ()              { return m_enableTMVPFlag;}
     1791#if JCTVC_M0458
     1792  Void      setInterLayerPredEnabledFlag     ( Bool   val )    { m_InterLayerPredEnabledFlag = val; }
     1793  Bool      getInterLayerPredEnabledFlag     ()                { return m_InterLayerPredEnabledFlag;}
     1794
     1795  Void      setNumInterLayerRefPics          ( UInt   val )    { m_NumInterLayerRefPics = val; }
     1796  UInt      getNumInterLayerRefPics          ()                { return m_NumInterLayerRefPics;} 
     1797#endif
    17691798protected:
    17701799  TComPic*  xGetRefPic  (TComList<TComPic*>& rcListPic,
  • branches/SHM-2.0-dev/source/Lib/TLibCommon/TypeDef.h

    r165 r170  
    8888#define ENCODER_FAST_MODE                1      ///< L0174: enable encoder fast mode. TestMethod 1 is enabled by setting to 1 and TestMethod 2 is enable by setting to 2. By default it is set to 1.
    8989#define REF_IDX_MFM                      1      ///< L0336: motion vector mapping of inter-layer reference picture
     90#define JCTVC_M0458                      1      ///< implementation of JCTVC-L0178 (currently only one reference layer is supported )
    9091#else
    9192#define INTRA_BL                         1      ///< inter-layer texture prediction
  • branches/SHM-2.0-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r169 r170  
    10391039#endif
    10401040#endif
     1041#if JCTVC_M0458
     1042   READ_FLAG(uiCode, "max_one_active_ref_layer_flag" );
     1043   vps->setMaxOneActiveRefLayerFlag(uiCode);   
     1044#endif
    10411045
    10421046#if !VPS_MOVE_DIR_DEPENDENCY_FLAG
     
    15911595  }
    15921596
     1597  #if JCTVC_M0458   
     1598    rpcSlice->setActiveNumILRRefIdx(0);
     1599    if((sps->getLayerId() > 0)  &&  (rpcSlice->getNumILRRefIdx() > 0) )
     1600    {     
     1601      READ_FLAG(uiCode,"inter_layer_pred_enabled_flag");
     1602      rpcSlice->setInterLayerPredEnabledFlag(uiCode);
     1603      if( rpcSlice->getInterLayerPredEnabledFlag())
     1604      {
     1605        if(rpcSlice->getNumILRRefIdx() > 1)
     1606        {
     1607          if( !rpcSlice->getVPS()->getMaxOneActiveRefLayerFlag())
     1608          {
     1609            READ_UVLC(uiCode,"num_inter_layer_ref_pics_minus1");   
     1610            rpcSlice->setActiveNumILRRefIdx(uiCode + 1);         
     1611          }
     1612          else
     1613          {
     1614            rpcSlice->setActiveNumILRRefIdx(1);         
     1615            rpcSlice->setInterLayerPredLayerIdc(0,0);         
     1616          }
     1617          for(Int i = 0; i < rpcSlice->getActiveNumILRRefIdx(); i++ )
     1618          {
     1619            READ_UVLC(uiCode,"inter_layer_pred_layer_idc[i]");         
     1620            rpcSlice->setInterLayerPredLayerIdc(uiCode,i);         
     1621          }
     1622        }
     1623        else
     1624        {
     1625          rpcSlice->setActiveNumILRRefIdx(1);         
     1626          rpcSlice->setInterLayerPredLayerIdc(0,0);     
     1627        }
     1628      }
     1629    }     
     1630#endif
     1631
    15931632  if(pps->getSliceHeaderExtensionPresentFlag())
    15941633  {
  • branches/SHM-2.0-dev/source/Lib/TLibDecoder/TDecTop.cpp

    r163 r170  
    12571257  // currently only one reference layer is supported
    12581258  assert( vps->getNumDirectRefLayers( m_layerId ) == 1 );
     1259#if JCTVC_M0458
     1260  assert( vps->getMaxOneActiveRefLayerFlag() == 1 );
     1261#endif
     1262
    12591263
    12601264  return (TDecTop *)getLayerDec( vps->getRefLayerId( m_layerId, 0 ) );
  • branches/SHM-2.0-dev/source/Lib/TLibEncoder/TEncCavlc.cpp

    r169 r170  
    797797#endif
    798798#endif
     799#if JCTVC_M0458
     800      WRITE_FLAG(vps->getMaxOneActiveRefLayerFlag(), "max_one_active_ref_layer_flag");
     801#endif
    799802#if !VPS_MOVE_DIR_DEPENDENCY_FLAG
    800803#if VPS_EXTN_DIRECT_REF_LAYERS
     
    11631166    }
    11641167  }
     1168#if JCTVC_M0458   
     1169    if((pcSlice->getSPS()->getLayerId() > 0)  &&  (pcSlice->getNumILRRefIdx() > 0) )
     1170    {
     1171      WRITE_FLAG(pcSlice->getInterLayerPredEnabledFlag(),"inter_layer_pred_enabled_flag");
     1172      if( pcSlice->getInterLayerPredEnabledFlag())
     1173      {
     1174        if(pcSlice->getNumILRRefIdx() > 1)
     1175        {
     1176          if( !pcSlice->getVPS()->getMaxOneActiveRefLayerFlag())
     1177          {
     1178            WRITE_UVLC(pcSlice->getNumInterLayerRefPics(),"num_inter_layer_ref_pics_minus1");                     
     1179          }       
     1180          for(Int i = 0; i < pcSlice->getActiveNumILRRefIdx(); i++ )
     1181            WRITE_UVLC(pcSlice->getInterLayerPredEnabledFlag(),"inter_layer_pred_layer_idc[i]");         
     1182        }
     1183      }
     1184    }     
     1185#endif
    11651186  if(pcSlice->getPPS()->getSliceHeaderExtensionPresentFlag())
    11661187  {
Note: See TracChangeset for help on using the changeset viewer.