Changeset 54 in SHVCSoftware for branches/HM-10.0-dev-SHM/source/App/TAppDecoder


Ignore:
Timestamp:
2 Mar 2013, 09:25:00 (12 years ago)
Author:
seregin
Message:

port simulcast

Location:
branches/HM-10.0-dev-SHM/source/App/TAppDecoder
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/HM-10.0-dev-SHM/source/App/TAppDecoder/TAppDecCfg.cpp

    r51 r54  
    4141#include "TAppDecCfg.h"
    4242#include "TAppCommon/program_options_lite.h"
     43#if SVC_EXTENSION
     44#include <cassert>
     45#endif
    4346
    4447#ifdef WIN32
     
    6366  Bool do_help = false;
    6467  string cfg_BitstreamFile;
     68#if SVC_EXTENSION
     69  string cfg_ReconFile [MAX_LAYERS];
     70  Int nLayerNum;
     71#if AVC_BASE
     72  string cfg_BLReconFile;
     73#endif
     74#else
    6575  string cfg_ReconFile;
     76#endif
     77#if AVC_SYNTAX || SYNTAX_OUTPUT
     78  string cfg_BLSyntaxFile;
     79#endif
    6680  string cfg_TargetDecLayerIdSetFile;
    6781
     
    7084  ("help", do_help, false, "this help text")
    7185  ("BitstreamFile,b", cfg_BitstreamFile, string(""), "bitstream input file name")
     86#if SVC_EXTENSION
     87  ("ReconFileL%d,-o%d",   cfg_ReconFile,   string(""), MAX_LAYERS, "Layer %d reconstructed YUV output file name\n"
     88                                                     "YUV writing is skipped if omitted")
     89#if AVC_BASE
     90  ("BLReconFile,-ibl",    cfg_BLReconFile,  string(""), "BL reconstructed YUV input file name")
     91  ("BLSourceWidth,-wdt",    m_iBLSourceWidth,        0, "BL source picture width")
     92  ("BLSourceHeight,-hgt",   m_iBLSourceHeight,       0, "BL source picture height")
     93#if AVC_SYNTAX
     94  ("BLSyntaxFile,-ibs",    cfg_BLSyntaxFile,  string(""), "BL syntax input file name") 
     95#endif
     96#endif
     97#else
    7298  ("ReconFile,o",     cfg_ReconFile,     string(""), "reconstructed YUV output file name\n"
    7399                                                     "YUV writing is skipped if omitted")
     100#endif
     101#if SYNTAX_OUTPUT
     102  ("BLSyntaxFile,-ibs",    cfg_BLSyntaxFile,  string(""), "BL syntax input file name")
     103  ("BLSourceWidth,-wdt",    m_iBLSourceWidth,        0, "BL source picture width")
     104  ("BLSourceHeight,-hgt",   m_iBLSourceHeight,       0, "BL source picture height")
     105  ("BLFrames,-fr",          m_iBLFrames,       0, "BL number of frames")
     106#endif
    74107  ("SkipFrames,s", m_iSkipFrame, 0, "number of frames to skip before random access")
    75108  ("OutputBitDepth,d", m_outputBitDepthY, 0, "bit depth of YUV output luma component (default: use 0 for native depth)")
    76109  ("OutputBitDepthC,d", m_outputBitDepthC, 0, "bit depth of YUV output chroma component (default: use 0 for native depth)")
     110#if SVC_EXTENSION
     111  ("LayerNum,-ls", nLayerNum, 1, "Number of layers to be decoded.")
     112#endif
    77113  ("MaxTemporalLayer,t", m_iMaxTemporalLayer, -1, "Maximum Temporal Layer to be decoded. -1 to decode all layers")
    78114  ("SEIDecodedPictureHash", m_decodedPictureHashSEIEnabled, 1, "Control handling of decoded picture hash SEI messages\n"
     
    99135  /* convert std::string to c string for compatability */
    100136  m_pchBitstreamFile = cfg_BitstreamFile.empty() ? NULL : strdup(cfg_BitstreamFile.c_str());
     137#if SVC_EXTENSION
     138  m_tgtLayerId = nLayerNum - 1;
     139  assert( m_tgtLayerId >= 0 );
     140  for(UInt layer=0; layer<= m_tgtLayerId; layer++)
     141  {
     142    m_pchReconFile[layer] = cfg_ReconFile[layer].empty() ? NULL : strdup(cfg_ReconFile[layer].c_str());
     143  }
     144#if AVC_BASE
     145  m_pchBLReconFile = cfg_BLReconFile.empty() ? NULL : strdup(cfg_BLReconFile.c_str());
     146#endif
     147#else
    101148  m_pchReconFile = cfg_ReconFile.empty() ? NULL : strdup(cfg_ReconFile.c_str());
     149#endif
     150#if AVC_SYNTAX || SYNTAX_OUTPUT
     151  m_pchBLSyntaxFile = cfg_BLSyntaxFile.empty() ? NULL : strdup(cfg_BLSyntaxFile.c_str());
     152#endif
    102153
    103154  if (!m_pchBitstreamFile)
  • branches/HM-10.0-dev-SHM/source/App/TAppDecoder/TAppDecCfg.h

    r51 r54  
    5858protected:
    5959  Char*         m_pchBitstreamFile;                   ///< input bitstream file name
     60#if SVC_EXTENSION
     61  Char*         m_pchReconFile [MAX_LAYERS];          ///< output reconstruction file name
     62#if AVC_BASE
     63  Char*         m_pchBLReconFile;                     ///< input BL reconstruction file name
     64  Int           m_iBLSourceWidth;
     65  Int           m_iBLSourceHeight;
     66#if AVC_SYNTAX
     67  Char*         m_pchBLSyntaxFile;                     ///< input BL syntax file name 
     68#endif
     69#endif
     70#else
    6071  Char*         m_pchReconFile;                       ///< output reconstruction file name
     72#endif
     73#if SYNTAX_OUTPUT
     74  Char*         m_pchBLSyntaxFile;                     ///< input BL syntax file name
     75  Int           m_iBLSourceWidth;
     76  Int           m_iBLSourceHeight;
     77  Int           m_iBLFrames;
     78#endif
    6179  Int           m_iSkipFrame;                         ///< counter for frames prior to the random access point to skip
    6280  Int           m_outputBitDepthY;                     ///< bit depth used for writing output (luma)
     
    6684  Int           m_decodedPictureHashSEIEnabled;       ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message
    6785
     86#if SVC_EXTENSION
     87  Int           m_tgtLayerId;                        ///< target layer ID
     88#endif
    6889  std::vector<Int> m_targetDecLayerIdSet;             ///< set of LayerIds to be included in the sub-bitstream extraction process.
    6990  Int           m_respectDefDispWindow;               ///< Only output content inside the default display window
     
    7293  TAppDecCfg()
    7394  : m_pchBitstreamFile(NULL)
     95#if SVC_EXTENSION
     96  , m_tgtLayerId(0)
     97#else
    7498  , m_pchReconFile(NULL)
     99#endif
    75100  , m_iSkipFrame(0)
    76101  , m_outputBitDepthY(0)
     
    79104  , m_decodedPictureHashSEIEnabled(0)
    80105  , m_respectDefDispWindow(0)
     106#if AVC_BASE
     107  , m_iBLSourceWidth(0)
     108  , m_iBLSourceHeight(0)
     109#endif
     110#if SYNTAX_OUTPUT
     111  , m_iBLSourceWidth(0)
     112  , m_iBLSourceHeight(0)
     113  , m_iBLFrames(0)
     114#endif
    81115  {}
    82116  virtual ~TAppDecCfg() {}
  • branches/HM-10.0-dev-SHM/source/App/TAppDecoder/TAppDecTop.cpp

    r51 r54  
    5353// ====================================================================================================================
    5454
     55#if SVC_EXTENSION
     56TAppDecTop::TAppDecTop()
     57{
     58  ::memset (m_abDecFlag, 0, sizeof (m_abDecFlag));
     59  for(UInt layer=0; layer < MAX_LAYERS; layer++)
     60  {
     61    m_aiPOCLastDisplay[layer]  = -MAX_INT;
     62    m_apcTDecTop[layer] = &m_acTDecTop[layer];
     63  }
     64}
     65#else
    5566TAppDecTop::TAppDecTop()
    5667: m_iPOCLastDisplay(-MAX_INT)
     
    5869  ::memset (m_abDecFlag, 0, sizeof (m_abDecFlag));
    5970}
     71#endif
    6072
    6173Void TAppDecTop::create()
     
    7082    m_pchBitstreamFile = NULL;
    7183  }
     84#if SVC_EXTENSION   
     85  for( Int i = 0; i < m_tgtLayerId; i++ )
     86  {
     87    if( m_pchReconFile[i] )
     88    {
     89      free ( m_pchReconFile[i] );
     90      m_pchReconFile[i] = NULL;
     91    }
     92  } 
     93#if AVC_BASE
     94  if( m_pchBLReconFile )
     95  {
     96    free ( m_pchBLReconFile );
     97    m_pchBLReconFile = NULL;
     98  }
     99#endif
     100#else
    72101  if (m_pchReconFile)
    73102  {
     
    75104    m_pchReconFile = NULL;
    76105  }
     106#endif
     107#if AVC_SYNTAX || SYNTAX_OUTPUT
     108  if( m_pchBLSyntaxFile )
     109  {
     110    free ( m_pchBLSyntaxFile );
     111    m_pchBLSyntaxFile = NULL;
     112  }
     113#endif
    77114}
    78115
     
    89126 .
    90127 */
     128#if SVC_EXTENSION
     129Void TAppDecTop::decode()
     130{
     131  Int                poc;
     132  TComList<TComPic*>* pcListPic = NULL;
     133
     134  ifstream bitstreamFile(m_pchBitstreamFile, ifstream::in | ifstream::binary);
     135  if (!bitstreamFile)
     136  {
     137    fprintf(stderr, "\nfailed to open bitstream file `%s' for reading\n", m_pchBitstreamFile);
     138    exit(EXIT_FAILURE);
     139  }
     140
     141  InputByteStream bytestream(bitstreamFile);
     142
     143  // create & initialize internal classes
     144  xCreateDecLib();
     145  xInitDecLib  ();
     146
     147  // main decoder loop
     148  Bool recon_opened[MAX_LAYERS]; // reconstruction file not yet opened. (must be performed after SPS is seen)
     149  for(UInt layer=0; layer<=m_tgtLayerId; layer++)
     150  {
     151    recon_opened[layer] = false;
     152    m_aiPOCLastDisplay[layer] += m_iSkipFrame;      // set the last displayed POC correctly for skip forward.
     153  }
     154
     155  UInt curLayerId = 0;     // current layer to be reconstructed
     156
     157#if AVC_BASE
     158  TComPic pcBLPic;
     159  if( !m_pchBLReconFile )
     160  {
     161    printf( "Wrong base layer YUV input file\n" );
     162    exit(EXIT_FAILURE);
     163  }
     164  fstream streamYUV( m_pchBLReconFile, fstream::in | fstream::binary );
     165  if( !streamYUV.good() )
     166  {
     167    printf( "Base layer YUV input reading error\n" );
     168    exit(EXIT_FAILURE);
     169  }
     170  TComList<TComPic*> *cListPic = m_acTDecTop[0].getListPic();
     171  m_acTDecTop[0].setBLsize( m_iBLSourceWidth, m_iBLSourceHeight );
     172  m_acTDecTop[0].setBLReconFile( &streamYUV );
     173  pcBLPic.setLayerId( 0 );
     174  cListPic->pushBack( &pcBLPic );
     175#if AVC_SYNTAX
     176  if( !m_pchBLSyntaxFile )
     177  {
     178    printf( "Wrong base layer syntax file\n" );
     179    exit(EXIT_FAILURE);
     180  }
     181  fstream streamSyntaxFile( m_pchBLSyntaxFile, fstream::in | fstream::binary );
     182  if( !streamSyntaxFile.good() )
     183  {
     184    printf( "Base layer syntax input reading error\n" );
     185    exit(EXIT_FAILURE);
     186  }
     187  m_acTDecTop[0].setBLSyntaxFile( &streamSyntaxFile );
     188#endif
     189#endif
     190
     191  while (!!bitstreamFile)
     192  {
     193    /* location serves to work around a design fault in the decoder, whereby
     194     * the process of reading a new slice that is the first slice of a new frame
     195     * requires the TDecTop::decode() method to be called again with the same
     196     * nal unit. */
     197    streampos location = bitstreamFile.tellg();
     198    AnnexBStats stats = AnnexBStats();
     199
     200    vector<uint8_t> nalUnit;
     201    InputNALUnit nalu;
     202    byteStreamNALUnit(bytestream, nalUnit, stats);
     203
     204    // call actual decoding function
     205    Bool bNewPicture = false;
     206    Bool bNewPOC = false;
     207    if (nalUnit.empty())
     208    {
     209      /* this can happen if the following occur:
     210       *  - empty input file
     211       *  - two back-to-back start_code_prefixes
     212       *  - start_code_prefix immediately followed by EOF
     213       */
     214      fprintf(stderr, "Warning: Attempt to decode an empty NAL unit\n");
     215    }
     216    else
     217    {
     218      read(nalu, nalUnit);
     219      if( (m_iMaxTemporalLayer >= 0 && nalu.m_temporalId > m_iMaxTemporalLayer) || !isNaluWithinTargetDecLayerIdSet(&nalu)  ||
     220        (nalu.m_layerId > m_tgtLayerId) )
     221      {
     222        bNewPicture = false;
     223      }
     224      else
     225      {
     226        bNewPicture = m_acTDecTop[nalu.m_layerId].decode(nalu, m_iSkipFrame, m_aiPOCLastDisplay[nalu.m_layerId], curLayerId, bNewPOC);
     227        if (bNewPicture)
     228        {
     229          bitstreamFile.clear();
     230          /* location points to the current nalunit payload[1] due to the
     231           * need for the annexB parser to read three extra bytes.
     232           * [1] except for the first NAL unit in the file
     233           *     (but bNewPicture doesn't happen then) */
     234          bitstreamFile.seekg(location-streamoff(3));
     235          bytestream.reset();
     236        }
     237      }
     238    }
     239    if (bNewPicture || !bitstreamFile)
     240    {
     241      m_acTDecTop[curLayerId].executeLoopFilters(poc, pcListPic);
     242    }
     243
     244    if( pcListPic )
     245    {
     246      if ( m_pchReconFile[curLayerId] && !recon_opened[curLayerId] )
     247      {
     248        if (!m_outputBitDepthY) { m_outputBitDepthY = g_bitDepthY; }       
     249        if (!m_outputBitDepthC) { m_outputBitDepthC = g_bitDepthC; }
     250
     251        m_acTVideoIOYuvReconFile[curLayerId].open( m_pchReconFile[curLayerId], true, m_outputBitDepthY, m_outputBitDepthC, g_bitDepthY, g_bitDepthC ); // write mode
     252
     253        recon_opened[curLayerId] = true;
     254      }
     255      if ( bNewPicture && bNewPOC &&
     256           (   nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR
     257            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP
     258            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_N_LP
     259            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLANT
     260            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA ) )
     261      {
     262        xFlushOutput( pcListPic, curLayerId );
     263      }
     264      // write reconstruction to file
     265      if(bNewPicture)
     266      {
     267        xWriteOutput( pcListPic, curLayerId, nalu.m_temporalId );
     268      }
     269    }
     270  }
     271  for(UInt layer = 0; layer <= m_tgtLayerId; layer++)
     272  {
     273    xFlushOutput( m_acTDecTop[layer].getListPic(), layer );
     274  }
     275  // delete buffers
     276#if AVC_BASE
     277  if( streamYUV.is_open() )
     278  {
     279    streamYUV.close();
     280  }
     281#if AVC_SYNTAX
     282  if( streamSyntaxFile.is_open() )
     283  {
     284    streamSyntaxFile.close();
     285  }
     286#endif
     287  pcBLPic.destroy();
     288
     289  for(UInt layer = 1; layer <= m_tgtLayerId; layer++)
     290#else
     291  for(UInt layer = 0; layer <= m_tgtLayerId; layer++)
     292#endif
     293  {
     294    m_acTDecTop[layer].deletePicBuffer();
     295  }
     296 
     297  // destroy internal classes
     298  xDestroyDecLib();
     299}
     300#else
    91301Void TAppDecTop::decode()
    92302{
     
    110320  // main decoder loop
    111321  Bool recon_opened = false; // reconstruction file not yet opened. (must be performed after SPS is seen)
     322
     323#if SYNTAX_OUTPUT
     324  if( !m_pchBLSyntaxFile )
     325  {
     326    printf( "Wrong base layer syntax file\n" );
     327    exit(EXIT_FAILURE);
     328  }
     329  fstream streamSyntaxFile( m_pchBLSyntaxFile, fstream::out | fstream::binary );
     330  if( !streamSyntaxFile.good() )
     331  {
     332    printf( "Base layer syntax input reading error\n" );
     333    exit(EXIT_FAILURE);
     334  }
     335  m_cTDecTop.setBLSyntaxFile( &streamSyntaxFile );
     336
     337  for( Int i = m_iBLFrames * m_iBLSourceWidth * m_iBLSourceHeight * SYNTAX_BYTES / 16; i >= 0; i-- )
     338  {
     339    streamSyntaxFile.put( 0 );
     340  }
     341  streamSyntaxFile.seekp( 0 );
     342#endif
    112343
    113344  while (!!bitstreamFile)
     
    199430  }
    200431 
     432#if SYNTAX_OUTPUT
     433  if( streamSyntaxFile.is_open() )
     434  {
     435    streamSyntaxFile.close();
     436  }
     437#endif
     438 
    201439  xFlushOutput( pcListPic );
    202440  // delete buffers
     
    206444  xDestroyDecLib();
    207445}
     446#endif
    208447
    209448// ====================================================================================================================
     
    213452Void TAppDecTop::xCreateDecLib()
    214453{
     454#if SVC_EXTENSION
     455  // initialize global variables
     456  initROM(); 
     457
     458  for(UInt layer = 0; layer <= m_tgtLayerId; layer++)
     459  {
     460    // set layer ID
     461    m_acTDecTop[layer].setLayerId                      ( layer );
     462
     463    // create decoder class
     464    m_acTDecTop[layer].create();
     465
     466    m_acTDecTop[layer].setLayerDec(m_apcTDecTop);   
     467  }
     468#else
    215469  // create decoder class
    216470  m_cTDecTop.create();
     471#endif
    217472}
    218473
    219474Void TAppDecTop::xDestroyDecLib()
    220475{
     476#if SVC_EXTENSION
     477  // destroy ROM
     478  destroyROM();
     479
     480  for(UInt layer = 0; layer <= m_tgtLayerId; layer++)
     481  {
     482    if ( m_pchReconFile[layer] )
     483    {
     484      m_acTVideoIOYuvReconFile[layer]. close();
     485    }
     486
     487    // destroy decoder class
     488    m_acTDecTop[layer].destroy();
     489  }
     490#else
    221491  if ( m_pchReconFile )
    222492  {
     
    226496  // destroy decoder class
    227497  m_cTDecTop.destroy();
     498#endif
    228499}
    229500
     
    231502{
    232503  // initialize decoder class
     504#if SVC_EXTENSION
     505  for(UInt layer = 0; layer <= m_tgtLayerId; layer++)
     506  {
     507    m_acTDecTop[layer].init();
     508    m_acTDecTop[layer].setDecodedPictureHashSEIEnabled(m_decodedPictureHashSEIEnabled);
     509    m_acTDecTop[layer].setNumLayer( m_tgtLayerId + 1 );
     510  }
     511
     512#else
    233513  m_cTDecTop.init();
    234514  m_cTDecTop.setDecodedPictureHashSEIEnabled(m_decodedPictureHashSEIEnabled);
     515#endif
    235516}
    236517
     
    238519    \todo            DYN_REF_FREE should be revised
    239520 */
     521#if SVC_EXTENSION
     522Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, UInt layerId, UInt tId )
     523#else
    240524Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, UInt tId )
     525#endif
    241526{
    242527  TComList<TComPic*>::iterator iterPic   = pcListPic->begin();
     
    246531  {
    247532    TComPic* pcPic = *(iterPic);
     533#if SVC_EXTENSION
     534    if(pcPic->getOutputMark() && pcPic->getPOC() > m_aiPOCLastDisplay[layerId])
     535#else
    248536    if(pcPic->getOutputMark() && pcPic->getPOC() > m_iPOCLastDisplay)
     537#endif
    249538    {
    250539       not_displayed++;
     
    258547    TComPic* pcPic = *(iterPic);
    259548   
     549#if SVC_EXTENSION
     550    if ( pcPic->getOutputMark() && (not_displayed >  pcPic->getNumReorderPics(tId) && pcPic->getPOC() > m_aiPOCLastDisplay[layerId]))
     551#else
    260552    if ( pcPic->getOutputMark() && (not_displayed >  pcPic->getNumReorderPics(tId) && pcPic->getPOC() > m_iPOCLastDisplay))
     553#endif
    261554    {
    262555      // write to file
    263556       not_displayed--;
     557#if SVC_EXTENSION
     558      if ( m_pchReconFile[layerId] )
     559      {
     560        const Window &conf = pcPic->getConformanceWindow();
     561        const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window();
     562        m_acTVideoIOYuvReconFile[layerId].write( pcPic->getPicYuvRec(),
     563                                       conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(),
     564                                       conf.getWindowRightOffset() + defDisp.getWindowRightOffset(),
     565                                       conf.getWindowTopOffset() + defDisp.getWindowTopOffset(),
     566                                       conf.getWindowBottomOffset() + defDisp.getWindowBottomOffset() );
     567      }
     568     
     569      // update POC of display order
     570      m_aiPOCLastDisplay[layerId] = pcPic->getPOC();
     571#else
    264572      if ( m_pchReconFile )
    265573      {
     
    275583      // update POC of display order
    276584      m_iPOCLastDisplay = pcPic->getPOC();
     585#endif
    277586     
    278587      // erase non-referenced picture in the reference picture list after display
     
    302611    \todo            DYN_REF_FREE should be revised
    303612 */
     613#if SVC_EXTENSION
     614Void TAppDecTop::xFlushOutput( TComList<TComPic*>* pcListPic, UInt layerId )
     615#else
    304616Void TAppDecTop::xFlushOutput( TComList<TComPic*>* pcListPic )
     617#endif
    305618{
    306619  if(!pcListPic)
     
    319632    {
    320633      // write to file
     634#if SVC_EXTENSION
     635      if ( m_pchReconFile[layerId] )
     636      {
     637        const Window &conf = pcPic->getConformanceWindow();
     638        const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window();
     639        m_acTVideoIOYuvReconFile[layerId].write( pcPic->getPicYuvRec(),
     640                                       conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(),
     641                                       conf.getWindowRightOffset() + defDisp.getWindowRightOffset(),
     642                                       conf.getWindowTopOffset() + defDisp.getWindowTopOffset(),
     643                                       conf.getWindowBottomOffset() + defDisp.getWindowBottomOffset() );
     644      }
     645     
     646      // update POC of display order
     647      m_aiPOCLastDisplay[layerId] = pcPic->getPOC();
     648#else
    321649      if ( m_pchReconFile )
    322650      {
     
    332660      // update POC of display order
    333661      m_iPOCLastDisplay = pcPic->getPOC();
     662#endif
    334663     
    335664      // erase non-referenced picture in the reference picture list after display
     
    351680      pcPic->setOutputMark(false);
    352681    }
     682#if !SVC_EXTENSION
    353683#if !DYN_REF_FREE
    354684    if(pcPic)
     
    359689    }
    360690#endif   
     691#endif
    361692    iterPic++;
    362693  }
     694#if SVC_EXTENSION
     695  m_aiPOCLastDisplay[layerId] = -MAX_INT;
     696#else
    363697  pcListPic->clear();
    364698  m_iPOCLastDisplay = -MAX_INT;
     699#endif
    365700}
    366701
  • branches/HM-10.0-dev-SHM/source/App/TAppDecoder/TAppDecTop.h

    r51 r54  
    6161private:
    6262  // class interface
     63#if SVC_EXTENSION
     64  TDecTop                         m_acTDecTop [MAX_LAYERS];                    ///< decoder class
     65  TDecTop*                        m_apcTDecTop [MAX_LAYERS];                   ///< decoder point class
     66  TVideoIOYuv                     m_acTVideoIOYuvReconFile [MAX_LAYERS];        ///< reconstruction YUV class
     67#else
    6368  TDecTop                         m_cTDecTop;                     ///< decoder class
    6469  TVideoIOYuv                     m_cTVideoIOYuvReconFile;        ///< reconstruction YUV class
     70#endif
    6571 
    6672  // for output control
    6773  Bool                            m_abDecFlag[ MAX_GOP ];         ///< decoded flag in one GOP
     74#if SVC_EXTENSION
     75  Int                             m_aiPOCLastDisplay [MAX_LAYERS]; ///< last POC in display order
     76#else
    6877  Int                             m_iPOCLastDisplay;              ///< last POC in display order
     78#endif
    6979 
    7080public:
     
    8191  Void  xInitDecLib       (); ///< initialize decoder class
    8292 
     93#if SVC_EXTENSION
     94  Void  xWriteOutput      ( TComList<TComPic*>* pcListPic, UInt layerId, UInt tId ); ///< write YUV to file
     95  Void  xFlushOutput      ( TComList<TComPic*>* pcListPic, UInt layerId ); ///< flush all remaining decoded pictures to file
     96#else
    8397  Void  xWriteOutput      ( TComList<TComPic*>* pcListPic , UInt tId); ///< write YUV to file
    8498  Void  xFlushOutput      ( TComList<TComPic*>* pcListPic ); ///< flush all remaining decoded pictures to file
     99#endif
    85100  Bool  isNaluWithinTargetDecLayerIdSet ( InputNALUnit* nalu ); ///< check whether given Nalu is within targetDecLayerIdSet
    86101};
  • branches/HM-10.0-dev-SHM/source/App/TAppDecoder/decmain.cpp

    r51 r54  
    5656  // print information
    5757  fprintf( stdout, "\n" );
    58   fprintf( stdout, "HM software: Decoder Version [%s]", NV_VERSION );
     58  fprintf( stdout, "SHM software: Decoder Version [%s]", NV_VERSION );
    5959  fprintf( stdout, NVM_ONOS );
    6060  fprintf( stdout, NVM_COMPILEDBY );
Note: See TracChangeset for help on using the changeset viewer.