Changeset 282 in SHVCSoftware for branches/SHM-2.1-dev/source/Lib/TLibCommon


Ignore:
Timestamp:
11 Jun 2013, 02:30:21 (12 years ago)
Author:
seregin
Message:

merge with SHM-2.1-multilayers-dev branch

Location:
branches/SHM-2.1-dev/source
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-2.1-dev/source

  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComDataCU.cpp

    r212 r282  
    17501750  // check BL mode
    17511751  UInt          uiCUAddrBase, uiAbsPartAddrBase;
    1752   TComDataCU*   pcTempCU = getBaseColCU( uiAbsPartIdx, uiCUAddrBase, uiAbsPartAddrBase );
     1752  // the right reference layerIdc should be specified, currently it is set to m_layerId-1
     1753  TComDataCU*   pcTempCU = getBaseColCU(m_layerId - 1, uiAbsPartIdx, uiCUAddrBase, uiAbsPartAddrBase );
    17531754
    17541755  if( pcTempCU->getPredictionMode( uiAbsPartAddrBase ) != MODE_INTRA )
     1756  {
    17551757    return( NUM_INTRA_MODE-1 );
     1758  }
    17561759
    17571760  // compute set of enabled modes g_reducedSetIntraModes[...]
     
    41824185
    41834186#if SVC_COL_BLK
    4184 TComDataCU*  TComDataCU::getBaseColCU( UInt uiCuAbsPartIdx, UInt &uiCUAddrBase, UInt &uiAbsPartIdxBase )
     4187TComDataCU*  TComDataCU::getBaseColCU( UInt refLayerIdc, UInt uiCuAbsPartIdx, UInt &uiCUAddrBase, UInt &uiAbsPartIdxBase )
    41854188{
    41864189#if 1 // it should provide identical resutls
     
    41884191  UInt uiPelY = getCUPelY() + g_auiRasterToPelY[ g_auiZscanToRaster[uiCuAbsPartIdx] ];
    41894192
    4190   return getBaseColCU( uiPelX, uiPelY, uiCUAddrBase, uiAbsPartIdxBase );
     4193  return getBaseColCU( refLayerIdc, uiPelX, uiPelY, uiCUAddrBase, uiAbsPartIdxBase );
    41914194#else
    41924195  TComPic* cBaseColPic = m_pcSlice->getBaseColPic();
     
    42374240}
    42384241
    4239 TComDataCU*  TComDataCU::getBaseColCU( UInt uiPelX, UInt uiPelY, UInt &uiCUAddrBase, UInt &uiAbsPartIdxBase )
    4240 {
    4241   TComPic* cBaseColPic = m_pcSlice->getBaseColPic();
     4242TComDataCU*  TComDataCU::getBaseColCU( UInt refLayerIdc, UInt uiPelX, UInt uiPelY, UInt &uiCUAddrBase, UInt &uiAbsPartIdxBase )
     4243{
     4244  TComPic* cBaseColPic = m_pcSlice->getBaseColPic(refLayerIdc);
    42424245
    42434246#if !SIMPLIFIED_MV_POS_SCALING
     
    42694272  Int leftStartL = this->getSlice()->getSPS()->getScaledRefLayerWindow().getWindowLeftOffset();
    42704273  Int topStartL  = this->getSlice()->getSPS()->getScaledRefLayerWindow().getWindowTopOffset();
    4271   Int iBX = ((uiPelX - leftStartL)*g_posScalingFactor[m_layerId][0] + (1<<15)) >> 16;
    4272   Int iBY = ((uiPelY - topStartL )*g_posScalingFactor[m_layerId][1] + (1<<15)) >> 16;
     4274  Int iBX = ((uiPelX - leftStartL)*g_posScalingFactor[refLayerIdc][0] + (1<<15)) >> 16;
     4275  Int iBY = ((uiPelY - topStartL )*g_posScalingFactor[refLayerIdc][1] + (1<<15)) >> 16;
    42734276#else
    4274   Int iBX = (uiPelX*g_posScalingFactor[m_layerId][0] + (1<<15)) >> 16;
    4275   Int iBY = (uiPelY*g_posScalingFactor[m_layerId][1] + (1<<15)) >> 16;
     4277  Int iBX = (uiPelX*g_posScalingFactor[refLayerIdc][0] + (1<<15)) >> 16;
     4278  Int iBY = (uiPelY*g_posScalingFactor[refLayerIdc][1] + (1<<15)) >> 16;
    42764279#endif
    42774280#else
     
    42954298  const Window &confEL = m_pcPic->getPicYuvRec()->getConformanceWindow();
    42964299
    4297   Int widthBL   = m_pcSlice->getBaseColPic()->getPicYuvRec()->getWidth () - confBL.getWindowLeftOffset() - confBL.getWindowRightOffset();
    4298   Int heightBL  = m_pcSlice->getBaseColPic()->getPicYuvRec()->getHeight() - confBL.getWindowTopOffset() - confBL.getWindowBottomOffset();
     4300  Int widthBL   = m_pcSlice->getBaseColPic(refLayerIdc)->getPicYuvRec()->getWidth () - confBL.getWindowLeftOffset() - confBL.getWindowRightOffset();
     4301  Int heightBL  = m_pcSlice->getBaseColPic(refLayerIdc)->getPicYuvRec()->getHeight() - confBL.getWindowTopOffset() - confBL.getWindowBottomOffset();
    42994302#endif
    43004303  if( iBX >= widthBL || iBY >= heightBL ) //outside of the reference layer cropped picture
     
    43164319}
    43174320
    4318 Void TComDataCU::scaleBaseMV( TComMvField& rcMvFieldEnhance, TComMvField& rcMvFieldBase )
     4321Void TComDataCU::scaleBaseMV( UInt refLayerIdc, TComMvField& rcMvFieldEnhance, TComMvField& rcMvFieldBase )
    43194322{
    43204323  TComMvField cMvFieldBase;
    43214324  TComMv cMv;
    43224325#if SIMPLIFIED_MV_POS_SCALING
    4323   cMv = rcMvFieldBase.getMv().scaleMv( g_mvScalingFactor[m_layerId][0], g_mvScalingFactor[m_layerId][1] );
     4326  cMv = rcMvFieldBase.getMv().scaleMv( g_mvScalingFactor[refLayerIdc][0], g_mvScalingFactor[refLayerIdc][1] );
    43244327#else
    43254328  const Window &confBL = m_pcSlice->getBaseColPic()->getPicYuvRec()->getConformanceWindow();
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComDataCU.h

    r212 r282  
    554554
    555555#if SVC_COL_BLK
    556   TComDataCU*   getBaseColCU( UInt uiCuAbsPartIdx, UInt &uiCUAddrBase, UInt &uiAbsPartIdxBase );
    557   TComDataCU*   getBaseColCU( UInt uiPelX, UInt uiPelY, UInt &uiCUAddrBase, UInt &uiAbsPartIdxBase );
    558   Void          scaleBaseMV( TComMvField& rcMvFieldEnhance, TComMvField& rcMvFieldBase );
     556  TComDataCU*   getBaseColCU( UInt refLayerIdc, UInt uiCuAbsPartIdx, UInt &uiCUAddrBase, UInt &uiAbsPartIdxBase );
     557  TComDataCU*   getBaseColCU( UInt refLayerIdc, UInt uiPelX, UInt uiPelY, UInt &uiCUAddrBase, UInt &uiAbsPartIdxBase );
     558  Void          scaleBaseMV( UInt refLayerIdc, TComMvField& rcMvFieldEnhance, TComMvField& rcMvFieldBase );
    559559#endif
    560560};
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComPic.cpp

    r191 r282  
    6767, m_pNDBFilterYuvTmp                      (NULL)
    6868, m_bCheckLTMSB                           (false)
     69{
    6970#if SVC_EXTENSION
    70 , m_bSpatialEnhLayer( false )
    71 , m_pcFullPelBaseRec( NULL )
    72 #endif
    73 {
     71  memset( m_pcFullPelBaseRec, 0, sizeof( m_pcFullPelBaseRec ) );
     72  memset( m_bSpatialEnhLayer, false, sizeof( m_bSpatialEnhLayer ) );
     73#endif
    7474  m_apcPicYuv[0]      = NULL;
    7575  m_apcPicYuv[1]      = NULL;
     
    9191  m_apcPicYuv[1]  = new TComPicYuv;  m_apcPicYuv[1]->create( iWidth, iHeight, uiMaxWidth, uiMaxHeight, uiMaxDepth, pcSps );
    9292
    93   if (m_bSpatialEnhLayer)
    94   {
    95     m_pcFullPelBaseRec = new TComPicYuv;  m_pcFullPelBaseRec->create( iWidth, iHeight, uiMaxWidth, uiMaxHeight, uiMaxDepth, pcSps );
     93  for( Int i = 0; i < MAX_LAYERS; i++ )
     94  {
     95    if( m_bSpatialEnhLayer[i] )
     96    {
     97      m_pcFullPelBaseRec[i] = new TComPicYuv;  m_pcFullPelBaseRec[i]->create( iWidth, iHeight, uiMaxWidth, uiMaxHeight, uiMaxDepth, pcSps );
     98    }
    9699  }
    97100
     
    173176  deleteSEIs(m_SEIs);
    174177#if SVC_EXTENSION && SVC_UPSAMPLING
    175   if (m_bSpatialEnhLayer)
    176   {
    177     m_pcFullPelBaseRec->destroy();
    178     delete m_pcFullPelBaseRec;
    179     m_pcFullPelBaseRec  = NULL;
     178  for( Int i = 0; i < MAX_LAYERS; i++ )
     179  {
     180    if( m_bSpatialEnhLayer[i] )
     181    {
     182      m_pcFullPelBaseRec[i]->destroy();
     183      delete m_pcFullPelBaseRec[i];
     184      m_pcFullPelBaseRec[i]  = NULL;
     185    }
    180186  }
    181187#endif
     
    562568
    563569#if REF_IDX_MFM
    564 Void TComPic::copyUpsampledMvField(TComPic* pcPicBase)
     570Void TComPic::copyUpsampledMvField(UInt refLayerIdc, TComPic* pcPicBase)
    565571{
    566572#if AVC_SYNTAX && !ILP_DECODED_PICTURE
     
    592598
    593599      TComDataCU *pcColCU = 0;
    594       pcColCU = pcCUDes->getBaseColCU(pelX + 8, pelY + 8, baseCUAddr, baseAbsPartIdx);
     600      pcColCU = pcCUDes->getBaseColCU(refLayerIdc, pelX + 8, pelY + 8, baseCUAddr, baseAbsPartIdx);
    595601
    596602#if AVC_SYNTAX && !ILP_DECODED_PICTURE
     
    607613          TComMvField sMvFieldBase, sMvField;
    608614          pcColCU->getMvField( pcColCU, baseAbsPartIdx, (RefPicList)refPicList, sMvFieldBase);
    609           pcCUDes->scaleBaseMV( sMvField, sMvFieldBase );
     615          pcCUDes->scaleBaseMV( refLayerIdc, sMvField, sMvFieldBase );
    610616
    611617          pcCUDes->getCUMvField((RefPicList)refPicList)->setMvField(sMvField, absPartIdx);
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComPic.h

    r191 r282  
    9292  SEIMessages  m_SEIs; ///< Any SEI messages that have been received.  If !NULL we own the object.
    9393#if SVC_EXTENSION
    94   Bool                  m_bSpatialEnhLayer;       // whether current layer is a spatial enhancement layer,
    95   TComPicYuv*           m_pcFullPelBaseRec;    // upsampled base layer recontruction for difference domain inter prediction
     94  Bool                  m_bSpatialEnhLayer[MAX_LAYERS];       // whether current layer is a spatial enhancement layer,
     95  TComPicYuv*           m_pcFullPelBaseRec[MAX_LAYERS];    // upsampled base layer recontruction for difference domain inter prediction
    9696#endif
    9797
     
    114114  Void          setLayerId (UInt layerId) { m_layerId = layerId; }
    115115  UInt          getLayerId ()               { return m_layerId; }
    116   Bool          isSpatialEnhLayer()             { return m_bSpatialEnhLayer; }
    117   Void          setSpatialEnhLayerFlag (Bool b) { m_bSpatialEnhLayer = b; }
    118   Void          setFullPelBaseRec   ( TComPicYuv* p) { m_pcFullPelBaseRec = p; }
    119   TComPicYuv*   getFullPelBaseRec   ()  { return  m_pcFullPelBaseRec;  }
     116  Bool          isSpatialEnhLayer(UInt refLayerIdc)             { return m_bSpatialEnhLayer[refLayerIdc]; }
     117  Void          setSpatialEnhLayerFlag (UInt refLayerIdc, Bool b) { m_bSpatialEnhLayer[refLayerIdc] = b; }
     118  Void          setFullPelBaseRec   (UInt refLayerIdc, TComPicYuv* p) { m_pcFullPelBaseRec[refLayerIdc] = p; }
     119  TComPicYuv*   getFullPelBaseRec   (UInt refLayerIdc)  { return  m_pcFullPelBaseRec[refLayerIdc];  }
    120120#endif
    121121#if REF_IDX_ME_ZEROMV || ENCODER_FAST_MODE || REF_IDX_MFM
     
    124124
    125125#if REF_IDX_MFM
    126   Void          copyUpsampledMvField  ( TComPic* pcPicBase );
     126  Void          copyUpsampledMvField  ( UInt refLayerIdc, TComPic* pcPicBase );
    127127  Void          initUpsampledMvField  ();
    128128#endif
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComPrediction.cpp

    r191 r282  
    774774#if SVC_UPSAMPLING
    775775#if SCALED_REF_LAYER_OFFSETS
    776 Void TComPrediction::upsampleBasePic( TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic, const Window window)
    777 {
    778   m_cUsf.upsampleBasePic( pcUsPic, pcBasePic, pcTempPic, window);
     776Void TComPrediction::upsampleBasePic( UInt refLayerIdc, TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic, const Window window)
     777{
     778  m_cUsf.upsampleBasePic( refLayerIdc, pcUsPic, pcBasePic, pcTempPic, window);
    779779}
    780780#else
    781 Void TComPrediction::upsampleBasePic( TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic)
    782 {
    783   m_cUsf.upsampleBasePic( pcUsPic, pcBasePic, pcTempPic);
     781Void TComPrediction::upsampleBasePic( UInt refLayerIdc, TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic)
     782{
     783  m_cUsf.upsampleBasePic( refLayerIdc, pcUsPic, pcBasePic, pcTempPic);
    784784}
    785785#endif
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComPrediction.h

    r191 r282  
    123123#if SVC_UPSAMPLING
    124124#if SCALED_REF_LAYER_OFFSETS
    125   Void upsampleBasePic( TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic, const Window window );
     125  Void upsampleBasePic( UInt refLayerIdc, TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic, const Window window );
    126126#else
    127   Void upsampleBasePic( TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic );
     127  Void upsampleBasePic( UInt refLayerIdc, TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic );
    128128#endif
    129129#endif
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComSlice.cpp

    r258 r282  
    9292#if SVC_EXTENSION
    9393, m_layerId                     ( 0 )
    94 , m_pcBaseColPic                  ( NULL )
    9594#endif
    9695, m_bTLayerSwitchingFlag          ( false )
     
    122121  m_aiNumRefIdx[0] = m_aiNumRefIdx[1] = m_aiNumRefIdx[2] = 0;
    123122#endif
    124  
     123
     124#if SVC_EXTENSION
     125  memset( m_pcBaseColPic, 0, sizeof( m_pcBaseColPic ) );
    125126#if REF_IDX_FRAMEWORK
    126127#if JCTVC_M0458_INTERLAYER_RPS_SIG
     
    131132  m_numILRRefIdx = 0;
    132133#endif
     134#endif
    133135#endif
    134136
     
    518520
    519521#if REF_IDX_FRAMEWORK
    520   //inter-layer reference picture
     522  for( i = 0; i < m_activeNumILRRefIdx; i++ )
     523  {
     524    UInt refLayerIdc = m_interLayerPredLayerIdc[i];
     525    //inter-layer reference picture
    521526#if REF_IDX_MFM
    522527
    523528#if ILR_RESTR
    524   Int maxSubLayerForILPPlus1 = (getLayerId() > 0 && m_activeNumILRRefIdx > 0)? getVPS()->getMaxSublayerForIlpPlus1(ilpPic[0]->getSlice(0)->getLayerId()) : 0;
     529    Int maxSubLayerForILPPlus1 = ( m_layerId > 0 && m_activeNumILRRefIdx > 0)? m_pcVPS->getMaxSublayerForIlpPlus1(ilpPic[refLayerIdc]->getSlice(0)->getLayerId()) : 0;
    525530#if ZERO_NUM_DIRECT_LAYERS
    526   if( getLayerId() > 0 && m_activeNumILRRefIdx > 0 && ( ( (Int)(ilpPic[0]->getSlice(0)->getTLayer())<=  maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[0]->getSlice(0)->getRapPicFlag()) )  )
    527 #else
    528   if( getLayerId() && ( ( (Int)(ilpPic[0]->getSlice(0)->getTLayer())<=maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[0]->getSlice(0)->getRapPicFlag()) )  )
     531    if( m_layerId > 0 && m_activeNumILRRefIdx > 0 && ( ( (Int)(ilpPic[refLayerIdc]->getSlice(0)->getTLayer())<=  maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[refLayerIdc]->getSlice(0)->getRapPicFlag()) )  )
     532#else
     533    if( m_layerId > 0 && ( ( (Int)(ilpPic[refLayerIdc]->getSlice(0)->getTLayer())<=maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[refLayerIdc]->getSlice(0)->getRapPicFlag()) )  )
    529534#endif
    530535
    531536#else
    532537#if ZERO_NUM_DIRECT_LAYERS
    533   if( m_layerId > 0 && m_activeNumILRRefIdx > 0 )
    534 #else
    535   if (getLayerId())
    536 #endif
    537 #endif
    538   {
    539     if(!(getNalUnitType() >= NAL_UNIT_CODED_SLICE_BLA_W_LP && getNalUnitType() <= NAL_UNIT_CODED_SLICE_CRA) && getSPS()->getMFMEnabledFlag())
    540     {
    541       ilpPic[0]->copyUpsampledMvField(getBaseColPic());
    542     }
    543     else
    544     {
    545       ilpPic[0]->initUpsampledMvField();
    546     }
    547   #endif
    548     ilpPic[0]->setIsLongTerm(1);
     538    if( m_layerId > 0 && m_activeNumILRRefIdx > 0 )
     539#else
     540    if( m_layerId > 0 )
     541#endif
     542#endif
     543    {
     544      if(!(m_eNalUnitType >= NAL_UNIT_CODED_SLICE_BLA_W_LP && m_eNalUnitType <= NAL_UNIT_CODED_SLICE_CRA) && m_pcSPS->getMFMEnabledFlag())
     545      {
     546        ilpPic[refLayerIdc]->copyUpsampledMvField( refLayerIdc, m_pcBaseColPic[refLayerIdc] );
     547      }
     548      else
     549      {
     550        ilpPic[refLayerIdc]->initUpsampledMvField();
     551      }
     552#endif
     553      ilpPic[refLayerIdc]->setIsLongTerm(1);
     554    }
    549555  }
    550556#endif
     
    555561#if ILR_RESTR
    556562  Int numInterLayerRPSPics = 0;
    557   if (getLayerId()>0)
    558   {
    559     for (i=0; i < getVPS()->getNumDirectRefLayers(getLayerId()); i++)
    560     {
    561       maxSubLayerForILPPlus1 = getVPS()->getMaxSublayerForIlpPlus1(ilpPic[i]->getSlice(0)->getLayerId());
     563  if( m_layerId > 0 )
     564  {
     565    for( i=0; i < m_pcVPS->getNumDirectRefLayers( m_layerId ); i++ )
     566    {
     567      Int maxSubLayerForILPPlus1 = getVPS()->getMaxSublayerForIlpPlus1(ilpPic[i]->getSlice(0)->getLayerId());
    562568      if( ((Int)(ilpPic[i]->getSlice(0)->getTLayer())<= maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[i]->getSlice(0)->getRapPicFlag() ) )
    563569      {
     
    570576      m_activeNumILRRefIdx = numInterLayerRPSPics;
    571577    }
    572 #if MAX_ONE_RESAMPLING_DIRECT_LAYERS
    573     if(getVPS()->getScalabilityMask(1))
     578#if MAX_ONE_RESAMPLING_DIRECT_LAYERS && SIMPLIFIED_MV_POS_SCALING
     579    if( m_pcVPS->getScalabilityMask(1) )
    574580    {
    575581      Int numResampler = 0;
     
    581587                          );
    582588
    583       Int widthEL   = getPic()->getPicYuvRec()->getWidth();
    584       Int heightEL  = getPic()->getPicYuvRec()->getHeight();     
    585       for (i=0; i < m_activeNumILRRefIdx; i++)
    586       {
    587         Int widthBL   =  ilpPic[getInterLayerPredLayerIdc(i)]->getSlice(0)->getBaseColPic()->getPicYuvRec()->getWidth();
    588         Int heightBL  =  ilpPic[getInterLayerPredLayerIdc(i)]->getSlice(0)->getBaseColPic()->getPicYuvRec()->getHeight();
    589 
    590         if(!(widthEL == widthBL && heightEL == heightBL && (scalingOffset)))
     589      for( i=0; i < m_activeNumILRRefIdx; i++ )
     590      {
     591        UInt refLayerIdc = m_interLayerPredLayerIdc[i];
     592        if(!( g_posScalingFactor[refLayerIdc][0] == 65536 && g_posScalingFactor[refLayerIdc][1] == 65536 ) && (scalingOffset)) // ratio 1x
    591593        {
    592594          numResampler++;
     
    660662    }
    661663#if REF_IDX_FRAMEWORK
    662     if(getLayerId())
     664    if( m_layerId > 0 )
    663665    {
    664666#if JCTVC_M0458_INTERLAYER_RPS_SIG
     
    668670#endif
    669671      {
     672        Int refLayerIdc = m_interLayerPredLayerIdc[i];
    670673#if ILR_RESTR
    671          maxSubLayerForILPPlus1 = getVPS()->getMaxSublayerForIlpPlus1(ilpPic[i]->getSlice(0)->getLayerId());
    672         if( ((Int)(ilpPic[i]->getSlice(0)->getTLayer())<=maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[i]->getSlice(0)->getRapPicFlag()) )
    673 #endif
    674         rpsCurrList0[cIdx] = ilpPic[i];
     674         Int maxSubLayerForILPPlus1 = getVPS()->getMaxSublayerForIlpPlus1(ilpPic[refLayerIdc]->getSlice(0)->getLayerId());
     675        if( ((Int)(ilpPic[refLayerIdc]->getSlice(0)->getTLayer())<=maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[refLayerIdc]->getSlice(0)->getRapPicFlag()) )
     676#endif
     677        rpsCurrList0[cIdx] = ilpPic[refLayerIdc];
    675678      }
    676679    }
     
    692695    }
    693696#if REF_IDX_FRAMEWORK
    694     if(getLayerId())
     697    if( m_layerId > 0 )
    695698    {
    696699#if JCTVC_M0458_INTERLAYER_RPS_SIG
     
    700703#endif
    701704      {
     705        Int refLayerIdc = m_interLayerPredLayerIdc[i];
    702706#if ILR_RESTR
    703         maxSubLayerForILPPlus1 = getVPS()->getMaxSublayerForIlpPlus1(ilpPic[i]->getSlice(0)->getLayerId());
    704         if( ((Int)(ilpPic[i]->getSlice(0)->getTLayer())<=maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[i]->getSlice(0)->getRapPicFlag()) )
    705 #endif
    706         rpsCurrList1[cIdx] = ilpPic[i];
     707        Int maxSubLayerForILPPlus1 = getVPS()->getMaxSublayerForIlpPlus1(ilpPic[refLayerIdc]->getSlice(0)->getLayerId());
     708        if( ((Int)(ilpPic[refLayerIdc]->getSlice(0)->getTLayer())<=maxSubLayerForILPPlus1-1) || (maxSubLayerForILPPlus1==0 && ilpPic[refLayerIdc]->getSlice(0)->getRapPicFlag()) )
     709#endif
     710        rpsCurrList1[cIdx] = ilpPic[refLayerIdc];
    707711      }
    708712    }
     
    737741Void TComSlice::setRefPicListModificationSvc()
    738742{
    739   if( !this->getPPS()->getListsModificationPresentFlag())
     743  if( !m_pcPPS->getListsModificationPresentFlag())
    740744  {
    741745    return;
    742746  }
    743747
    744   if(this->getNalUnitType() >= NAL_UNIT_CODED_SLICE_BLA_W_LP && this->getNalUnitType() <= NAL_UNIT_CODED_SLICE_CRA)
     748  if(m_eNalUnitType >= NAL_UNIT_CODED_SLICE_BLA_W_LP && m_eNalUnitType <= NAL_UNIT_CODED_SLICE_CRA)
    745749  {
    746750    return;
    747751  }
    748752
    749   TComRefPicListModification* refPicListModification = this->getRefPicListModification();
     753  TComRefPicListModification* refPicListModification = &m_RefPicListModification;
    750754  Int numberOfRpsCurrTempList = this->getNumRpsCurrTempList();  // total number of ref pics in listTemp0 including inter-layer ref pics
    751755
     
    821825
    822826#if REF_IDX_FRAMEWORK
    823   if( m_eSliceType == I_SLICE || ( getSPS()->getLayerId() &&
    824     (getNalUnitType() >= NAL_UNIT_CODED_SLICE_BLA_W_LP) &&
    825     (getNalUnitType() <= NAL_UNIT_CODED_SLICE_CRA) ) )
     827  if( m_eSliceType == I_SLICE || ( m_pcSPS->getLayerId() &&
     828    (m_eNalUnitType >= NAL_UNIT_CODED_SLICE_BLA_W_LP) &&
     829    (m_eNalUnitType <= NAL_UNIT_CODED_SLICE_CRA) ) )
    826830#else
    827831  if (m_eSliceType == I_SLICE)
     
    846850  }
    847851#if REF_IDX_FRAMEWORK
    848   if(getLayerId())
     852  if( m_layerId > 0 )
    849853  {
    850854#if JCTVC_M0458_INTERLAYER_RPS_SIG
     
    25922596#endif
    25932597
    2594 Void TComSlice::setBaseColPic(  TComList<TComPic*>& rcListPic, UInt layerID )
     2598Void TComSlice::setBaseColPic(  TComList<TComPic*>& rcListPic, UInt refLayerIdc )
    25952599
    2596   if (layerID == 0)
    2597   {
    2598     m_pcBaseColPic = NULL;
     2600  if(m_layerId == 0)
     2601  {
     2602    memset( m_pcBaseColPic, 0, sizeof( m_pcBaseColPic ) );
    25992603    return;
    26002604  }       
    2601   setBaseColPic(xGetRefPic(rcListPic, getPOC()));
     2605  setBaseColPic(refLayerIdc, xGetRefPic(rcListPic, getPOC()));
    26022606}
    26032607#endif
    26042608
    26052609#if REF_IDX_MFM
    2606 Void TComSlice::setRefPOCListILP( TComPic** ilpPic, TComPic *pcRefPicBL )
    2607 {
    2608   //set reference picture POC of each ILP reference
    2609   Int thePoc = ilpPic[0]->getPOC();
    2610   assert(thePoc >= 0);
    2611   assert(thePoc == pcRefPicBL->getPOC());
    2612 
    2613   ilpPic[0]->getSlice(0)->setBaseColPic( pcRefPicBL );
    2614 
    2615   //copy reference pictures marking from the reference layer
    2616   ilpPic[0]->getSlice(0)->copySliceInfo(pcRefPicBL->getSlice(0));
    2617  
    2618   for( Int refList = 0; refList < 2; refList++ )
    2619   {
    2620     RefPicList refPicList = RefPicList( refList );
    2621    
    2622     //set reference POC of ILP
    2623     ilpPic[0]->getSlice(0)->setNumRefIdx(refPicList, pcRefPicBL->getSlice(0)->getNumRefIdx(refPicList));
    2624     assert(ilpPic[0]->getSlice(0)->getNumRefIdx(refPicList) >= 0);
    2625     assert(ilpPic[0]->getSlice(0)->getNumRefIdx(refPicList) <= MAX_NUM_REF);
    2626 
    2627     //initialize reference POC of ILP
    2628     for(Int refIdx = 0; refIdx < pcRefPicBL->getSlice(0)->getNumRefIdx(refPicList); refIdx++)
    2629     {
    2630       ilpPic[0]->getSlice(0)->setRefPOC(pcRefPicBL->getSlice(0)->getRefPOC(refPicList, refIdx), refPicList, refIdx);
    2631       ilpPic[0]->getSlice(0)->setRefPic(pcRefPicBL->getSlice(0)->getRefPic(refPicList, refIdx), refPicList, refIdx);
    2632     }
    2633 
    2634     for(Int refIdx = pcRefPicBL->getSlice(0)->getNumRefIdx(refPicList); refIdx < MAX_NUM_REF; refIdx++)
    2635     {
    2636       ilpPic[0]->getSlice(0)->setRefPOC(0, refPicList, refIdx);
    2637       ilpPic[0]->getSlice(0)->setRefPic(NULL, refPicList, refIdx);
     2610Void TComSlice::setRefPOCListILP( TComPic** ilpPic, TComPic** pcRefPicRL )
     2611{
     2612  for( UInt i = 0; i < m_activeNumILRRefIdx; i++ )
     2613  {
     2614    UInt refLayerIdc = m_interLayerPredLayerIdc[i];
     2615
     2616    TComPic* pcRefPicBL = pcRefPicRL[refLayerIdc];
     2617    //set reference picture POC of each ILP reference
     2618    Int thePoc = ilpPic[refLayerIdc]->getPOC();
     2619    assert(thePoc >= 0);
     2620    assert(thePoc == pcRefPicBL->getPOC());
     2621
     2622    ilpPic[refLayerIdc]->getSlice(0)->setBaseColPic( refLayerIdc, pcRefPicBL );
     2623
     2624    //copy reference pictures marking from the reference layer
     2625    ilpPic[refLayerIdc]->getSlice(0)->copySliceInfo(pcRefPicBL->getSlice(0));
     2626
     2627    for( Int refList = 0; refList < 2; refList++ )
     2628    {
     2629      RefPicList refPicList = RefPicList( refList );
     2630
     2631      //set reference POC of ILP
     2632      ilpPic[refLayerIdc]->getSlice(0)->setNumRefIdx(refPicList, pcRefPicBL->getSlice(0)->getNumRefIdx(refPicList));
     2633      assert(ilpPic[refLayerIdc]->getSlice(0)->getNumRefIdx(refPicList) >= 0);
     2634      assert(ilpPic[refLayerIdc]->getSlice(0)->getNumRefIdx(refPicList) <= MAX_NUM_REF);
     2635
     2636      //initialize reference POC of ILP
     2637      for(Int refIdx = 0; refIdx < pcRefPicBL->getSlice(0)->getNumRefIdx(refPicList); refIdx++)
     2638      {
     2639        ilpPic[refLayerIdc]->getSlice(0)->setRefPOC(pcRefPicBL->getSlice(0)->getRefPOC(refPicList, refIdx), refPicList, refIdx);
     2640        ilpPic[refLayerIdc]->getSlice(0)->setRefPic(pcRefPicBL->getSlice(0)->getRefPic(refPicList, refIdx), refPicList, refIdx);
     2641      }
     2642
     2643      for(Int refIdx = pcRefPicBL->getSlice(0)->getNumRefIdx(refPicList); refIdx < MAX_NUM_REF; refIdx++)
     2644      {
     2645        ilpPic[refLayerIdc]->getSlice(0)->setRefPOC(0, refPicList, refIdx);
     2646        ilpPic[refLayerIdc]->getSlice(0)->setRefPic(NULL, refPicList, refIdx);
     2647      }
    26382648    }
    26392649  }
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComSlice.h

    r258 r282  
    14941494#if SVC_EXTENSION
    14951495  UInt        m_layerId;
    1496   TComPic*    m_pcBaseColPic;
    1497   TComPicYuv* m_pcFullPelBaseRec;
     1496  TComPic*    m_pcBaseColPic[MAX_LAYERS];
     1497  TComPicYuv* m_pcFullPelBaseRec[MAX_LAYERS];
    14981498#endif
    14991499  Bool        m_bTLayerSwitchingFlag;
     
    17751775
    17761776#if SVC_EXTENSION
    1777   Void      setBaseColPic       ( TComList<TComPic*>& rcListPic , UInt layerID );
    1778   Void      setBaseColPic       ( TComPic* p)     { m_pcBaseColPic = p; }
    1779   TComPic*  getBaseColPic       ()                { return m_pcBaseColPic; }
     1777  Void      setBaseColPic       ( TComList<TComPic*>& rcListPic , UInt refLayerIdc );
     1778  Void      setBaseColPic       (UInt refLayerIdc, TComPic* p)     { m_pcBaseColPic[refLayerIdc] = p; }
     1779  TComPic*  getBaseColPic       (UInt refLayerIdc)                { return m_pcBaseColPic[refLayerIdc]; }
     1780  TComPic** getBaseColPic       ()                { return &m_pcBaseColPic[0]; }
    17801781
    17811782  Void      setLayerId (UInt layerId)   { m_layerId = layerId; }
    17821783  UInt      getLayerId ()               { return m_layerId;    }
    17831784
    1784   Void        setFullPelBaseRec   ( TComPicYuv* p) { m_pcFullPelBaseRec = p; }
    1785   TComPicYuv* getFullPelBaseRec   ()               { return  m_pcFullPelBaseRec;  }
     1785  Void        setFullPelBaseRec   (UInt refLayerIdc, TComPicYuv* p) { m_pcFullPelBaseRec[refLayerIdc] = p; }
     1786  TComPicYuv* getFullPelBaseRec   (UInt refLayerIdc)               { return  m_pcFullPelBaseRec[refLayerIdc];  }
    17861787
    17871788#if AVC_SYNTAX
     
    17941795
    17951796#if REF_IDX_MFM
    1796   Void      setRefPOCListILP(TComPic** ilpPic, TComPic *pcRefPicBL);
     1797  Void      setRefPOCListILP(TComPic** ilpPic, TComPic** pcRefPicRL);
    17971798#endif
    17981799
     
    18011802  Void      setActiveNumILRRefIdx     ( Int i )         { m_activeNumILRRefIdx = i;     } 
    18021803
    1803   Int       getInterLayerPredLayerIdc (UInt Idx )               { return  m_interLayerPredLayerIdc[Idx];}
    1804   Void      setInterLayerPredLayerIdc (UInt val, UInt Idx)      { m_interLayerPredLayerIdc[Idx] = val;  }
     1804  Int       getInterLayerPredLayerIdc (UInt layerIdx)                        { return  m_interLayerPredLayerIdc[layerIdx];}
     1805  Void      setInterLayerPredLayerIdc (UInt refLayerIdc, UInt layerIdx)      { m_interLayerPredLayerIdc[layerIdx] = refLayerIdc;  }
    18051806
    18061807  Void      setInterLayerPredEnabledFlag     ( Bool   val )    { m_interLayerPredEnabledFlag = val; }
    18071808  Bool      getInterLayerPredEnabledFlag     ()                { return m_interLayerPredEnabledFlag;}
    1808 
    18091809#else
    18101810  Void      setNumILRRefIdx     ( Int i )               { m_numILRRefIdx = i;     }
    18111811#endif
    18121812#endif
     1813
     1814TComPic* getRefPic(TComList<TComPic*>& rcListPic, Int poc) { return xGetRefPic( rcListPic, poc ); }
    18131815
    18141816#endif //SVC_EXTENSION
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComUpsampleFilter.cpp

    r237 r282  
    7474
    7575#if SCALED_REF_LAYER_OFFSETS
    76 Void TComUpsampleFilter::upsampleBasePic( TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic, const Window window )
    77 #else
    78 Void TComUpsampleFilter::upsampleBasePic( TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic )
     76Void TComUpsampleFilter::upsampleBasePic( UInt refLayerIdc, TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic, const Window window )
     77#else
     78Void TComUpsampleFilter::upsampleBasePic( UInt refLayerIdc, TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic )
    7979#endif
    8080{
     
    127127  Pel* piDstV;
    128128
    129   if( widthEL == widthBL && heightEL == heightBL )
     129#if SIMPLIFIED_MV_POS_SCALING
     130  Int scaleX = g_posScalingFactor[refLayerIdc][0];
     131  Int scaleY = g_posScalingFactor[refLayerIdc][1];
     132#else
     133  Int   scaleX     = ( ( widthBL << shiftX ) + ( widthEL >> 1 ) ) / widthEL;
     134  Int   scaleY     = ( ( heightBL << shiftY ) + ( heightEL >> 1 ) ) / heightEL;
     135#endif
     136
     137  if( scaleX == 65536 && scaleY == 65536 ) // ratio 1x
    130138  {
    131139    piSrcY = piSrcBufY - scalEL.getWindowLeftOffset() - scalEL.getWindowTopOffset() * strideEL;
     
    196204    Int shiftYM4 = shiftY - 4;
    197205
    198     Int   scaleX     = ( ( widthBL << shiftX ) + ( widthEL >> 1 ) ) / widthEL;
    199     Int   scaleY     = ( ( heightBL << shiftY ) + ( heightEL >> 1 ) ) / heightEL;
    200 
    201206#if ILP_DECODED_PICTURE
    202207    widthEL   = pcUsPic->getWidth ();
     
    334339    shiftYM4 = shiftY - 4;
    335340
     341#if !SIMPLIFIED_MV_POS_SCALING
    336342    scaleX     = ( ( widthBL << shiftX ) + ( widthEL >> 1 ) ) / widthEL;
    337343    scaleY     = ( ( heightBL << shiftY ) + ( heightEL >> 1 ) ) / heightEL;
     344#endif
    338345
    339346#if ILP_DECODED_PICTURE
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComUpsampleFilter.h

    r235 r282  
    4444
    4545#if SCALED_REF_LAYER_OFFSETS
    46   Void upsampleBasePic( TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic, const Window window );
     46  Void upsampleBasePic( UInt refLayerIdc, TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic, const Window window );
    4747#else
    48  Void upsampleBasePic( TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic );
     48 Void upsampleBasePic( UInt refLayerIdc, TComPicYuv* pcUsPic, TComPicYuv* pcBasePic, TComPicYuv* pcTempPic );
    4949#endif
    5050};
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TypeDef.h

    r242 r282  
    4747#define SCALED_REF_LAYER_OFFSET_FLAG     1      ///< M0309: Signal scaled reference layer offsets in SPS
    4848#define SCALED_REF_LAYER_OFFSETS         1      ///< M0309: Signal scaled reference layer offsets in SPS
    49 #define MAX_LAYERS                       2      ///< max number of layers the codec is supposed to handle
     49#define MAX_LAYERS                       3      ///< max number of layers the codec is supposed to handle
    5050
    5151#define VPS_RENAME                       1      ///< Rename variables max_layer_id and num_layer_sets_minus1 in VPS
Note: See TracChangeset for help on using the changeset viewer.