Changeset 924 in SHVCSoftware for branches/SHM-dev/source/App/TAppDecoder/TAppDecTop.cpp
- Timestamp:
- 17 Nov 2014, 17:09:25 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-dev/source/App/TAppDecoder/TAppDecTop.cpp
r874 r924 45 45 #include "TLibDecoder/AnnexBread.h" 46 46 #include "TLibDecoder/NALread.h" 47 #include "TLibCommon/TComPicYuv.h" 48 #include "libmd5/MD5.h" 47 49 //! \ingroup TAppDecoder 48 50 //! \{ … … 576 578 #endif 577 579 } 580 #if CONFORMANCE_BITSTREAM_MODE 581 for(UInt layer = 0; layer <= MAX_LAYERS; layer++) 582 { 583 m_acTDecTop[layer].setConfModeFlag ( this->getConfModeFlag() ); 584 } 585 #endif 578 586 #else 579 587 m_cTDecTop.init(); … … 1101 1109 conf.getWindowBottomOffset()* yScal + defDisp.getWindowBottomOffset() ); 1102 1110 } 1111 1103 1112 // update POC of display order 1104 1113 pocLastDisplay = pic->getPOC(); … … 1313 1322 1314 1323 xOutputAndMarkPic( pic, m_pchReconFile[layerIdx], layerIdx, m_aiPOCLastDisplay[layerIdx], dpbStatus ); 1324 1325 #if CONFORMANCE_BITSTREAM_MODE 1326 FILE *fptr; 1327 if( this->getConfModeFlag() ) 1328 { 1329 if( this->getMetadataFileRefresh() ) 1330 { 1331 fptr = fopen( this->getMetadataFileName().c_str(), "w" ); 1332 fprintf(fptr, " LayerId POC MD5\n"); 1333 fprintf(fptr, "------------------------\n"); 1334 } 1335 else 1336 { 1337 fptr = fopen( this->getMetadataFileName().c_str(), "a+" ); 1338 } 1339 this->setMetadataFileRefresh(false); 1340 UChar recon_digest[3][16]; 1341 calcMD5(*pic->getPicYuvRec(), recon_digest); 1342 fprintf(fptr, "%8d%9d MD5:%s\n", pic->getLayerId(), pic->getSlice(0)->getPOC(), digestToString(recon_digest, 16)); 1343 fclose(fptr); 1344 1345 // Output all picutres "decoded" in that layer that have POC less than the current picture 1346 std::vector<TComPic> *layerBuffer = (m_acTDecTop->getLayerDec(pic->getLayerId()))->getConfListPic(); 1347 // Write all pictures to the file. 1348 if( this->getDecodedYuvLayerRefresh(layerIdx) ) 1349 { 1350 if (!m_outputBitDepthY) { m_outputBitDepthY = g_bitDepthY; } 1351 if (!m_outputBitDepthC) { m_outputBitDepthC = g_bitDepthC; } 1352 1353 char tempFileName[256]; 1354 strcpy(tempFileName, this->getDecodedYuvLayerFileName( layerIdx ).c_str()); 1355 m_confReconFile[layerIdx].open(tempFileName, true, m_outputBitDepthY, m_outputBitDepthC, g_bitDepthY, g_bitDepthC ); // write mode 1356 this->setDecodedYuvLayerRefresh( layerIdx, false ); 1357 } 1358 const Window &conf = pic->getConformanceWindow(); 1359 const Window &defDisp = m_respectDefDispWindow ? pic->getDefDisplayWindow() : Window(); 1360 Int xScal = 1, yScal = 1; 1361 #if REPN_FORMAT_IN_VPS 1362 UInt chromaFormatIdc = pic->getSlice(0)->getChromaFormatIdc(); 1363 xScal = TComSPS::getWinUnitX( chromaFormatIdc ); 1364 yScal = TComSPS::getWinUnitY( chromaFormatIdc ); 1365 #endif 1366 std::vector<TComPic>::iterator iterPic; 1367 for(iterPic = layerBuffer->begin(); iterPic != layerBuffer->end(); iterPic++) 1368 { 1369 TComPic checkPic = *iterPic; 1370 if( checkPic.getPOC() <= pic->getPOC() ) 1371 { 1372 TComPicYuv* pPicCYuvRec = checkPic.getPicYuvRec(); 1373 m_confReconFile[layerIdx].write( pPicCYuvRec, 1374 conf.getWindowLeftOffset() * xScal + defDisp.getWindowLeftOffset(), 1375 conf.getWindowRightOffset() * xScal + defDisp.getWindowRightOffset(), 1376 conf.getWindowTopOffset() * yScal + defDisp.getWindowTopOffset(), 1377 conf.getWindowBottomOffset()* yScal + defDisp.getWindowBottomOffset() ); 1378 layerBuffer->erase(iterPic); 1379 iterPic = layerBuffer->begin(); // Ensure doesn't go to infinite loop 1380 if(layerBuffer->size() == 0) 1381 { 1382 break; 1383 } 1384 } 1385 } 1386 } 1387 // Now to remove the pictures that have been output 1388 #endif 1315 1389 1316 1390 listOfPocsInEachLayer[layerIdx].erase( it );
Note: See TracChangeset for help on using the changeset viewer.