Changeset 54 in SHVCSoftware for branches/HM-10.0-dev-SHM/source/App/TAppDecoder
- Timestamp:
- 2 Mar 2013, 09:25:00 (12 years ago)
- 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 41 41 #include "TAppDecCfg.h" 42 42 #include "TAppCommon/program_options_lite.h" 43 #if SVC_EXTENSION 44 #include <cassert> 45 #endif 43 46 44 47 #ifdef WIN32 … … 63 66 Bool do_help = false; 64 67 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 65 75 string cfg_ReconFile; 76 #endif 77 #if AVC_SYNTAX || SYNTAX_OUTPUT 78 string cfg_BLSyntaxFile; 79 #endif 66 80 string cfg_TargetDecLayerIdSetFile; 67 81 … … 70 84 ("help", do_help, false, "this help text") 71 85 ("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 72 98 ("ReconFile,o", cfg_ReconFile, string(""), "reconstructed YUV output file name\n" 73 99 "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 74 107 ("SkipFrames,s", m_iSkipFrame, 0, "number of frames to skip before random access") 75 108 ("OutputBitDepth,d", m_outputBitDepthY, 0, "bit depth of YUV output luma component (default: use 0 for native depth)") 76 109 ("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 77 113 ("MaxTemporalLayer,t", m_iMaxTemporalLayer, -1, "Maximum Temporal Layer to be decoded. -1 to decode all layers") 78 114 ("SEIDecodedPictureHash", m_decodedPictureHashSEIEnabled, 1, "Control handling of decoded picture hash SEI messages\n" … … 99 135 /* convert std::string to c string for compatability */ 100 136 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 101 148 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 102 153 103 154 if (!m_pchBitstreamFile) -
branches/HM-10.0-dev-SHM/source/App/TAppDecoder/TAppDecCfg.h
r51 r54 58 58 protected: 59 59 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 60 71 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 61 79 Int m_iSkipFrame; ///< counter for frames prior to the random access point to skip 62 80 Int m_outputBitDepthY; ///< bit depth used for writing output (luma) … … 66 84 Int m_decodedPictureHashSEIEnabled; ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message 67 85 86 #if SVC_EXTENSION 87 Int m_tgtLayerId; ///< target layer ID 88 #endif 68 89 std::vector<Int> m_targetDecLayerIdSet; ///< set of LayerIds to be included in the sub-bitstream extraction process. 69 90 Int m_respectDefDispWindow; ///< Only output content inside the default display window … … 72 93 TAppDecCfg() 73 94 : m_pchBitstreamFile(NULL) 95 #if SVC_EXTENSION 96 , m_tgtLayerId(0) 97 #else 74 98 , m_pchReconFile(NULL) 99 #endif 75 100 , m_iSkipFrame(0) 76 101 , m_outputBitDepthY(0) … … 79 104 , m_decodedPictureHashSEIEnabled(0) 80 105 , 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 81 115 {} 82 116 virtual ~TAppDecCfg() {} -
branches/HM-10.0-dev-SHM/source/App/TAppDecoder/TAppDecTop.cpp
r51 r54 53 53 // ==================================================================================================================== 54 54 55 #if SVC_EXTENSION 56 TAppDecTop::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 55 66 TAppDecTop::TAppDecTop() 56 67 : m_iPOCLastDisplay(-MAX_INT) … … 58 69 ::memset (m_abDecFlag, 0, sizeof (m_abDecFlag)); 59 70 } 71 #endif 60 72 61 73 Void TAppDecTop::create() … … 70 82 m_pchBitstreamFile = NULL; 71 83 } 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 72 101 if (m_pchReconFile) 73 102 { … … 75 104 m_pchReconFile = NULL; 76 105 } 106 #endif 107 #if AVC_SYNTAX || SYNTAX_OUTPUT 108 if( m_pchBLSyntaxFile ) 109 { 110 free ( m_pchBLSyntaxFile ); 111 m_pchBLSyntaxFile = NULL; 112 } 113 #endif 77 114 } 78 115 … … 89 126 . 90 127 */ 128 #if SVC_EXTENSION 129 Void 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 91 301 Void TAppDecTop::decode() 92 302 { … … 110 320 // main decoder loop 111 321 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 112 343 113 344 while (!!bitstreamFile) … … 199 430 } 200 431 432 #if SYNTAX_OUTPUT 433 if( streamSyntaxFile.is_open() ) 434 { 435 streamSyntaxFile.close(); 436 } 437 #endif 438 201 439 xFlushOutput( pcListPic ); 202 440 // delete buffers … … 206 444 xDestroyDecLib(); 207 445 } 446 #endif 208 447 209 448 // ==================================================================================================================== … … 213 452 Void TAppDecTop::xCreateDecLib() 214 453 { 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 215 469 // create decoder class 216 470 m_cTDecTop.create(); 471 #endif 217 472 } 218 473 219 474 Void TAppDecTop::xDestroyDecLib() 220 475 { 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 221 491 if ( m_pchReconFile ) 222 492 { … … 226 496 // destroy decoder class 227 497 m_cTDecTop.destroy(); 498 #endif 228 499 } 229 500 … … 231 502 { 232 503 // 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 233 513 m_cTDecTop.init(); 234 514 m_cTDecTop.setDecodedPictureHashSEIEnabled(m_decodedPictureHashSEIEnabled); 515 #endif 235 516 } 236 517 … … 238 519 \todo DYN_REF_FREE should be revised 239 520 */ 521 #if SVC_EXTENSION 522 Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, UInt layerId, UInt tId ) 523 #else 240 524 Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, UInt tId ) 525 #endif 241 526 { 242 527 TComList<TComPic*>::iterator iterPic = pcListPic->begin(); … … 246 531 { 247 532 TComPic* pcPic = *(iterPic); 533 #if SVC_EXTENSION 534 if(pcPic->getOutputMark() && pcPic->getPOC() > m_aiPOCLastDisplay[layerId]) 535 #else 248 536 if(pcPic->getOutputMark() && pcPic->getPOC() > m_iPOCLastDisplay) 537 #endif 249 538 { 250 539 not_displayed++; … … 258 547 TComPic* pcPic = *(iterPic); 259 548 549 #if SVC_EXTENSION 550 if ( pcPic->getOutputMark() && (not_displayed > pcPic->getNumReorderPics(tId) && pcPic->getPOC() > m_aiPOCLastDisplay[layerId])) 551 #else 260 552 if ( pcPic->getOutputMark() && (not_displayed > pcPic->getNumReorderPics(tId) && pcPic->getPOC() > m_iPOCLastDisplay)) 553 #endif 261 554 { 262 555 // write to file 263 556 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 264 572 if ( m_pchReconFile ) 265 573 { … … 275 583 // update POC of display order 276 584 m_iPOCLastDisplay = pcPic->getPOC(); 585 #endif 277 586 278 587 // erase non-referenced picture in the reference picture list after display … … 302 611 \todo DYN_REF_FREE should be revised 303 612 */ 613 #if SVC_EXTENSION 614 Void TAppDecTop::xFlushOutput( TComList<TComPic*>* pcListPic, UInt layerId ) 615 #else 304 616 Void TAppDecTop::xFlushOutput( TComList<TComPic*>* pcListPic ) 617 #endif 305 618 { 306 619 if(!pcListPic) … … 319 632 { 320 633 // 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 321 649 if ( m_pchReconFile ) 322 650 { … … 332 660 // update POC of display order 333 661 m_iPOCLastDisplay = pcPic->getPOC(); 662 #endif 334 663 335 664 // erase non-referenced picture in the reference picture list after display … … 351 680 pcPic->setOutputMark(false); 352 681 } 682 #if !SVC_EXTENSION 353 683 #if !DYN_REF_FREE 354 684 if(pcPic) … … 359 689 } 360 690 #endif 691 #endif 361 692 iterPic++; 362 693 } 694 #if SVC_EXTENSION 695 m_aiPOCLastDisplay[layerId] = -MAX_INT; 696 #else 363 697 pcListPic->clear(); 364 698 m_iPOCLastDisplay = -MAX_INT; 699 #endif 365 700 } 366 701 -
branches/HM-10.0-dev-SHM/source/App/TAppDecoder/TAppDecTop.h
r51 r54 61 61 private: 62 62 // 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 63 68 TDecTop m_cTDecTop; ///< decoder class 64 69 TVideoIOYuv m_cTVideoIOYuvReconFile; ///< reconstruction YUV class 70 #endif 65 71 66 72 // for output control 67 73 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 68 77 Int m_iPOCLastDisplay; ///< last POC in display order 78 #endif 69 79 70 80 public: … … 81 91 Void xInitDecLib (); ///< initialize decoder class 82 92 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 83 97 Void xWriteOutput ( TComList<TComPic*>* pcListPic , UInt tId); ///< write YUV to file 84 98 Void xFlushOutput ( TComList<TComPic*>* pcListPic ); ///< flush all remaining decoded pictures to file 99 #endif 85 100 Bool isNaluWithinTargetDecLayerIdSet ( InputNALUnit* nalu ); ///< check whether given Nalu is within targetDecLayerIdSet 86 101 }; -
branches/HM-10.0-dev-SHM/source/App/TAppDecoder/decmain.cpp
r51 r54 56 56 // print information 57 57 fprintf( stdout, "\n" ); 58 fprintf( stdout, " HM software: Decoder Version [%s]", NV_VERSION );58 fprintf( stdout, "SHM software: Decoder Version [%s]", NV_VERSION ); 59 59 fprintf( stdout, NVM_ONOS ); 60 60 fprintf( stdout, NVM_COMPILEDBY );
Note: See TracChangeset for help on using the changeset viewer.