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


Ignore:
Timestamp:
31 Oct 2014, 18:18:38 (11 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/TLibDecoder
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibDecoder/SEIread.cpp

    r900 r912  
    146146    break;
    147147#endif
     148#if Q0096_OVERLAY_SEI
     149  case SEI::OVERLAY_INFO:
     150    fprintf( g_hTrace, "=========== Overlay Information SEI message ===========\n");
     151    break;
     152#endif
    148153#endif //SVC_EXTENSION
    149154  default:
     
    412417     break;
    413418#endif
     419#if Q0096_OVERLAY_SEI
     420   case SEI::OVERLAY_INFO:
     421     sei = new SEIOverlayInfo;
     422     xParseSEIOverlayInfo((SEIOverlayInfo&) *sei, payloadSize);
     423     break;
     424#endif
    414425#endif //SVC_EXTENSION
    415426      break;
     
    17261737#endif
    17271738
     1739#if Q0096_OVERLAY_SEI
     1740Void SEIReader::xParseSEIOverlayInfo(SEIOverlayInfo& sei, UInt /*payloadSize*/){
     1741  Int i, j;
     1742  UInt val;
     1743  READ_FLAG( val, "overlay_info_cancel_flag" );                 sei.m_overlayInfoCancelFlag = val;
     1744  if ( !sei.m_overlayInfoCancelFlag )
     1745  {
     1746    READ_UVLC( val, "overlay_content_aux_id_minus128" );            sei.m_overlayContentAuxIdMinus128 = val;
     1747    READ_UVLC( val, "overlay_label_aux_id_minus128" );              sei.m_overlayLabelAuxIdMinus128 = val;
     1748    READ_UVLC( val, "overlay_alpha_aux_id_minus128" );              sei.m_overlayAlphaAuxIdMinus128 = val;
     1749    READ_UVLC( val, "overlay_element_label_value_length_minus8" );  sei.m_overlayElementLabelValueLengthMinus8 = val;
     1750    READ_UVLC( val, "num_overlays_minus1" );                        sei.m_numOverlaysMinus1 = val;
     1751
     1752    assert( sei.m_numOverlaysMinus1 < MAX_OVERLAYS );
     1753    sei.m_overlayIdx.resize( sei.m_numOverlaysMinus1+1 );
     1754    sei.m_languageOverlayPresentFlag.resize( sei.m_numOverlaysMinus1+1 );
     1755    sei.m_overlayContentLayerId.resize( sei.m_numOverlaysMinus1+1 );
     1756    sei.m_overlayLabelPresentFlag.resize( sei.m_numOverlaysMinus1+1 );
     1757    sei.m_overlayLabelLayerId.resize( sei.m_numOverlaysMinus1+1 );
     1758    sei.m_overlayAlphaPresentFlag.resize( sei.m_numOverlaysMinus1+1 );
     1759    sei.m_overlayAlphaLayerId.resize( sei.m_numOverlaysMinus1+1 );
     1760    sei.m_numOverlayElementsMinus1.resize( sei.m_numOverlaysMinus1+1 );
     1761    sei.m_overlayElementLabelMin.resize( sei.m_numOverlaysMinus1+1 );
     1762    sei.m_overlayElementLabelMax.resize( sei.m_numOverlaysMinus1+1 );
     1763    for ( i=0 ; i<=sei.m_numOverlaysMinus1 ; i++ )
     1764    {
     1765      READ_UVLC( val, "overlay_idx" );                      sei.m_overlayIdx[i] = val;
     1766      READ_FLAG( val, "language_overlay_present_flag" );    sei.m_languageOverlayPresentFlag[i] = val;
     1767      READ_CODE( 6, val, "overlay_content_layer_id");       sei.m_overlayContentLayerId[i] = val;
     1768      READ_FLAG( val, "overlay_label_present_flag" );       sei.m_overlayLabelPresentFlag[i] = val;
     1769      if ( sei.m_overlayLabelPresentFlag[i] )
     1770      {
     1771        READ_CODE( 6, val, "overlay_label_layer_id");     sei.m_overlayLabelLayerId[i] = val;
     1772      }
     1773      READ_FLAG( val, "overlay_alpha_present_flag" );       sei.m_overlayAlphaPresentFlag[i] = val;
     1774      if ( sei.m_overlayAlphaPresentFlag[i] )
     1775      {
     1776        READ_CODE( 6, val, "overlay_alpha_layer_id");     sei.m_overlayAlphaLayerId[i] = val;
     1777      }
     1778      if ( sei.m_overlayLabelPresentFlag[i] )
     1779      {
     1780        READ_UVLC( val, "num_overlay_elements_minus1");   sei.m_numOverlayElementsMinus1[i] = val;
     1781        assert( sei.m_numOverlayElementsMinus1[i] < MAX_OVERLAY_ELEMENTS );
     1782        sei.m_overlayElementLabelMin[i].resize( sei.m_numOverlayElementsMinus1[i]+1 );
     1783        sei.m_overlayElementLabelMax[i].resize( sei.m_numOverlayElementsMinus1[i]+1 );
     1784        for ( j=0 ; j<=sei.m_numOverlayElementsMinus1[i] ; j++ )
     1785        {
     1786          READ_CODE(sei.m_overlayElementLabelValueLengthMinus8 + 8, val, "overlay_element_label_min"); sei.m_overlayElementLabelMin[i][j] = val;
     1787          READ_CODE(sei.m_overlayElementLabelValueLengthMinus8 + 8, val, "overlay_element_label_max"); sei.m_overlayElementLabelMax[i][j] = val;
     1788        }     
     1789      }
     1790      else
     1791      {
     1792        sei.m_numOverlayElementsMinus1[i] = 0;
     1793      }
     1794    }
     1795
     1796    // byte alignment
     1797    while ( m_pcBitstream->getNumBitsRead() % 8 != 0 )
     1798    {
     1799      READ_FLAG( val, "overlay_zero_bit" );
     1800      assert( val==0 );
     1801    }
     1802
     1803    UChar* sval = new UChar[MAX_OVERLAY_STRING_BYTES];
     1804    UInt slen;   
     1805    sei.m_overlayLanguage.resize( sei.m_numOverlaysMinus1+1, NULL );
     1806    sei.m_overlayLanguageLength.resize( sei.m_numOverlaysMinus1+1 );
     1807    sei.m_overlayName.resize( sei.m_numOverlaysMinus1+1, NULL );
     1808    sei.m_overlayNameLength.resize( sei.m_numOverlaysMinus1+1 );
     1809    sei.m_overlayElementName.resize( sei.m_numOverlaysMinus1+1 );
     1810    sei.m_overlayElementNameLength.resize( sei.m_numOverlaysMinus1+1 );
     1811    for ( i=0 ; i<=sei.m_numOverlaysMinus1 ; i++ )
     1812    {
     1813      if ( sei.m_languageOverlayPresentFlag[i] )
     1814      {
     1815        READ_STRING( MAX_OVERLAY_STRING_BYTES, sval, slen, "overlay_language" );
     1816        sei.m_overlayLanguage[i] = new UChar[slen];
     1817        memcpy(sei.m_overlayLanguage[i], sval, slen);
     1818        sei.m_overlayLanguageLength[i] = slen;
     1819      }
     1820      READ_STRING( MAX_OVERLAY_STRING_BYTES, sval, slen, "overlay_name" );
     1821      sei.m_overlayName[i] = new UChar[slen];
     1822      memcpy(sei.m_overlayName[i], sval, slen);
     1823      sei.m_overlayNameLength[i] = slen;
     1824      if ( sei.m_overlayLabelPresentFlag[i] )
     1825      {
     1826        sei.m_overlayElementName[i].resize( sei.m_numOverlayElementsMinus1[i]+1, NULL );
     1827        sei.m_overlayElementNameLength[i].resize( sei.m_numOverlayElementsMinus1[i]+1 );
     1828        for ( j=0 ; j<=sei.m_numOverlayElementsMinus1[i] ; j++)
     1829        {
     1830          READ_STRING( MAX_OVERLAY_STRING_BYTES, sval, slen, "overlay_element_name" );
     1831          sei.m_overlayElementName[i][j] = new UChar[slen];
     1832          memcpy(sei.m_overlayElementName[i][j], sval, slen);
     1833          sei.m_overlayElementNameLength[i][j] = slen;
     1834        }
     1835      }
     1836    }
     1837    READ_FLAG( val, "overlay_info_persistence_flag" );        sei.m_overlayInfoPersistenceFlag = val;
     1838  }
     1839  xParseByteAlign();
     1840}
     1841#endif
     1842
    17281843#endif //SVC_EXTENSION
    17291844
  • branches/SHM-dev/source/Lib/TLibDecoder/SEIread.h

    r900 r912  
    146146  Void xParseSEIFrameFieldInfo    (SEIFrameFieldInfo& sei, UInt payloadSize);
    147147#endif
     148#if Q0096_OVERLAY_SEI
     149  Void xParseSEIOverlayInfo           (SEIOverlayInfo& sei, UInt payloadSize);
     150#endif
    148151  Void xParseByteAlign();
    149152};
  • branches/SHM-dev/source/Lib/TLibDecoder/SyntaxElementParser.cpp

    r595 r912  
    8585}
    8686
     87#if Q0096_OVERLAY_SEI
     88Void  SyntaxElementParser::xReadStringTr        (UInt buSize, UChar *pValue, UInt& rLength, const Char *pSymbolName)
     89{
     90  xReadString(buSize, pValue, rLength);
     91  fprintf( g_hTrace, "%8lld  ", g_nSymbolCounter++ );
     92  fprintf( g_hTrace, "%-50s st(v=%d)  : %s\n", pSymbolName, rLength, pValue );
     93  fflush ( g_hTrace );
     94}
     95#endif
     96
    8797#endif
    8898
     
    153163}
    154164
     165#if Q0096_OVERLAY_SEI
     166Void  SyntaxElementParser::xReadString  (UInt bufSize, UChar *pVal, UInt& rLength)
     167{
     168  assert( m_pcBitstream->getNumBitsRead() % 8 == 0 ); //always start reading at a byte-aligned position
     169  assert ( bufSize > 1 ); //last byte always used for null-termination
     170  UInt val;
     171  UInt i;
     172  for (i=0 ; i<bufSize ; ++i )
     173  {
     174    m_pcBitstream->readByte( val );
     175    pVal[i] = val;
     176    if ( val == 0)
     177    {
     178      break;
     179    }
     180  }
     181  rLength = i;
     182  assert( pVal[rLength] == 0 );
     183}
     184#endif
    155185
    156186//! \}
  • branches/SHM-dev/source/Lib/TLibDecoder/SyntaxElementParser.h

    r595 r912  
    5151#define READ_SVLC(        code, name)     xReadSvlcTr (         code, name )
    5252#define READ_FLAG(        code, name)     xReadFlagTr (         code, name )
     53#if Q0096_OVERLAY_SEI
     54#define READ_STRING(bufSize, code, length, name)   xReadStringTr ( bufSize, code, length, name )
     55#endif
    5356
    5457#else
     
    5861#define READ_SVLC(        code, name)     xReadSvlc (         code )
    5962#define READ_FLAG(        code, name)     xReadFlag (         code )
     63#if Q0096_OVERLAY_SEI
     64#define READ_STRING(bufSize, code, length, name)   xReadString ( bufSize, code, length )
     65#endif
    6066
    6167#endif
     
    8288  Void  xReadSvlc    ( Int&   val );
    8389  Void  xReadFlag    ( UInt&  val );
     90#if Q0096_OVERLAY_SEI
     91  Void  xReadString  (UInt bufSize, UChar *val, UInt& length);
     92#endif
    8493#if ENC_DEC_TRACE
    8594  Void  xReadCodeTr  (UInt  length, UInt& rValue, const Char *pSymbolName);
     
    8796  Void  xReadSvlcTr  (               Int& rValue, const Char *pSymbolName);
    8897  Void  xReadFlagTr  (              UInt& rValue, const Char *pSymbolName);
     98#if Q0096_OVERLAY_SEI
     99  Void  xReadStringTr(UInt bufSize, UChar *pValue, UInt& rLength, const Char *pSymbolName);
     100#endif
    89101#endif
    90102public:
Note: See TracChangeset for help on using the changeset viewer.