Ignore:
Timestamp:
18 Sep 2015, 23:09:19 (9 years ago)
Author:
vidyo
Message:

LAYERS_NOT_PRESENT SEI message changes by Vidyo, Inc.
All the changes are under the #define NH_MV_LAYERS_NOT_PRESENT_SEI
Extra information passed into parseSEI - vps as MaxNumLayers is required in order to know how many flags to read.
contact:
jpadia@…, danny@…

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-15.1-dev0-Vidyo/source/Lib/TLibDecoder/SEIread.cpp

    r1328 r1331  
    124124 * unmarshal a single SEI message from bitstream bs
    125125 */
     126#if NH_MV_LAYERS_NOT_PRESENT_SEI
     127Void SEIReader::parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream)
     128#else
    126129Void SEIReader::parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream)
     130#endif
    127131{
    128132  setBitstream(bs);
     
    131135  do
    132136  {
     137#if NH_MV_LAYERS_NOT_PRESENT_SEI
     138    xReadSEImessage(seis, nalUnitType, vps, sps, pDecodedMessageOutputStream);
     139#else
    133140    xReadSEImessage(seis, nalUnitType, sps, pDecodedMessageOutputStream);
    134 
     141#endif
    135142    /* SEI messages are an integer number of bytes, something has failed
    136143    * in the parsing if bitstream not byte-aligned */
     
    142149}
    143150
     151#if NH_MV_LAYERS_NOT_PRESENT_SEI
     152Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream)
     153#else
    144154Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream)
     155#endif
    145156{
    146157#if ENC_DEC_TRACE
     
    261272    case SEI::SCALABLE_NESTING:
    262273      sei = new SEIScalableNesting;
     274#if NH_MV_LAYERS_NOT_PRESENT_SEI
     275      xParseSEIScalableNesting((SEIScalableNesting&) *sei, nalUnitType, payloadSize, vps, sps, pDecodedMessageOutputStream);
     276#else
    263277      xParseSEIScalableNesting((SEIScalableNesting&) *sei, nalUnitType, payloadSize, sps, pDecodedMessageOutputStream);
     278#endif
    264279      break;
    265280    case SEI::TEMP_MOTION_CONSTRAINED_TILE_SETS:
     
    290305      break;
    291306#else
    292 #if NH_MV_TBD
     307#if NH_MV_LAYERS_NOT_PRESENT_SEI
    293308    case SEI::LAYERS_NOT_PRESENT:
    294       sei = new SEILayersNotPresent;
    295       xParseSEILayersNotPresent((SEILayersNotPresent&) *sei, payloadSize, pDecodedMessageOutputStream );
     309      if (!vps)
     310      {
     311        printf ("Warning: Found Layers not present SEI message, but no active VPS is available. Ignoring.");
     312      }
     313      else
     314      {
     315        sei = new SEILayersNotPresent;
     316        xParseSEILayersNotPresent((SEILayersNotPresent&) *sei, payloadSize, vps, pDecodedMessageOutputStream);
     317      }
    296318      break;
    297319#endif
     
    885907}
    886908
     909#if NH_MV_LAYERS_NOT_PRESENT_SEI
     910Void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sei, const NalUnitType nalUnitType, UInt payloadSize, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream)
     911#else
    887912Void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sei, const NalUnitType nalUnitType, UInt payloadSize, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream)
     913#endif
    888914{
    889915  UInt uiCode;
     
    927953  do
    928954  {
     955#if NH_MV_LAYERS_NOT_PRESENT_SEI
     956    xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, pDecodedMessageOutputStream);
     957#else
    929958    xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps, pDecodedMessageOutputStream);
     959#endif
    930960  } while (m_pcBitstream->getNumBitsLeft() > 8);
    931961
     
    11831213}
    11841214
    1185 #if NH_MV_SEI_TBD
    1186 Void SEIReader::xParseSEILayersNotPresent(SEILayersNotPresent& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream)
    1187 {
    1188   UInt code;
    1189   output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize);
    1190 
     1215#if NH_MV_LAYERS_NOT_PRESENT_SEI
     1216Void SEIReader::xParseSEILayersNotPresent(SEILayersNotPresent &sei, UInt payloadSize, const TComVPS *vps, std::ostream *pDecodedMessageOutputStream)
     1217{
     1218  UInt code;
     1219  UInt i = 0;
     1220
     1221  output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize);
    11911222  sei_read_code( pDecodedMessageOutputStream, 4, code, "lnp_sei_active_vps_id" ); sei.m_lnpSeiActiveVpsId = code;
    1192   for( Int i = 0; i  <=  MaxLayersMinus1; i++ )
    1193   {
    1194     sei_read_flag( pDecodedMessageOutputStream, code, "layer_not_present_flag" ); sei.m_layerNotPresentFlag[i] = (code == 1);
     1223  assert(vps->getVPSId() == sei.m_lnpSeiActiveVpsId);
     1224
     1225  sei.m_lnpSeiMaxLayers = vps->getMaxLayersMinus1() + 1;
     1226  sei.resizeDimI(sei.m_lnpSeiMaxLayers);
     1227  for (; i < sei.m_lnpSeiMaxLayers; i++)
     1228  {
     1229    sei_read_flag( pDecodedMessageOutputStream, code, "layer_not_present_flag" );
     1230    sei.m_layerNotPresentFlag[i] = (code == 1);
    11951231  }
    11961232};
Note: See TracChangeset for help on using the changeset viewer.