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


Ignore:
Timestamp:
31 Oct 2014, 18:18:38 (10 years ago)
Author:
seregin
Message:

Overlay SEI with macro Q0096_OVERLAY_SEI, patch was provided by Nikolce Stefanoski <stefanos@…>

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

Legend:

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

    r894 r912  
    140140    break;
    141141#endif
     142#if Q0096_OVERLAY_SEI
     143  case SEI::OVERLAY_INFO:
     144    fprintf( g_hTrace, "=========== Overlay Information SEI message ===========\n");
     145    break;
     146#endif
    142147#endif //SVC_EXTENSION
    143148  default:
     
    285290   case SEI::FRAME_FIELD_INFO:
    286291     xWriteSEIFrameFieldInfo(*static_cast<const SEIFrameFieldInfo*>(&sei));
     292     break;
     293#endif
     294#if Q0096_OVERLAY_SEI
     295   case SEI::OVERLAY_INFO:
     296     xWriteSEIOverlayInfo(*static_cast<const SEIOverlayInfo*>(&sei));
    287297     break;
    288298#endif
     
    13301340#endif
    13311341
     1342#if Q0096_OVERLAY_SEI
     1343Void SEIWriter::xWriteSEIOverlayInfo(const SEIOverlayInfo &sei)
     1344{
     1345  Int i,j;
     1346  WRITE_FLAG( sei.m_overlayInfoCancelFlag, "overlay_info_cancel_flag" );
     1347  if ( !sei.m_overlayInfoCancelFlag )
     1348  {
     1349    WRITE_UVLC( sei.m_overlayContentAuxIdMinus128, "overlay_content_aux_id_minus128" );
     1350    WRITE_UVLC( sei.m_overlayLabelAuxIdMinus128, "overlay_label_aux_id_minus128" );
     1351    WRITE_UVLC( sei.m_overlayAlphaAuxIdMinus128, "overlay_alpha_aux_id_minus128" );
     1352    WRITE_UVLC( sei.m_overlayElementLabelValueLengthMinus8, "overlay_element_label_value_length_minus8" );
     1353    assert( sei.m_numOverlaysMinus1 < MAX_OVERLAYS );
     1354    WRITE_UVLC( sei.m_numOverlaysMinus1, "num_overlays_minus1" );
     1355    for (i=0 ; i<=sei.m_numOverlaysMinus1 ; i++)
     1356    {
     1357      WRITE_UVLC( sei.m_overlayIdx[i], "overlay_idx" );
     1358      WRITE_FLAG( sei.m_languageOverlayPresentFlag[i], "language_overlay_present_flag" );
     1359      WRITE_CODE( sei.m_overlayContentLayerId[i], 6, "overlay_content_layer_id");
     1360      WRITE_FLAG( sei.m_overlayLabelPresentFlag[i], "overlay_label_present_flag" );
     1361      if ( sei.m_overlayLabelPresentFlag[i] )
     1362      {
     1363        WRITE_CODE(  sei.m_overlayLabelLayerId[i], 6, "overlay_label_layer_id");
     1364      }
     1365      WRITE_FLAG( sei.m_overlayAlphaPresentFlag[i], "overlay_alpha_present_flag" );
     1366      if ( sei.m_overlayAlphaPresentFlag[i] )
     1367      {
     1368        WRITE_CODE( sei.m_overlayAlphaLayerId[i], 6, "overlay_alpha_layer_id");
     1369      }
     1370      if ( sei.m_overlayLabelPresentFlag[i] )
     1371      {
     1372        assert( sei.m_numOverlayElementsMinus1[i] < MAX_OVERLAY_ELEMENTS );
     1373        WRITE_UVLC( sei.m_numOverlayElementsMinus1[i], "num_overlay_elements_minus1");
     1374        for ( j=0 ; j<=sei.m_numOverlayElementsMinus1[i] ; j++ )
     1375        {
     1376          WRITE_CODE(sei.m_overlayElementLabelMin[i][j], sei.m_overlayElementLabelValueLengthMinus8 + 8, "overlay_element_label_min");
     1377          WRITE_CODE(sei.m_overlayElementLabelMax[i][j], sei.m_overlayElementLabelValueLengthMinus8 + 8, "overlay_element_label_max");
     1378        }
     1379      }
     1380    }
     1381
     1382
     1383    // byte alignment
     1384    while ( m_pcBitIf->getNumberOfWrittenBits() % 8 != 0 )
     1385    {
     1386      WRITE_FLAG( 0, "overlay_zero_bit" );
     1387    }
     1388
     1389    for ( i=0 ; i<=sei.m_numOverlaysMinus1 ; i++ )
     1390    {
     1391      if ( sei.m_languageOverlayPresentFlag[i] )
     1392      {
     1393        WRITE_STRING( sei.m_overlayLanguage[i], sei.m_overlayLanguageLength[i], "overlay_language" );    //WRITE_STRING adds zero-termination byte
     1394      }
     1395      WRITE_STRING( sei.m_overlayName[i], sei.m_overlayNameLength[i], "overlay_name" );
     1396      if ( sei.m_overlayLabelPresentFlag[i] )
     1397      {
     1398        for ( j=0 ; j<=sei.m_numOverlayElementsMinus1[i] ; j++)
     1399        {
     1400          WRITE_STRING( sei.m_overlayElementName[i][j], sei.m_overlayElementNameLength[i][j], "overlay_element_name" );
     1401        }
     1402      }
     1403    }
     1404    WRITE_FLAG( sei.m_overlayInfoPersistenceFlag, "overlay_info_persistence_flag" );
     1405  }
     1406  xWriteByteAlign();
     1407}
     1408#endif
     1409
    13321410#endif //SVC_EXTENSION
    13331411
  • branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.h

    r894 r912  
    123123  Void xWriteSEIVPSRewriting(const SEIVPSRewriting &sei);
    124124#endif
     125#if Q0096_OVERLAY_SEI
     126  Void xWriteSEIOverlayInfo(const SEIOverlayInfo &sei);
     127#endif
    125128#endif //SVC_EXTENSION
    126129};
  • branches/SHM-dev/source/Lib/TLibEncoder/SyntaxElementWriter.cpp

    r595 r912  
    9191}
    9292
     93#if Q0096_OVERLAY_SEI
     94Void  SyntaxElementWriter::xWriteStringTr( UChar* value, UInt length, const Char *pSymbolName)
     95{
     96  xWriteString(value, length);
     97  if( g_HLSTraceEnable )
     98  {
     99    fprintf( g_hTrace, "%8lld  ", g_nSymbolCounter++ );
     100    fprintf( g_hTrace, "%-50s st(v=%d)  : %s\n", pSymbolName, length, value );
     101  }
     102}
     103#endif
     104
    93105#endif
    94106
     
    130142}
    131143
     144#if Q0096_OVERLAY_SEI
     145Void  SyntaxElementWriter::xWriteString( UChar* sCode, UInt uiLength)
     146{
     147  assert(m_pcBitIf->getNumberOfWrittenBits() % 8 == 0 );
     148  for (Int i=0 ; i<uiLength; i++)
     149  {
     150    m_pcBitIf->write( sCode[i], 8 );
     151  }
     152  m_pcBitIf->write( 0, 8 ); //zero-termination byte
     153}
     154#endif
     155
    132156//! \}
  • branches/SHM-dev/source/Lib/TLibEncoder/SyntaxElementWriter.h

    r595 r912  
    5656#define WRITE_SVLC( value,         name)    xWriteSvlcTr ( value,         name )
    5757#define WRITE_FLAG( value,         name)    xWriteFlagTr ( value,         name )
     58#if Q0096_OVERLAY_SEI
     59#define WRITE_STRING( value, length, name)   xWriteStringTr( value, length, name )
     60#endif
    5861
    5962#else
     
    6366#define WRITE_SVLC( value,         name)     xWriteSvlc ( value )
    6467#define WRITE_FLAG( value,         name)     xWriteFlag ( value )
     68#if Q0096_OVERLAY_SEI
     69#define WRITE_STRING( value, length, name)   xWriteString( value, length )
     70#endif
    6571
    6672#endif
     
    8288  Void  xWriteSvlc            ( Int  iCode   );
    8389  Void  xWriteFlag            ( UInt uiCode );
     90#if Q0096_OVERLAY_SEI
     91  Void  xWriteString          ( UChar* sCode, UInt uiLength);
     92#endif
    8493#if ENC_DEC_TRACE
    8594  Void  xWriteCodeTr          ( UInt value, UInt  length, const Char *pSymbolName);
     
    8796  Void  xWriteSvlcTr          ( Int  value,               const Char *pSymbolName);
    8897  Void  xWriteFlagTr          ( UInt value,               const Char *pSymbolName);
     98#if Q0096_OVERLAY_SEI
     99  Void  xWriteStringTr        ( UChar* value, UInt length, const Char *pSymbolName);
     100#endif
    89101#endif
    90102
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncCfg.h

    r877 r912  
    387387  Int*      m_kneeSEIInputKneePoint;
    388388  Int*      m_kneeSEIOutputKneePoint;
     389#endif
     390#if Q0096_OVERLAY_SEI
     391  Bool                                m_overlaySEIEnabled;
     392  Bool                                m_overlayInfoCancelFlag;
     393  UInt                                m_overlayContentAuxIdMinus128;
     394  UInt                                m_overlayLabelAuxIdMinus128;
     395  UInt                                m_overlayAlphaAuxIdMinus128;
     396  UInt                                m_overlayElementLabelValueLengthMinus8;
     397  UInt                                m_numOverlaysMinus1;
     398  std::vector<UInt>                   m_overlayIdx; 
     399  std::vector<Bool>                   m_overlayLanguagePresentFlag;
     400  std::vector<UInt>                   m_overlayContentLayerId;
     401  std::vector<Bool>                   m_overlayLabelPresentFlag;
     402  std::vector<UInt>                   m_overlayLabelLayerId;
     403  std::vector<Bool>                   m_overlayAlphaPresentFlag;
     404  std::vector<UInt>                   m_overlayAlphaLayerId;
     405  std::vector<UInt>                   m_numOverlayElementsMinus1;
     406  std::vector< std::vector<UInt> >    m_overlayElementLabelMin;
     407  std::vector< std::vector<UInt> >    m_overlayElementLabelMax;
     408  std::vector<string>                 m_overlayLanguage; 
     409  std::vector<string>                 m_overlayName; 
     410  std::vector< std::vector<string> >  m_overlayElementName; 
     411  Bool                                m_overlayInfoPersistenceFlag;
    389412#endif
    390413#if Q0189_TMVP_CONSTRAINTS
     
    9941017  UInt  getIlcIdc(UInt b)                                  { return m_ilcIdc[b]; }
    9951018#endif
     1019#if Q0096_OVERLAY_SEI 
     1020  Void                                setOverlaySEIEnabled(Int b)                                              { m_overlaySEIEnabled = b; }
     1021  Bool                                getOverlaySEIEnabled()                                                   { return m_overlaySEIEnabled; }
     1022  Void                                setOverlaySEICancelFlag(Int b)                                           { m_overlayInfoCancelFlag = b; }
     1023  Bool                                getOverlaySEICancelFlag()                                                { return m_overlayInfoCancelFlag; }
     1024  Void                                setOverlaySEIContentAuxIdMinus128(UInt b)                                { m_overlayContentAuxIdMinus128 = b; }     
     1025  UInt                                getOverlaySEIContentAuxIdMinus128()                                      { return m_overlayContentAuxIdMinus128; }     
     1026  Void                                setOverlaySEILabelAuxIdMinus128(UInt b)                                  { m_overlayLabelAuxIdMinus128 = b; }     
     1027  UInt                                getOverlaySEILabelAuxIdMinus128()                                        { return m_overlayLabelAuxIdMinus128; } 
     1028  Void                                setOverlaySEIAlphaAuxIdMinus128(UInt b)                                  { m_overlayAlphaAuxIdMinus128 = b; }     
     1029  UInt                                getOverlaySEIAlphaAuxIdMinus128()                                        { return m_overlayAlphaAuxIdMinus128; } 
     1030  Void                                setOverlaySEIElementLabelValueLengthMinus8(UInt b)                       { m_overlayElementLabelValueLengthMinus8 = b; }     
     1031  UInt                                getOverlaySEIElementLabelValueLengthMinus8()                             { return m_overlayElementLabelValueLengthMinus8; } 
     1032  Void                                setOverlaySEINumOverlaysMinus1(UInt b)                                   { m_numOverlaysMinus1 = b; }     
     1033  UInt                                getOverlaySEINumOverlaysMinus1()                                         { return m_numOverlaysMinus1; }     
     1034  Void                                setOverlaySEIIdx(const std::vector<UInt>& b)                             { m_overlayIdx = b; }     
     1035  std::vector<UInt>                   getOverlaySEIIdx()                                                       { return m_overlayIdx; }     
     1036  Void                                setOverlaySEILanguagePresentFlag(const std::vector<Bool>& b)             { m_overlayLanguagePresentFlag = b; }     
     1037  std::vector<Bool>                   getOverlaySEILanguagePresentFlag()                                       { return m_overlayLanguagePresentFlag; }   
     1038  Void                                setOverlaySEIContentLayerId(const std::vector<UInt>& b)                  { m_overlayContentLayerId = b; }     
     1039  std::vector<UInt>                   getOverlaySEIContentLayerId()                                            { return m_overlayContentLayerId; }     
     1040  Void                                setOverlaySEILabelPresentFlag(const std::vector<Bool>& b)                { m_overlayLabelPresentFlag = b; }     
     1041  std::vector<Bool>                   getOverlaySEILabelPresentFlag()                                          { return m_overlayLabelPresentFlag; }
     1042  Void                                setOverlaySEILabelLayerId(const std::vector<UInt>& b)                    { m_overlayLabelLayerId = b; }     
     1043  std::vector<UInt>                   getOverlaySEILabelLayerId()                                              { return m_overlayLabelLayerId; }   
     1044  Void                                setOverlaySEIAlphaPresentFlag(const std::vector<Bool>& b)                { m_overlayAlphaPresentFlag = b; }     
     1045  std::vector<Bool>                   getOverlaySEIAlphaPresentFlag()                                          { return m_overlayAlphaPresentFlag; }     
     1046  Void                                setOverlaySEIAlphaLayerId(const std::vector<UInt>& b)                    { m_overlayAlphaLayerId = b; }     
     1047  std::vector<UInt>                   getOverlaySEIAlphaLayerId()                                              { return m_overlayAlphaLayerId; }   
     1048  Void                                setOverlaySEINumElementsMinus1(const std::vector<UInt>& b)               { m_numOverlayElementsMinus1 = b; }     
     1049  std::vector<UInt>                   getOverlaySEINumElementsMinus1()                                         { return m_numOverlayElementsMinus1; }     
     1050  Void                                setOverlaySEIElementLabelMin(const std::vector< std::vector<UInt> >& b)  { m_overlayElementLabelMin = b; }     
     1051  std::vector< std::vector<UInt> >    getOverlaySEIElementLabelMin()                                           { return m_overlayElementLabelMin; }   
     1052  Void                                setOverlaySEIElementLabelMax(const std::vector< std::vector<UInt> >& b)  { m_overlayElementLabelMax = b; }     
     1053  std::vector< std::vector<UInt> >    getOverlaySEIElementLabelMax()                                           { return m_overlayElementLabelMax; }             
     1054  Void                                setOverlaySEILanguage(const std::vector<string>& b)                      { m_overlayLanguage = b; }     
     1055  std::vector<string>                 getOverlaySEILanguage()                                                  { return m_overlayLanguage; }   
     1056  Void                                setOverlaySEIName(const std::vector<string>& b)                          { m_overlayName = b; }     
     1057  std::vector<string>                 getOverlaySEIName()                                                      { return m_overlayName; }   
     1058  Void                                setOverlaySEIElementName(const std::vector< std::vector<string> >& b)    { m_overlayElementName = b; }     
     1059  std::vector< std::vector<string> >  getOverlaySEIElementName()                                               { return m_overlayElementName; }   
     1060  Void                                setOverlaySEIPersistenceFlag(Int b)                                      { m_overlayInfoPersistenceFlag = b; }
     1061  Bool                                getOverlaySEIPersistenceFlag()                                           { return m_overlayInfoPersistenceFlag; }
     1062#endif
    9961063#if Q0048_CGS_3D_ASYMLUT
    9971064  Void      setCGSFlag(Int n)             { m_nCGSFlag = n;    }
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.cpp

    r904 r912  
    382382#endif
    383383
     384#if Q0096_OVERLAY_SEI
     385SEIOverlayInfo* TEncGOP::xCreateSEIOverlayInfo()
     386
     387  SEIOverlayInfo *sei = new SEIOverlayInfo(); 
     388  sei->m_overlayInfoCancelFlag = m_pcCfg->getOverlaySEICancelFlag();   
     389  if ( !sei->m_overlayInfoCancelFlag )
     390  {
     391    sei->m_overlayContentAuxIdMinus128          = m_pcCfg->getOverlaySEIContentAuxIdMinus128();
     392    sei->m_overlayLabelAuxIdMinus128            = m_pcCfg->getOverlaySEILabelAuxIdMinus128(); 
     393    sei->m_overlayAlphaAuxIdMinus128            = m_pcCfg->getOverlaySEIAlphaAuxIdMinus128();
     394    sei->m_overlayElementLabelValueLengthMinus8 = m_pcCfg->getOverlaySEIElementLabelValueLengthMinus8();
     395    sei->m_numOverlaysMinus1                    = m_pcCfg->getOverlaySEINumOverlaysMinus1();     
     396    sei->m_overlayIdx                           = m_pcCfg->getOverlaySEIIdx();           
     397    sei->m_languageOverlayPresentFlag           = m_pcCfg->getOverlaySEILanguagePresentFlag();
     398    sei->m_overlayContentLayerId                = m_pcCfg->getOverlaySEIContentLayerId();   
     399    sei->m_overlayLabelPresentFlag              = m_pcCfg->getOverlaySEILabelPresentFlag();   
     400    sei->m_overlayLabelLayerId                  = m_pcCfg->getOverlaySEILabelLayerId();   
     401    sei->m_overlayAlphaPresentFlag              = m_pcCfg->getOverlaySEIAlphaPresentFlag();   
     402    sei->m_overlayAlphaLayerId                  = m_pcCfg->getOverlaySEIAlphaLayerId();   
     403    sei->m_numOverlayElementsMinus1             = m_pcCfg->getOverlaySEINumElementsMinus1();
     404    sei->m_overlayElementLabelMin               = m_pcCfg->getOverlaySEIElementLabelMin();
     405    sei->m_overlayElementLabelMax               = m_pcCfg->getOverlaySEIElementLabelMax();   
     406    sei->m_overlayLanguage.resize               ( sei->m_numOverlaysMinus1+1, NULL );
     407    sei->m_overlayLanguageLength.resize         ( sei->m_numOverlaysMinus1+1 );
     408    sei->m_overlayName.resize                   ( sei->m_numOverlaysMinus1+1, NULL );
     409    sei->m_overlayNameLength.resize             ( sei->m_numOverlaysMinus1+1 );
     410    sei->m_overlayElementName.resize            ( sei->m_numOverlaysMinus1+1 );
     411    sei->m_overlayElementNameLength.resize      ( sei->m_numOverlaysMinus1+1 ); 
     412
     413    Int i,j;
     414    string strTmp;
     415    Int nBytes;
     416    assert( m_pcCfg->getOverlaySEILanguage().size()    == sei->m_numOverlaysMinus1+1 );
     417    assert( m_pcCfg->getOverlaySEIName().size()        == sei->m_numOverlaysMinus1+1 );
     418    assert( m_pcCfg->getOverlaySEIElementName().size() == sei->m_numOverlaysMinus1+1 );
     419   
     420    for ( i=0 ; i<=sei->m_numOverlaysMinus1; i++ )
     421    {     
     422      //language tag
     423      if ( sei->m_languageOverlayPresentFlag[i] )
     424      {               
     425        strTmp = m_pcCfg->getOverlaySEILanguage()[i];
     426        nBytes = m_pcCfg->getOverlaySEILanguage()[i].size();       
     427        assert( nBytes>0 );
     428        sei->m_overlayLanguage[i] = new UChar[nBytes];
     429        memcpy(sei->m_overlayLanguage[i], strTmp.c_str(), nBytes);       
     430        sei->m_overlayLanguageLength[i] = nBytes;       
     431      }
     432
     433      //overlay name
     434      strTmp = m_pcCfg->getOverlaySEIName()[i];
     435      nBytes = m_pcCfg->getOverlaySEIName()[i].size();       
     436      assert( nBytes>0 );
     437      sei->m_overlayName[i] = new UChar[nBytes];     
     438      memcpy(sei->m_overlayName[i], strTmp.c_str(), nBytes);       
     439      sei->m_overlayNameLength[i] = nBytes;
     440
     441      //overlay element names
     442      if ( sei->m_overlayLabelPresentFlag[i] )
     443      {       
     444        sei->m_overlayElementName[i].resize( sei->m_numOverlayElementsMinus1[i]+1, NULL );
     445        sei->m_overlayElementNameLength[i].resize( sei->m_numOverlayElementsMinus1[i]+1 );
     446        assert( m_pcCfg->getOverlaySEIElementName()[i].size() == sei->m_numOverlayElementsMinus1[i]+1 );       
     447        for ( j=0 ; j<=sei->m_numOverlayElementsMinus1[i] ; j++)
     448        {
     449          strTmp = m_pcCfg->getOverlaySEIElementName()[i][j];
     450          nBytes = m_pcCfg->getOverlaySEIElementName()[i][j].size();       
     451          assert( nBytes>0 );
     452          sei->m_overlayElementName[i][j] = new UChar[nBytes];
     453          memcpy(sei->m_overlayElementName[i][j], strTmp.c_str(), nBytes);       
     454          sei->m_overlayElementNameLength[i][j] = nBytes;
     455        }
     456      }
     457    }
     458  sei->m_overlayInfoPersistenceFlag = true;
     459  }
     460  return sei;
     461}
     462#endif
     463
    384464#if Q0074_COLOUR_REMAPPING_SEI
    385465SEIColourRemappingInfo*  TEncGOP::xCreateSEIColourRemappingInfo()
     
    574654
    575655    nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, m_pcCfg->getNumLayer()-1); // For highest layer
     656    m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
     657#if O0164_MULTI_LAYER_HRD
     658    m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, m_pcEncTop->getVPS(), sps);
     659#else
     660    m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, sps);
     661#endif
     662    writeRBSPTrailingBits(nalu.m_Bitstream);
     663    accessUnit.push_back(new NALUnitEBSP(nalu));
     664    delete sei;
     665  }
     666#endif
     667
     668#if Q0096_OVERLAY_SEI
     669  if(m_pcCfg->getOverlaySEIEnabled())
     670  {   
     671    SEIOverlayInfo *sei = xCreateSEIOverlayInfo();       
    576672    m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
    577673#if O0164_MULTI_LAYER_HRD
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.h

    r896 r912  
    259259#endif
    260260#endif
     261#if Q0096_OVERLAY_SEI
     262  SEIOverlayInfo* xCreateSEIOverlayInfo();
     263#endif
    261264#if Q0048_CGS_3D_ASYMLUT
    262265  Void xDetermin3DAsymLUT( TComSlice * pSlice , TComPic * pCurPic , UInt refLayerIdc , TEncCfg * pCfg , Bool bSignalPPS );
Note: See TracChangeset for help on using the changeset viewer.