Changeset 930 in SHVCSoftware for branches/SHM-dev/source/App/TAppDecoder
- Timestamp:
- 17 Dec 2014, 01:38:36 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-dev/source/App/TAppDecoder/TAppDecTop.cpp
r924 r930 1324 1324 1325 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 else1336 {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 picture1346 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 mode1356 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 1362 UInt chromaFormatIdc = pic->getSlice(0)->getChromaFormatIdc();1363 xScal = TComSPS::getWinUnitX( chromaFormatIdc );1364 yScal = TComSPS::getWinUnitY( chromaFormatIdc );1365 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 1375 1376 1377 1378 layerBuffer->erase(iterPic);1379 iterPic = layerBuffer->begin(); // Ensure doesn't go to infinite loop1380 if(layerBuffer->size() == 0)1381 {1382 break;1383 }1384 }1385 }1386 }1387 // Now to remove the pictures that have been output1326 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 itPic; 1367 for(itPic = layerBuffer->begin(); itPic != layerBuffer->end(); itPic++) 1368 { 1369 TComPic checkPic = *itPic; 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(itPic); 1379 itPic = 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 1388 #endif 1389 1389
Note: See TracChangeset for help on using the changeset viewer.