Changeset 894 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibEncoder


Ignore:
Timestamp:
26 Sep 2014, 03:22:40 (11 years ago)
Author:
qualcomm
Message:

JCTVC-R0231: Signalling of VPS VUI BSP HRD parameters and other related changes (Macro: VPS_VUI_BSP_HRD_PARAMS)

This patch includes some of the signalling changes in the VPS VUI BSP HRD parameters in R0231, and related adoptions.

From: Adarsh K. Ramasubramonian <aramasub@…>

Location:
branches/SHM-dev/source/Lib/TLibEncoder
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.cpp

    r884 r894  
    149149
    150150#if O0164_MULTI_LAYER_HRD
     151#if VPS_VUI_BSP_HRD_PARAMS
     152void SEIWriter::xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting* nestingSeiPtr, const SEIBspNesting* bspNestingSeiPtr)
     153#else
    151154void SEIWriter::xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting& nestingSei, const SEIBspNesting& bspNestingSei)
     155#endif
    152156#else
    153157void SEIWriter::xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComSPS *sps)
    154158#endif
    155159{
     160#if VPS_VUI_BSP_HRD_PARAMS
     161  SEIScalableNesting nestingSei;
     162  SEIBspNesting      bspNestingSei;
     163  if( nestingSeiPtr )
     164  {
     165    nestingSei = *nestingSeiPtr;
     166  }
     167  if( bspNestingSeiPtr )
     168  {
     169    bspNestingSei = *bspNestingSeiPtr;
     170  }
     171#endif
    156172  switch (sei.payloadType())
    157173  {
     
    162178    xWriteSEIActiveParameterSets(*static_cast<const SEIActiveParameterSets*>(& sei));
    163179    break;
     180  case SEI::DECODED_PICTURE_HASH:
     181    xWriteSEIDecodedPictureHash(*static_cast<const SEIDecodedPictureHash*>(&sei));
     182    break;
     183#if VPS_VUI_BSP_HRD_PARAMS
     184  case SEI::DECODING_UNIT_INFO:
     185    xWriteSEIDecodingUnitInfo(*static_cast<const SEIDecodingUnitInfo*>(& sei), sps, nestingSeiPtr, bspNestingSeiPtr, vps);
     186    break;
     187  case SEI::BUFFERING_PERIOD:
     188    xWriteSEIBufferingPeriod(*static_cast<const SEIBufferingPeriod*>(&sei), sps, nestingSeiPtr, bspNestingSeiPtr, vps);
     189    break;
     190  case SEI::PICTURE_TIMING:
     191    xWriteSEIPictureTiming(*static_cast<const SEIPictureTiming*>(&sei), sps, nestingSeiPtr, bspNestingSeiPtr, vps);
     192    break;
     193#else
    164194  case SEI::DECODING_UNIT_INFO:
    165195    xWriteSEIDecodingUnitInfo(*static_cast<const SEIDecodingUnitInfo*>(& sei), sps);
    166196    break;
    167   case SEI::DECODED_PICTURE_HASH:
    168     xWriteSEIDecodedPictureHash(*static_cast<const SEIDecodedPictureHash*>(&sei));
    169     break;
    170197  case SEI::BUFFERING_PERIOD:
    171198    xWriteSEIBufferingPeriod(*static_cast<const SEIBufferingPeriod*>(&sei), sps);
     
    174201    xWriteSEIPictureTiming(*static_cast<const SEIPictureTiming*>(&sei), sps);
    175202    break;
     203#endif
    176204  case SEI::RECOVERY_POINT:
    177205    xWriteSEIRecoveryPoint(*static_cast<const SEIRecoveryPoint*>(&sei));
     
    287315#endif
    288316#if O0164_MULTI_LAYER_HRD
     317#if VPS_VUI_BSP_HRD_PARAMS
     318  xWriteSEIpayloadData(bs_count, sei, vps, sps, nestingSei, bspNestingSei);
     319#else
    289320  xWriteSEIpayloadData(bs_count, sei, vps, sps, *nestingSei, *bspNestingSei);
     321#endif
    290322#else
    291323  xWriteSEIpayloadData(bs_count, sei, sps);
     
    326358
    327359#if O0164_MULTI_LAYER_HRD
     360#if VPS_VUI_BSP_HRD_PARAMS
     361  xWriteSEIpayloadData(bs, sei, vps, sps, nestingSei, bspNestingSei);
     362#else
    328363  xWriteSEIpayloadData(bs, sei, vps, sps, *nestingSei, *bspNestingSei);
     364#endif
    329365#else
    330366  xWriteSEIpayloadData(bs, sei, sps);
     
    403439}
    404440
     441#if VPS_VUI_BSP_HRD_PARAMS
     442Void SEIWriter::xWriteSEIDecodingUnitInfo(const SEIDecodingUnitInfo& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps)
     443#else
    405444Void SEIWriter::xWriteSEIDecodingUnitInfo(const SEIDecodingUnitInfo& sei, TComSPS *sps)
    406 {
     445#endif
     446{
     447#if VPS_VUI_BSP_HRD_PARAMS
     448  TComHRD *hrd;
     449  if( bspNestingSei )   // If DU info SEI contained inside a BSP nesting SEI message
     450  {
     451    assert( nestingSei );
     452    Int psIdx = bspNestingSei->m_seiPartitioningSchemeIdx;
     453    Int seiOlsIdx = bspNestingSei->m_seiOlsIdx;
     454    Int maxTemporalId = nestingSei->m_nestingMaxTemporalIdPlus1[0] - 1;
     455    Int maxValues = vps->getNumBspSchedulesMinus1(seiOlsIdx, psIdx, maxTemporalId) + 1;
     456    std::vector<Int> hrdIdx(maxValues, 0);
     457    std::vector<TComHRD *> hrdVec;
     458    std::vector<Int> syntaxElemLen(maxValues, 0);
     459    for(Int i = 0; i < maxValues; i++)
     460    {
     461      hrdIdx[i] = vps->getBspHrdIdx( seiOlsIdx, psIdx, maxTemporalId, i, bspNestingSei->m_bspIdx);
     462      hrdVec.push_back(vps->getBspHrd(hrdIdx[i]));
     463   
     464      syntaxElemLen[i] = hrdVec[i]->getInitialCpbRemovalDelayLengthMinus1() + 1;
     465      if ( !(hrdVec[i]->getNalHrdParametersPresentFlag() || hrdVec[i]->getVclHrdParametersPresentFlag()) )
     466      {
     467        assert( syntaxElemLen[i] == 24 ); // Default of value init_cpb_removal_delay_length_minus1 is 23
     468      }
     469      if( i > 0 )
     470      {
     471        assert( hrdVec[i]->getSubPicCpbParamsPresentFlag()    == hrdVec[i-1]->getSubPicCpbParamsPresentFlag() );
     472        assert( hrdVec[i]->getSubPicCpbParamsInPicTimingSEIFlag()   == hrdVec[i-1]->getSubPicCpbParamsInPicTimingSEIFlag() );
     473        assert( hrdVec[i]->getDpbOutputDelayDuLengthMinus1()  == hrdVec[i-1]->getDpbOutputDelayDuLengthMinus1() );
     474        // To be done: Check CpbDpbDelaysPresentFlag
     475      }
     476    }
     477    hrd = hrdVec[0];
     478  }
     479  else
     480  {
     481    TComVUI *vui = sps->getVuiParameters();
     482    hrd = vui->getHrdParameters();
     483  }
     484#else
    407485  TComVUI *vui = sps->getVuiParameters();
     486  TComHrd *hrd = vui->getHrdParameters();
     487#endif
    408488  WRITE_UVLC(sei.m_decodingUnitIdx, "decoding_unit_idx");
    409   if(vui->getHrdParameters()->getSubPicCpbParamsInPicTimingSEIFlag())
    410   {
    411     WRITE_CODE( sei.m_duSptCpbRemovalDelay, (vui->getHrdParameters()->getDuCpbRemovalDelayLengthMinus1() + 1), "du_spt_cpb_removal_delay");
     489  if(hrd->getSubPicCpbParamsInPicTimingSEIFlag())
     490  {
     491    WRITE_CODE( sei.m_duSptCpbRemovalDelay, (hrd->getDuCpbRemovalDelayLengthMinus1() + 1), "du_spt_cpb_removal_delay");
    412492  }
    413493  WRITE_FLAG( sei.m_dpbOutputDuDelayPresentFlag, "dpb_output_du_delay_present_flag");
    414494  if(sei.m_dpbOutputDuDelayPresentFlag)
    415495  {
    416     WRITE_CODE(sei.m_picSptDpbOutputDuDelay, vui->getHrdParameters()->getDpbOutputDelayDuLengthMinus1() + 1, "pic_spt_dpb_output_du_delay");
    417   }
    418   xWriteByteAlign();
    419 }
    420 
     496    WRITE_CODE(sei.m_picSptDpbOutputDuDelay,hrd->getDpbOutputDelayDuLengthMinus1() + 1, "pic_spt_dpb_output_du_delay");
     497  }
     498  xWriteByteAlign();
     499}
     500
     501#if VPS_VUI_BSP_HRD_PARAMS
     502Void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps)
     503#else
    421504Void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, TComSPS *sps)
     505#endif
    422506{
    423507  Int i, nalOrVcl;
     508#if VPS_VUI_BSP_HRD_PARAMS
     509  TComHRD *hrd;
     510  if( bspNestingSei )   // If BP SEI contained inside a BSP nesting SEI message
     511  {
     512    assert( nestingSei );
     513    Int psIdx = bspNestingSei->m_seiPartitioningSchemeIdx;
     514    Int seiOlsIdx = bspNestingSei->m_seiOlsIdx;
     515    Int maxTemporalId = nestingSei->m_nestingMaxTemporalIdPlus1[0] - 1;
     516    Int maxValues = vps->getNumBspSchedulesMinus1(seiOlsIdx, psIdx, maxTemporalId) + 1;
     517    std::vector<Int> hrdIdx(maxValues, 0);
     518    std::vector<TComHRD *> hrdVec;
     519    std::vector<Int> syntaxElemLen(maxValues, 0);
     520    for(i = 0; i < maxValues; i++)
     521    {
     522      hrdIdx[i] = vps->getBspHrdIdx( seiOlsIdx, psIdx, maxTemporalId, i, bspNestingSei->m_bspIdx);
     523      hrdVec.push_back(vps->getBspHrd(hrdIdx[i]));
     524   
     525      syntaxElemLen[i] = hrdVec[i]->getInitialCpbRemovalDelayLengthMinus1() + 1;
     526      if ( !(hrdVec[i]->getNalHrdParametersPresentFlag() || hrdVec[i]->getVclHrdParametersPresentFlag()) )
     527      {
     528        assert( syntaxElemLen[i] == 24 ); // Default of value init_cpb_removal_delay_length_minus1 is 23
     529      }
     530      if( i > 0 )
     531      {
     532        assert( hrdVec[i]->getCpbRemovalDelayLengthMinus1()   == hrdVec[i-1]->getCpbRemovalDelayLengthMinus1() );
     533        assert( hrdVec[i]->getDpbOutputDelayDuLengthMinus1()  == hrdVec[i-1]->getDpbOutputDelayDuLengthMinus1() );
     534        assert( hrdVec[i]->getSubPicCpbParamsPresentFlag()    == hrdVec[i-1]->getSubPicCpbParamsPresentFlag() );
     535      }
     536    }
     537    hrd = hrdVec[i];
     538  }
     539  else
     540  {
     541    TComVUI *vui = sps->getVuiParameters();
     542    hrd = vui->getHrdParameters();
     543  }
     544  // To be done: When contained in an BSP HRD SEI message, the hrd structure is to be chosen differently.
     545#else
    424546  TComVUI *vui = sps->getVuiParameters();
    425547  TComHRD *hrd = vui->getHrdParameters();
     548#endif
    426549
    427550  WRITE_UVLC( sei.m_bpSeqParameterSetId, "bp_seq_parameter_set_id" );
     
    462585  xWriteByteAlign();
    463586}
     587#if VPS_VUI_BSP_HRD_PARAMS
     588Void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei,  TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps)
     589#else
    464590Void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei,  TComSPS *sps)
     591#endif
    465592{
    466593  Int i;
     594#if VPS_VUI_BSP_HRD_PARAMS
     595  TComHRD *hrd;   
     596  TComVUI *vui = sps->getVuiParameters();
     597  if( bspNestingSei )   // If BP SEI contained inside a BSP nesting SEI message
     598  {
     599    assert( nestingSei );
     600    Int psIdx = bspNestingSei->m_seiPartitioningSchemeIdx;
     601    Int seiOlsIdx = bspNestingSei->m_seiOlsIdx;
     602    Int maxTemporalId = nestingSei->m_nestingMaxTemporalIdPlus1[0] - 1;
     603    Int maxValues = vps->getNumBspSchedulesMinus1(seiOlsIdx, psIdx, maxTemporalId) + 1;
     604    std::vector<Int> hrdIdx(maxValues, 0);
     605    std::vector<TComHRD *> hrdVec;
     606    std::vector<Int> syntaxElemLen(maxValues, 0);
     607    for(i = 0; i < maxValues; i++)
     608    {
     609      hrdIdx[i] = vps->getBspHrdIdx( seiOlsIdx, psIdx, maxTemporalId, i, bspNestingSei->m_bspIdx);
     610      hrdVec.push_back(vps->getBspHrd(hrdIdx[i]));
     611   
     612      syntaxElemLen[i] = hrdVec[i]->getInitialCpbRemovalDelayLengthMinus1() + 1;
     613      if ( !(hrdVec[i]->getNalHrdParametersPresentFlag() || hrdVec[i]->getVclHrdParametersPresentFlag()) )
     614      {
     615        assert( syntaxElemLen[i] == 24 ); // Default of value init_cpb_removal_delay_length_minus1 is 23
     616      }
     617      if( i > 0 )
     618      {
     619        assert( hrdVec[i]->getSubPicCpbParamsPresentFlag()    == hrdVec[i-1]->getSubPicCpbParamsPresentFlag() );
     620        assert( hrdVec[i]->getSubPicCpbParamsInPicTimingSEIFlag()   == hrdVec[i-1]->getSubPicCpbParamsInPicTimingSEIFlag() );
     621        assert( hrdVec[i]->getCpbRemovalDelayLengthMinus1()  == hrdVec[i-1]->getCpbRemovalDelayLengthMinus1() );
     622        assert( hrdVec[i]->getDpbOutputDelayLengthMinus1()  == hrdVec[i-1]->getDpbOutputDelayLengthMinus1() );
     623        assert( hrdVec[i]->getDpbOutputDelayDuLengthMinus1()  == hrdVec[i-1]->getDpbOutputDelayDuLengthMinus1() );
     624        assert( hrdVec[i]->getDuCpbRemovalDelayLengthMinus1()  == hrdVec[i-1]->getDuCpbRemovalDelayLengthMinus1() );
     625        // To be done: Check CpbDpbDelaysPresentFlag
     626      }
     627    }
     628    hrd = hrdVec[0];
     629  }
     630  else
     631  {
     632    hrd = vui->getHrdParameters();
     633  }
     634  // To be done: When contained in an BSP HRD SEI message, the hrd structure is to be chosen differently.
     635#else
    467636  TComVUI *vui = sps->getVuiParameters();
    468637  TComHRD *hrd = vui->getHrdParameters();
    469 
    470   if( vui->getFrameFieldInfoPresentFlag() )
     638#endif
     639
     640  if( vui->getFrameFieldInfoPresentFlag() ) // To be done: Check whether this is the correct invocation of vui when PT SEI contained in BSP nesting SEI
    471641  {
    472642    WRITE_CODE( sei.m_picStruct, 4,              "pic_struct" );
     
    754924  {
    755925    WRITE_FLAG( sei.m_defaultOpFlag,                 "default_op_flag"               );
    756     WRITE_UVLC( sei.m_nestingNumOpsMinus1,           "nesting_num_ops"               );
     926    WRITE_UVLC( sei.m_nestingNumOpsMinus1,           "nesting_num_ops_minus1"        );
    757927    for (UInt i = (sei.m_defaultOpFlag ? 1 : 0); i <= sei.m_nestingNumOpsMinus1; i++)
    758928    {
    759       WRITE_CODE( sei.m_nestingNoOpMaxTemporalIdPlus1, 3, "nesting_no_op_max_temporal_id" );
    760       WRITE_CODE( sei.m_nestingMaxTemporalIdPlus1[i], 3,  "nesting_max_temporal_id"       );
     929      WRITE_CODE( sei.m_nestingMaxTemporalIdPlus1[i], 3,  "nesting_max_temporal_id_plus1" );
    761930      WRITE_UVLC( sei.m_nestingOpIdx[i],                  "nesting_op_idx"                );
    762931    }
     
    767936    if (!sei.m_allLayersFlag)
    768937    {
    769       WRITE_CODE( sei.m_nestingNoOpMaxTemporalIdPlus1, 3, "nesting_no_op_max_temporal_id" );
    770       WRITE_UVLC( sei.m_nestingNumLayersMinus1,           "nesting_num_layers"            );
     938      WRITE_CODE( sei.m_nestingNoOpMaxTemporalIdPlus1, 3, "nesting_no_op_max_temporal_id_plus1" );
     939      WRITE_UVLC( sei.m_nestingNumLayersMinus1,           "nesting_num_layers"                  );
    771940      for (UInt i = 0; i <= sei.m_nestingNumLayersMinus1; i++)
    772941      {
     
    9171086  assert(vps->getVpsVuiPresentFlag());
    9181087
     1088#if VPS_VUI_BSP_HRD_PARAMS
     1089  Int psIdx = bspNestingSei.m_seiPartitioningSchemeIdx;
     1090  Int seiOlsIdx = bspNestingSei.m_seiOlsIdx;
     1091  Int maxTemporalId = nestingSei.m_nestingMaxTemporalIdPlus1[0] - 1;
     1092  Int maxValues = vps->getNumBspSchedulesMinus1(seiOlsIdx, psIdx, maxTemporalId) + 1;
     1093  std::vector<Int> hrdIdx(maxValues, 0);
     1094  std::vector<TComHRD *> hrdVec;
     1095  std::vector<Int> syntaxElemLen(maxValues, 0);
     1096  for(Int i = 0; i < maxValues; i++)
     1097  {
     1098    hrdIdx[i] = vps->getBspHrdIdx( seiOlsIdx, psIdx, maxTemporalId, i, bspNestingSei.m_bspIdx);
     1099    hrdVec.push_back(vps->getBspHrd(hrdIdx[i]));
     1100   
     1101    syntaxElemLen[i] = hrdVec[i]->getInitialCpbRemovalDelayLengthMinus1() + 1;
     1102    if ( !(hrdVec[i]->getNalHrdParametersPresentFlag() || hrdVec[i]->getVclHrdParametersPresentFlag()) )
     1103    {
     1104      assert( syntaxElemLen[i] == 24 ); // Default of value init_cpb_removal_delay_length_minus1 is 23
     1105    }
     1106    if( i > 0 )
     1107    {
     1108      assert( hrdVec[i]->getNalHrdParametersPresentFlag() == hrdVec[i-1]->getNalHrdParametersPresentFlag() );
     1109      assert( hrdVec[i]->getVclHrdParametersPresentFlag() == hrdVec[i-1]->getVclHrdParametersPresentFlag() );
     1110    }
     1111  }
     1112  if (hrdVec[0]->getNalHrdParametersPresentFlag())
     1113  {
     1114    for(UInt i = 0; i < maxValues; i++)
     1115    {
     1116      WRITE_CODE( sei.m_nalInitialArrivalDelay[i], syntaxElemLen[i], "nal_initial_arrival_delay[i]" );
     1117    }
     1118  }
     1119  if( hrdVec[0]->getVclHrdParametersPresentFlag() )
     1120  {
     1121    for(UInt i = 0; i < maxValues; i++)
     1122    {
     1123      WRITE_CODE( sei.m_vclInitialArrivalDelay[i], syntaxElemLen[i], "vcl_initial_arrival_delay[i]" );
     1124    }
     1125  }
     1126#else
    9191127  UInt schedCombCnt = vps->getNumBspSchedCombinations(nestingSei.m_nestingOpIdx[0]);
    9201128  UInt len;
     
    9591167    }
    9601168  }
     1169#endif
    9611170}
    9621171
  • branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.h

    r856 r894  
    5555protected:
    5656#if O0164_MULTI_LAYER_HRD
     57#if VPS_VUI_BSP_HRD_PARAMS
     58  Void xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei);
     59#else
    5760  Void xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting& nestingSei, const SEIBspNesting& bspNestingSei);
     61#endif
    5862#else
    5963  Void xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComSPS *sps);
     
    6165  Void xWriteSEIuserDataUnregistered(const SEIuserDataUnregistered &sei);
    6266  Void xWriteSEIActiveParameterSets(const SEIActiveParameterSets& sei);
     67  Void xWriteSEIDecodedPictureHash(const SEIDecodedPictureHash& sei);
     68#if VPS_VUI_BSP_HRD_PARAMS
     69  Void xWriteSEIDecodingUnitInfo(const SEIDecodingUnitInfo& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps);
     70  Void xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps);
     71  Void xWriteSEIPictureTiming(const SEIPictureTiming& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps);
     72#else
    6373  Void xWriteSEIDecodingUnitInfo(const SEIDecodingUnitInfo& sei, TComSPS *sps);
    64   Void xWriteSEIDecodedPictureHash(const SEIDecodedPictureHash& sei);
    6574  Void xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, TComSPS *sps);
    6675  Void xWriteSEIPictureTiming(const SEIPictureTiming& sei, TComSPS *sps);
     76#endif
    6777  TComSPS *m_pSPS;
    6878  Void xWriteSEIRecoveryPoint(const SEIRecoveryPoint& sei);
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncCavlc.cpp

    r891 r894  
    18131813    if (vps->getVpsVuiBspHrdPresentFlag())
    18141814    {
     1815#if VPS_VUI_BSP_HRD_PARAMS
     1816      codeVpsVuiBspHrdParams(vps);
     1817#else
    18151818      WRITE_UVLC( vps->getVpsNumBspHrdParametersMinus1(), "vps_num_bsp_hrd_parameters_minus1" );
    18161819      for( i = 0; i <= vps->getVpsNumBspHrdParametersMinus1(); i++ )
     
    18561859        }
    18571860      }
     1861#endif
    18581862    }
    18591863#endif
     
    31883192}
    31893193#endif
    3190 
     3194#if VPS_VUI_BSP_HRD_PARAMS
     3195Void TEncCavlc::codeVpsVuiBspHrdParams(TComVPS * const vps)
     3196{
     3197  WRITE_UVLC( vps->getVpsNumAddHrdParams(), "vps_num_add_hrd_params" );
     3198  for( Int i = vps->getNumHrdParameters(), j = 0; i < vps->getNumHrdParameters() + vps->getVpsNumAddHrdParams(); i++, j++ ) // j = i - vps->getNumHrdParameters()
     3199  {
     3200    if( i > 0 )
     3201    {
     3202      WRITE_FLAG( vps->getCprmsAddPresentFlag(j), "cprms_add_present_flag[i]" );
     3203    }
     3204    WRITE_UVLC( vps->getNumSubLayerHrdMinus1(j), "num_sub_layer_hrd_minus1[i]" );
     3205    codeHrdParameters(vps->getBspHrd(j), i == 0 ? true : vps->getCprmsAddPresentFlag(j), vps->getNumSubLayerHrdMinus1(j));
     3206  }
     3207  for( Int h = 1; h < vps->getNumOutputLayerSets(); h++ )
     3208  {
     3209    Int lsIdx = vps->getOutputLayerSetIdx( h );
     3210    WRITE_UVLC( vps->getNumSignalledPartitioningSchemes(h), "num_signalled_partitioning_schemes[h]");
     3211    for( Int j = 0; j < vps->getNumSignalledPartitioningSchemes(h); j++ )
     3212    {
     3213      WRITE_UVLC( vps->getNumPartitionsInSchemeMinus1(h, j), "num_partitions_in_scheme_minus1[h][j]" );
     3214      for( Int k = 0; k <= vps->getNumPartitionsInSchemeMinus1(h, j); k++ )
     3215      {
     3216        for( Int r = 0; r < vps->getNumLayersInIdList( lsIdx ); r++ )
     3217        {
     3218          WRITE_FLAG( vps->getLayerIncludedInPartitionFlag(h, j, k, r), "layer_included_in_partition_flag[h][j][k][r]" );
     3219        }
     3220      }
     3221    }
     3222    for( Int i = 0; i < vps->getNumSignalledPartitioningSchemes(h) + 1; i++ )
     3223    {
     3224      for( Int t = 0; t <= vps->getMaxSLayersInLayerSetMinus1(lsIdx); t++ )
     3225      {
     3226        WRITE_UVLC(vps->getNumBspSchedulesMinus1(h, i, t), "num_bsp_schedules_minus1[h][i][t]");
     3227        for( Int j = 0; j <= vps->getNumBspSchedulesMinus1(h, i, t); j++ )
     3228        {
     3229          for( Int k = 0; k < vps->getNumPartitionsInSchemeMinus1(h, i); k++ )
     3230          {
     3231            WRITE_UVLC( vps->getBspHrdIdx(h, i, t, j, k),   "bsp_comb_hrd_idx[h][i][t][j][k]");
     3232            WRITE_UVLC( vps->getBspSchedIdx(h, i, t, j, k), "bsp_comb_sched_idx[h][i][t][j][k]");
     3233          }
     3234        }
     3235      }
     3236    }
     3237  }
     3238}
     3239#endif
    31913240#endif
    31923241//! \}
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncCavlc.h

    r877 r894  
    169169  Void  codeVpsDpbSizeTable    (TComVPS *vps);
    170170#endif
     171#if VPS_VUI_BSP_HRD_PARAMS
     172  Void  codeVpsVuiBspHrdParams  (TComVPS * const);
     173#endif
    171174#if Q0048_CGS_3D_ASYMLUT
    172175#if R0179_ENC_OPT_3DLUT_SIZE
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.cpp

    r890 r894  
    23612361      if (pcSlice->getLayerId() == 0 && m_pcEncTop->getVPS()->getVpsVuiBspHrdPresentFlag())
    23622362      {
    2363         nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, 1);
    2364         m_pcEntropyCoder->setEntropyCoder(m_pcCavlcCoder, pcSlice);
    2365         m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
    2366         SEIScalableNesting *scalableBspNestingSei = xCreateBspNestingSEI(pcSlice);
    2367         m_seiWriter.writeSEImessage(nalu.m_Bitstream, *scalableBspNestingSei, m_pcEncTop->getVPS(), pcSlice->getSPS());
    2368         writeRBSPTrailingBits(nalu.m_Bitstream);
    2369 
    2370         UInt seiPositionInAu = xGetFirstSeiLocation(accessUnit);
    2371         UInt offsetPosition = m_activeParameterSetSEIPresentInAU
    2372           + m_bufferingPeriodSEIPresentInAU
    2373           + m_pictureTimingSEIPresentInAU
    2374           + m_nestedPictureTimingSEIPresentInAU;  // Insert SEI after APS, BP and PT SEI
    2375         AccessUnit::iterator it;
    2376         for(j = 0, it = accessUnit.begin(); j < seiPositionInAu + offsetPosition; j++)
    2377         {
    2378           it++;
    2379         }
    2380         accessUnit.insert(it, new NALUnitEBSP(nalu));
     2363#if VPS_VUI_BSP_HRD_PARAMS
     2364        TComVPS *vps = m_pcEncTop->getVPS();
     2365        for(Int i = 0; i < vps->getNumOutputLayerSets(); i++)
     2366        {
     2367          for(Int k = 0; k < vps->getNumSignalledPartitioningSchemes(i); k++)
     2368          {
     2369            for(Int l = 0; l < vps->getNumPartitionsInSchemeMinus1(i, k)+1; l++)
     2370            {
     2371#endif
     2372              nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, 1);
     2373              m_pcEntropyCoder->setEntropyCoder(m_pcCavlcCoder, pcSlice);
     2374              m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
     2375#if VPS_VUI_BSP_HRD_PARAMS
     2376              SEIScalableNesting *scalableBspNestingSei = xCreateBspNestingSEI(pcSlice, i, k, l);
     2377#else
     2378              SEIScalableNesting *scalableBspNestingSei = xCreateBspNestingSEI(pcSlice);
     2379#endif
     2380              m_seiWriter.writeSEImessage(nalu.m_Bitstream, *scalableBspNestingSei, m_pcEncTop->getVPS(), pcSlice->getSPS());
     2381              writeRBSPTrailingBits(nalu.m_Bitstream);
     2382
     2383              UInt seiPositionInAu = xGetFirstSeiLocation(accessUnit);
     2384              UInt offsetPosition = m_activeParameterSetSEIPresentInAU
     2385                + m_bufferingPeriodSEIPresentInAU
     2386                + m_pictureTimingSEIPresentInAU
     2387                + m_nestedPictureTimingSEIPresentInAU;  // Insert SEI after APS, BP and PT SEI
     2388              AccessUnit::iterator it;
     2389              for(j = 0, it = accessUnit.begin(); j < seiPositionInAu + offsetPosition; j++)
     2390              {
     2391                it++;
     2392              }
     2393              accessUnit.insert(it, new NALUnitEBSP(nalu));
     2394#if VPS_VUI_BSP_HRD_PARAMS
     2395            }
     2396          }
     2397        }
     2398#endif
    23812399      }
    23822400#endif
     
    47464764
    47474765#if O0164_MULTI_LAYER_HRD
     4766#if VPS_VUI_BSP_HRD_PARAMS
     4767SEIScalableNesting* TEncGOP::xCreateBspNestingSEI(TComSlice *pcSlice, Int olsIdx, Int partitioningSchemeIdx, Int bspIdx)
     4768#else
    47484769SEIScalableNesting* TEncGOP::xCreateBspNestingSEI(TComSlice *pcSlice)
     4770#endif
    47494771{
    47504772  SEIScalableNesting *seiScalableNesting = new SEIScalableNesting();
     
    47594781  seiScalableNesting->m_defaultOpFlag                 = 0;
    47604782  seiScalableNesting->m_nestingNumOpsMinus1           = 0;      //nesting_num_ops_minus1
     4783#if VPS_VUI_BSP_HRD_PARAMS
     4784  seiScalableNesting->m_nestingOpIdx[0]               = pcSlice->getVPS()->getOutputLayerSetIdx(olsIdx);
     4785  seiScalableNesting->m_nestingMaxTemporalIdPlus1[0]  = 6 + 1;
     4786#else
    47614787  seiScalableNesting->m_nestingOpIdx[0]               = 1;
     4788#endif
    47624789  seiScalableNesting->m_allLayersFlag                 = 0;
    47634790  seiScalableNesting->m_nestingNoOpMaxTemporalIdPlus1 = 6 + 1;  //nesting_no_op_max_temporal_id_plus1
     
    48054832  seiBspNesting->m_nestedSEIs.push_back(seiBufferingPeriod);
    48064833  seiBspNesting->m_nestedSEIs.push_back(seiBspInitialArrivalTime);
     4834#if VPS_VUI_BSP_HRD_PARAMS
     4835  seiBspNesting->m_bspIdx = bspIdx;
     4836  seiBspNesting->m_seiOlsIdx = olsIdx;
     4837  seiBspNesting->m_seiPartitioningSchemeIdx = partitioningSchemeIdx;
     4838#endif
    48074839  seiScalableNesting->m_nestedSEIs.push_back(seiBspNesting); // BSP nesting SEI is contained in scalable nesting SEI
    48084840
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.h

    r856 r894  
    253253#endif
    254254#if O0164_MULTI_LAYER_HRD
     255#if VPS_VUI_BSP_HRD_PARAMS
     256  SEIScalableNesting* TEncGOP::xCreateBspNestingSEI(TComSlice *pcSlice, Int olsIdx, Int partitioningSchemeIdx, Int bspIdx);
     257#else
    255258  SEIScalableNesting* xCreateBspNestingSEI(TComSlice *pcSlice);
     259#endif
    256260#endif
    257261#if Q0048_CGS_3D_ASYMLUT
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncTop.cpp

    r873 r894  
    323323  /* set the VPS profile information */
    324324  *m_cVPS.getPTL() = *m_cSPS.getPTL();
     325#if VPS_VUI_BSP_HRD_PARAMS
     326  m_cVPS.getTimingInfo()->setTimingInfoPresentFlag       ( true );
     327#else
    325328  m_cVPS.getTimingInfo()->setTimingInfoPresentFlag       ( false );
     329#endif
    326330  // initialize PPS
    327331  m_cPPS.setSPS(&m_cSPS);
Note: See TracChangeset for help on using the changeset viewer.