本文整理汇总了C++中TComPic::getConformanceWindow方法的典型用法代码示例。如果您正苦于以下问题:C++ TComPic::getConformanceWindow方法的具体用法?C++ TComPic::getConformanceWindow怎么用?C++ TComPic::getConformanceWindow使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TComPic
的用法示例。
在下文中一共展示了TComPic::getConformanceWindow方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: xWriteOutput
/** \param pcListPic list of pictures to be written to file
\todo DYN_REF_FREE should be revised
*/
Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, UInt tId )
{
TComList<TComPic*>::iterator iterPic = pcListPic->begin();
Int not_displayed = 0;
while (iterPic != pcListPic->end())
{
TComPic* pcPic = *(iterPic);
if(pcPic->getOutputMark() && pcPic->getPOC() > m_iPOCLastDisplay)
{
not_displayed++;
}
iterPic++;
}
iterPic = pcListPic->begin();
while (iterPic != pcListPic->end())
{
TComPic* pcPic = *(iterPic);
if ( pcPic->getOutputMark() && (not_displayed > pcPic->getNumReorderPics(tId) && pcPic->getPOC() > m_iPOCLastDisplay))
{
// write to file
not_displayed--;
if ( m_pchReconFile )
{
const Window &conf = pcPic->getConformanceWindow();
const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window();
m_cTVideoIOYuvReconFile.write( pcPic->getPicYuvRec(),
conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(),
conf.getWindowRightOffset() + defDisp.getWindowRightOffset(),
conf.getWindowTopOffset() + defDisp.getWindowTopOffset(),
conf.getWindowBottomOffset() + defDisp.getWindowBottomOffset() );
}
// update POC of display order
m_iPOCLastDisplay = pcPic->getPOC();
// erase non-referenced picture in the reference picture list after display
if ( !pcPic->getSlice(0)->isReferenced() && pcPic->getReconMark() == true )
{
#if !DYN_REF_FREE
pcPic->setReconMark(false);
// mark it should be extended later
pcPic->getPicYuvRec()->setBorderExtension( false );
#else
pcPic->destroy();
pcListPic->erase( iterPic );
iterPic = pcListPic->begin(); // to the beginning, non-efficient way, have to be revised!
continue;
#endif
}
pcPic->setOutputMark(false);
}
iterPic++;
}
}
示例2: xFlushOutput
/** \param pcListPic list of pictures to be written to file
\todo DYN_REF_FREE should be revised
*/
Void TAppDecTop::xFlushOutput( TComList<TComPic*>* pcListPic )
{
if(!pcListPic || pcListPic->empty())
{
return;
}
TComList<TComPic*>::iterator iterPic = pcListPic->begin();
iterPic = pcListPic->begin();
TComPic* pcPic = *(iterPic);
if (pcPic->isField()) //Field Decoding
{
TComList<TComPic*>::iterator endPic = pcListPic->end();
endPic--;
TComPic *pcPicTop, *pcPicBottom = NULL;
while (iterPic != endPic)
{
pcPicTop = *(iterPic);
iterPic++;
pcPicBottom = *(iterPic);
if ( pcPicTop->getOutputMark() && pcPicBottom->getOutputMark() && !(pcPicTop->getPOC()%2) && (pcPicBottom->getPOC() == pcPicTop->getPOC()+1) )
{
// write to file
if ( m_pchReconFile )
{
const Window &conf = pcPicTop->getConformanceWindow();
const Window &defDisp = m_respectDefDispWindow ? pcPicTop->getDefDisplayWindow() : Window();
const Bool isTff = pcPicTop->isTopField();
m_cTVideoIOYuvReconFile.write( pcPicTop->getPicYuvRec(), pcPicBottom->getPicYuvRec(),
m_outputColourSpaceConvert,
conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(),
conf.getWindowRightOffset() + defDisp.getWindowRightOffset(),
conf.getWindowTopOffset() + defDisp.getWindowTopOffset(),
conf.getWindowBottomOffset() + defDisp.getWindowBottomOffset(), NUM_CHROMA_FORMAT, isTff );
}
// update POC of display order
m_iPOCLastDisplay = pcPicBottom->getPOC();
// erase non-referenced picture in the reference picture list after display
if ( !pcPicTop->getSlice(0)->isReferenced() && pcPicTop->getReconMark() == true )
{
#if !DYN_REF_FREE
pcPicTop->setReconMark(false);
// mark it should be extended later
pcPicTop->getPicYuvRec()->setBorderExtension( false );
#else
pcPicTop->destroy();
pcListPic->erase( iterPic );
iterPic = pcListPic->begin(); // to the beginning, non-efficient way, have to be revised!
continue;
#endif
}
if ( !pcPicBottom->getSlice(0)->isReferenced() && pcPicBottom->getReconMark() == true )
{
#if !DYN_REF_FREE
pcPicBottom->setReconMark(false);
// mark it should be extended later
pcPicBottom->getPicYuvRec()->setBorderExtension( false );
#else
pcPicBottom->destroy();
pcListPic->erase( iterPic );
iterPic = pcListPic->begin(); // to the beginning, non-efficient way, have to be revised!
continue;
#endif
}
pcPicTop->setOutputMark(false);
pcPicBottom->setOutputMark(false);
#if !DYN_REF_FREE
if(pcPicTop)
{
pcPicTop->destroy();
delete pcPicTop;
pcPicTop = NULL;
}
#endif
}
}
if(pcPicBottom)
{
pcPicBottom->destroy();
delete pcPicBottom;
pcPicBottom = NULL;
}
}
else //Frame decoding
{
while (iterPic != pcListPic->end())
{
pcPic = *(iterPic);
//.........这里部分代码省略.........
示例3: xWriteOutput
/** \param pcListPic list of pictures to be written to file
\todo DYN_REF_FREE should be revised
*/
Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, UInt tId )
{
if (pcListPic->empty())
{
return;
}
TComList<TComPic*>::iterator iterPic = pcListPic->begin();
Int numPicsNotYetDisplayed = 0;
Int dpbFullness = 0;
TComSPS* activeSPS = m_cTDecTop.getActiveSPS();
UInt numReorderPicsHighestTid;
UInt maxDecPicBufferingHighestTid;
UInt maxNrSublayers = activeSPS->getMaxTLayers();
if(m_iMaxTemporalLayer == -1 || m_iMaxTemporalLayer >= maxNrSublayers)
{
numReorderPicsHighestTid = activeSPS->getNumReorderPics(maxNrSublayers-1);
maxDecPicBufferingHighestTid = activeSPS->getMaxDecPicBuffering(maxNrSublayers-1);
}
else
{
numReorderPicsHighestTid = activeSPS->getNumReorderPics(m_iMaxTemporalLayer);
maxDecPicBufferingHighestTid = activeSPS->getMaxDecPicBuffering(m_iMaxTemporalLayer);
}
while (iterPic != pcListPic->end())
{
TComPic* pcPic = *(iterPic);
if(pcPic->getOutputMark() && pcPic->getPOC() > m_iPOCLastDisplay)
{
numPicsNotYetDisplayed++;
dpbFullness++;
}
else if(pcPic->getSlice( 0 )->isReferenced())
{
dpbFullness++;
}
iterPic++;
}
iterPic = pcListPic->begin();
if (numPicsNotYetDisplayed>2)
{
iterPic++;
}
TComPic* pcPic = *(iterPic);
if (numPicsNotYetDisplayed>2 && pcPic->isField()) //Field Decoding
{
TComList<TComPic*>::iterator endPic = pcListPic->end();
endPic--;
iterPic = pcListPic->begin();
while (iterPic != endPic)
{
TComPic* pcPicTop = *(iterPic);
iterPic++;
TComPic* pcPicBottom = *(iterPic);
if ( pcPicTop->getOutputMark() && pcPicBottom->getOutputMark() &&
(numPicsNotYetDisplayed > numReorderPicsHighestTid || dpbFullness > maxDecPicBufferingHighestTid) &&
(!(pcPicTop->getPOC()%2) && pcPicBottom->getPOC() == pcPicTop->getPOC()+1) &&
(pcPicTop->getPOC() == m_iPOCLastDisplay+1 || m_iPOCLastDisplay < 0))
{
// write to file
numPicsNotYetDisplayed = numPicsNotYetDisplayed-2;
if ( m_pchReconFile )
{
const Window &conf = pcPicTop->getConformanceWindow();
const Window &defDisp = m_respectDefDispWindow ? pcPicTop->getDefDisplayWindow() : Window();
const Bool isTff = pcPicTop->isTopField();
Bool display = true;
if( m_decodedNoDisplaySEIEnabled )
{
SEIMessages noDisplay = getSeisByType(pcPic->getSEIs(), SEI::NO_DISPLAY );
const SEINoDisplay *nd = ( noDisplay.size() > 0 ) ? (SEINoDisplay*) *(noDisplay.begin()) : NULL;
if( (nd != NULL) && nd->m_noDisplay )
{
display = false;
}
}
if (display)
{
m_cTVideoIOYuvReconFile.write( pcPicTop->getPicYuvRec(), pcPicBottom->getPicYuvRec(),
m_outputColourSpaceConvert,
conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(),
conf.getWindowRightOffset() + defDisp.getWindowRightOffset(),
conf.getWindowTopOffset() + defDisp.getWindowTopOffset(),
conf.getWindowBottomOffset() + defDisp.getWindowBottomOffset(), NUM_CHROMA_FORMAT, isTff );
}
}
// update POC of display order
m_iPOCLastDisplay = pcPicBottom->getPOC();
//.........这里部分代码省略.........