Changeset 291 in SHVCSoftware for branches


Ignore:
Timestamp:
18 Jun 2013, 14:06:13 (12 years ago)
Author:
nokia
Message:

JCTVC-M0457: Co-located picture signaling

Location:
branches/SHM-2.1-dev/source/Lib
Files:
11 edited

Legend:

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

    r288 r291  
    35833583
    35843584  // use coldir.
     3585#if M0457_COL_PICTURE_SIGNALING
     3586  TComPic *pColPic;
     3587  if (m_layerId > 0 && getSlice()->getAltColIndicationFlag())
     3588  {
     3589    pColPic = getSlice()->getMotionPredIlp();
     3590  }
     3591  else
     3592  {
     3593    pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx());
     3594  }
     3595#else
    35853596  TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx());
     3597#endif
    35863598  TComDataCU *pColCU = pColPic->getCU( uiCUAddr );
    35873599  if(pColCU->getPic()==0||pColCU->getPartitionSize(uiPartUnitIdx)==SIZE_NONE)
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComSlice.cpp

    r290 r291  
    135135  m_numILRRefIdx = 0;
    136136#endif
     137#if M0457_COL_PICTURE_SIGNALING
     138  m_altColIndicationFlag = false;
     139  m_colRefLayerIdx       = 0;
     140#endif
    137141#endif
    138142#endif
     
    545549#endif
    546550    {
     551#if M0457_COL_PICTURE_SIGNALING
     552      if(!(m_eNalUnitType >= NAL_UNIT_CODED_SLICE_BLA_W_LP && m_eNalUnitType <= NAL_UNIT_CODED_SLICE_CRA) && getMFMEnabledFlag())
     553#else
    547554      if(!(m_eNalUnitType >= NAL_UNIT_CODED_SLICE_BLA_W_LP && m_eNalUnitType <= NAL_UNIT_CODED_SLICE_CRA) && m_pcSPS->getMFMEnabledFlag())
     555#endif
    548556      {
    549557        ilpPic[refLayerIdc]->copyUpsampledMvField( refLayerIdc, m_pcBaseColPic[refLayerIdc] );
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TComSlice.h

    r290 r291  
    10381038#endif
    10391039#if REF_IDX_MFM
     1040#if !M0457_COL_PICTURE_SIGNALING
    10401041  Bool m_bMFMEnabledFlag;
     1042#endif
    10411043#endif
    10421044#if SCALED_REF_LAYER_OFFSETS
     
    11801182#endif
    11811183#if REF_IDX_MFM
     1184#if !M0457_COL_PICTURE_SIGNALING
    11821185  Void     setMFMEnabledFlag(Bool flag) {m_bMFMEnabledFlag = flag;}
    11831186  Bool     getMFMEnabledFlag()          {return m_bMFMEnabledFlag;}
     1187#endif
    11841188#endif
    11851189#if SCALED_REF_LAYER_OFFSETS
     
    15151519  TComPic*    m_pcBaseColPic[MAX_LAYERS];
    15161520  TComPicYuv* m_pcFullPelBaseRec[MAX_LAYERS];
     1521#if REF_IDX_FRAMEWORK && M0457_COL_PICTURE_SIGNALING
     1522  Int         m_numMotionPredRefLayers;
     1523#if REF_IDX_MFM
     1524  Bool        m_bMFMEnabledFlag;
     1525  Int         m_colRefLayerIdx;
     1526  Bool        m_altColIndicationFlag;
     1527  TComPic*    m_pcIlpPic;
     1528#endif
     1529#endif
    15171530#endif
    15181531  Bool        m_bTLayerSwitchingFlag;
     
    18341847  Void      setNumILRRefIdx     ( Int i )               { m_numILRRefIdx = i;     }
    18351848#endif
     1849
     1850#if REF_IDX_FRAMEWORK && M0457_COL_PICTURE_SIGNALING
     1851  Void      setNumMotionPredRefLayers(int i)            { m_numMotionPredRefLayers = i; }
     1852  Int       getNumMotionPredRefLayers()                 { return m_numMotionPredRefLayers; }
     1853#if REF_IDX_MFM
     1854  Void      setMFMEnabledFlag(Bool flag)                { m_bMFMEnabledFlag = flag; }
     1855  Bool      getMFMEnabledFlag()                         { return m_bMFMEnabledFlag; }
     1856  Void      setColRefLayerIdx(Int i)                    { m_colRefLayerIdx = i;     }
     1857  Int       getColRefLayerIdx()                         { return m_colRefLayerIdx;  }
     1858  Void      setAltColIndicationFlag(Bool i)             { m_altColIndicationFlag = i; }
     1859  Bool      getAltColIndicationFlag()                   { return m_altColIndicationFlag; }
     1860  Void      setMotionPredIlp(TComPic *ilpPic)           { m_pcIlpPic = ilpPic; }
     1861  TComPic*  getMotionPredIlp()                          { return m_pcIlpPic; }
     1862#endif
     1863#endif
     1864
    18361865#endif
    18371866
  • branches/SHM-2.1-dev/source/Lib/TLibCommon/TypeDef.h

    r290 r291  
    101101#define ILR_RESTR                        1     ///< JCTVC-M0209 Inter-layer RPS and RPL
    102102#endif
     103#define M0457_COL_PICTURE_SIGNALING      1
    103104
    104105#else
  • branches/SHM-2.1-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r290 r291  
    717717  READ_FLAG( uiCode, "sps_temporal_mvp_enable_flag" );            pcSPS->setTMVPFlagsPresent(uiCode);
    718718#if REF_IDX_MFM
     719#if !M0457_COL_PICTURE_SIGNALING
    719720  if(pcSPS->getLayerId() > 0)
    720721  {
     
    722723    pcSPS->setMFMEnabledFlag( uiCode ? true : false );
    723724  }
     725#endif
    724726#endif
    725727  READ_FLAG( uiCode, "sps_strong_intra_smoothing_enable_flag" );  pcSPS->setUseStrongIntraSmoothing(uiCode);
     
    16131615    if ( rpcSlice->getEnableTMVPFlag() )
    16141616    {
     1617#if REF_IDX_FRAMEWORK && M0457_COL_PICTURE_SIGNALING
     1618      rpcSlice->setMFMEnabledFlag( false );
     1619      rpcSlice->setColRefLayerIdx( 0 );
     1620      rpcSlice->setAltColIndicationFlag( false );
     1621      if ( sps->getLayerId() > 0 && rpcSlice->getNumMotionPredRefLayers() > 0 )
     1622      {
     1623        READ_FLAG( uiCode, "alt_collocated_indication_flag" );
     1624        rpcSlice->setAltColIndicationFlag( uiCode == 1 ? true : false );
     1625        rpcSlice->setMFMEnabledFlag( uiCode == 1 ? true : false );
     1626        if ( rpcSlice->getNumMotionPredRefLayers() > 1 )
     1627        {
     1628          READ_UVLC( uiCode, "collocated_ref_layer_idx" );
     1629          rpcSlice->setColRefLayerIdx( uiCode );
     1630        }
     1631      }
     1632      else
     1633      {
     1634#endif
    16151635      if ( rpcSlice->getSliceType() == B_SLICE )
    16161636      {
     
    16341654        rpcSlice->setColRefIdx(0);
    16351655      }
     1656#if REF_IDX_FRAMEWORK && M0457_COL_PICTURE_SIGNALING
     1657      }
     1658#endif
    16361659    }
    16371660    if ( (pps->getUseWP() && rpcSlice->getSliceType()==P_SLICE) || (pps->getWPBiPred() && rpcSlice->getSliceType()==B_SLICE) )
  • branches/SHM-2.1-dev/source/Lib/TLibDecoder/TDecTop.cpp

    r290 r291  
    541541  setRefLayerParams(m_apcSlicePilot->getVPS());
    542542#endif
     543#if REF_IDX_FRAMEWORK && M0457_COL_PICTURE_SIGNALING
     544  m_apcSlicePilot->setNumMotionPredRefLayers(m_numMotionPredRefLayers);
     545#endif
     546
    543547#if SVC_EXTENSION
    544548  m_cEntropyDecoder.decodeSliceHeader (m_apcSlicePilot, &m_parameterSetManagerDecoder[m_layerId]);
     
    919923      setILRPic(pcPic);
    920924#if REF_IDX_MFM
     925#if M0457_COL_PICTURE_SIGNALING
     926      if( pcSlice->getMFMEnabledFlag() )
     927#else
    921928      if( pcSlice->getSPS()->getMFMEnabledFlag() )
     929#endif
    922930      {
    923931        pcSlice->setRefPOCListILP(m_ppcTDecTop[m_layerId]->m_cIlpPic, pcSlice->getBaseColPic());
     932#if M0457_COL_PICTURE_SIGNALING
     933        pcSlice->setMotionPredIlp(getMotionPredIlp(pcSlice));
     934#endif
    924935      }
    925936#endif
     
    13721383
    13731384#endif
     1385
     1386#if M0457_COL_PICTURE_SIGNALING
     1387TComPic* TDecTop::getMotionPredIlp(TComSlice* pcSlice)
     1388{
     1389  TComPic* ilpPic = NULL;
     1390  Int activeMotionPredReflayerIdx = 0;
     1391
     1392  for( Int i = 0; i < pcSlice->getActiveNumILRRefIdx(); i++ )
     1393  {
     1394    UInt refLayerIdc = pcSlice->getInterLayerPredLayerIdc(i);
     1395    if (getMotionPredEnabledFlag(refLayerIdc))
     1396    {
     1397      if (activeMotionPredReflayerIdx == pcSlice->getColRefLayerIdx())
     1398      {
     1399        ilpPic = m_cIlpPic[i];
     1400        break;
     1401      }
     1402      else
     1403      {
     1404        activeMotionPredReflayerIdx++;
     1405      }
     1406    }
     1407  }
     1408
     1409  assert(ilpPic != NULL);
     1410
     1411  return ilpPic;
     1412}
     1413#endif
     1414
    13741415//! \}
  • branches/SHM-2.1-dev/source/Lib/TLibDecoder/TDecTop.h

    r290 r291  
    230230  Void      xDecodePPS();
    231231  Void      xDecodeSEI( TComInputBitstream* bs, const NalUnitType nalUnitType );
     232#if M0457_COL_PICTURE_SIGNALING
     233  TComPic*  getMotionPredIlp(TComSlice* pcSlice);
     234#endif
    232235
    233236};// END CLASS DEFINITION TDecTop
  • branches/SHM-2.1-dev/source/Lib/TLibEncoder/TEncCavlc.cpp

    r290 r291  
    548548  WRITE_FLAG( pcSPS->getTMVPFlagsPresent()  ? 1 : 0,           "sps_temporal_mvp_enable_flag" );
    549549#if REF_IDX_MFM
     550#if !M0457_COL_PICTURE_SIGNALING
    550551  if( pcSPS->getLayerId() > 0 )
    551552  {
    552553    WRITE_FLAG( pcSPS->getMFMEnabledFlag() ? 1 : 0,          "sps_enh_mfm_enable_flag" );
    553554  }
     555#endif
    554556#endif
    555557  WRITE_FLAG( pcSPS->getUseStrongIntraSmoothing(),             "sps_strong_intra_smoothing_enable_flag" );
     
    12191221    if ( pcSlice->getEnableTMVPFlag() )
    12201222    {
     1223#if REF_IDX_FRAMEWORK && M0457_COL_PICTURE_SIGNALING
     1224      if ( !pcSlice->getIdrPicFlag() && pcSlice->getLayerId() > 0 && pcSlice->getNumMotionPredRefLayers() > 0 )
     1225      {
     1226        WRITE_FLAG( 1, "alt_collocated_indication_flag" );
     1227        if (pcSlice->getNumMotionPredRefLayers() > 1)
     1228        {
     1229          WRITE_UVLC(0, "collocated_ref_layer_idx");
     1230        }
     1231      }
     1232      else
     1233      {
     1234#endif
    12211235      if ( pcSlice->getSliceType() == B_SLICE )
    12221236      {
     
    12301244        WRITE_UVLC( pcSlice->getColRefIdx(), "collocated_ref_idx" );
    12311245      }
     1246#if REF_IDX_FRAMEWORK && M0457_COL_PICTURE_SIGNALING
     1247      }
     1248#endif
    12321249    }
    12331250    if ( (pcSlice->getPPS()->getUseWP() && pcSlice->getSliceType()==P_SLICE) || (pcSlice->getPPS()->getWPBiPred() && pcSlice->getSliceType()==B_SLICE) )
  • branches/SHM-2.1-dev/source/Lib/TLibEncoder/TEncGOP.cpp

    r288 r291  
    487487    m_pcSliceEncoder->initEncSlice ( pcPic, iPOCLast, pocCurr, iNumPicRcvd, iGOPid, pcSlice, m_pcEncTop->getSPS(), m_pcEncTop->getPPS() );
    488488#endif
     489#if M0457_COL_PICTURE_SIGNALING
     490    pcSlice->setMFMEnabledFlag(m_pcEncTop->getMFMEnabledFlag());
     491    pcSlice->setAltColIndicationFlag(m_pcEncTop->getNumMotionPredRefLayers() > 0 ? true : false);
     492    pcSlice->setColRefLayerIdx(0);
     493#endif
    489494    pcSlice->setLastIDR(m_iLastIDR);
    490495    pcSlice->setSliceIdx(0);
     
    760765
    761766#if REF_IDX_FRAMEWORK
     767#if M0457_COL_PICTURE_SIGNALING
     768    if ( pcSlice->getSliceType() == B_SLICE && !pcSlice->getAltColIndicationFlag() )
     769#else
    762770    if( pcSlice->getSliceType() == B_SLICE )
     771#endif
    763772    {
    764773      pcSlice->setColFromL0Flag(1-uiColDir);
     
    789798
    790799#if REF_IDX_MFM
     800#if M0457_COL_PICTURE_SIGNALING
     801      if( pcSlice->getMFMEnabledFlag() )
     802#else
    791803      if( pcSlice->getSPS()->getMFMEnabledFlag() )
     804#endif
    792805      {
    793806        pcSlice->setRefPOCListILP(m_pcEncTop->getIlpList(), pcSlice->getBaseColPic());
     807#if M0457_COL_PICTURE_SIGNALING
     808        pcSlice->setMotionPredIlp(getMotionPredIlp(pcSlice));
     809#endif
    794810      }
    795811#endif
     
    798814
    799815#if REF_IDX_MFM
     816#if M0457_COL_PICTURE_SIGNALING
     817      if( pcSlice->getMFMEnabledFlag() && !pcSlice->getAltColIndicationFlag() )
     818#else
    800819      if( pcSlice->getSPS()->getMFMEnabledFlag() )
     820#endif
    801821      {
    802822        Bool found         = false;
     
    16081628            startCUAddrSliceSegmentIdx++;
    16091629          }
    1610 
     1630#if REF_IDX_FRAMEWORK && M0457_COL_PICTURE_SIGNALING
     1631          pcSlice->setNumMotionPredRefLayers(m_pcEncTop->getNumMotionPredRefLayers());
     1632#endif
    16111633          pcSlice->setRPS(pcPic->getSlice(0)->getRPS());
    16121634          pcSlice->setRPSidx(pcPic->getSlice(0)->getRPSidx());
     
    30013023}
    30023024#endif
     3025
     3026#if M0457_COL_PICTURE_SIGNALING
     3027TComPic* TEncGOP::getMotionPredIlp(TComSlice* pcSlice)
     3028{
     3029  TComPic* ilpPic = NULL;
     3030  Int activeMotionPredReflayerIdx = 0;
     3031
     3032  for( Int i = 0; i < pcSlice->getActiveNumILRRefIdx(); i++ )
     3033  {
     3034    UInt refLayerIdc = pcSlice->getInterLayerPredLayerIdc(i);
     3035    if (m_pcEncTop->getMotionPredEnabledFlag(refLayerIdc))
     3036    {
     3037      if (activeMotionPredReflayerIdx == pcSlice->getColRefLayerIdx())
     3038      {
     3039        ilpPic = m_pcEncTop->getIlpList()[i];
     3040        break;
     3041      }
     3042      else
     3043      {
     3044        activeMotionPredReflayerIdx++;
     3045      }
     3046    }
     3047  }
     3048
     3049  assert(ilpPic != NULL);
     3050
     3051  return ilpPic;
     3052}
     3053#endif
     3054
    30033055//! \}
  • branches/SHM-2.1-dev/source/Lib/TLibEncoder/TEncGOP.h

    r191 r291  
    207207  Void dblMetric( TComPic* pcPic, UInt uiNumSlices );
    208208#endif
     209#if M0457_COL_PICTURE_SIGNALING
     210  TComPic* getMotionPredIlp(TComSlice* pcSlice);
     211#endif
    209212};// END CLASS DEFINITION TEncGOP
    210213
  • branches/SHM-2.1-dev/source/Lib/TLibEncoder/TEncTop.cpp

    r288 r291  
    599599#endif
    600600#if REF_IDX_MFM
     601#if !M0457_COL_PICTURE_SIGNALING
    601602  m_cSPS.setMFMEnabledFlag(m_bMFMEnabledFlag);
     603#endif
    602604#endif
    603605#if SCALED_REF_LAYER_OFFSETS
Note: See TracChangeset for help on using the changeset viewer.