本文整理汇总了C++中CDVDOverlay::Release方法的典型用法代码示例。如果您正苦于以下问题:C++ CDVDOverlay::Release方法的具体用法?C++ CDVDOverlay::Release怎么用?C++ CDVDOverlay::Release使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CDVDOverlay
的用法示例。
在下文中一共展示了CDVDOverlay::Release方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Process
void CDVDPlayerSubtitle::Process(double pts)
{
CSingleLock lock(m_section);
if (m_pSubtitleFileParser)
{
if(pts == DVD_NOPTS_VALUE)
return;
if (pts + DVD_SEC_TO_TIME(1) < m_lastPts)
{
m_pOverlayContainer->Clear();
m_pSubtitleFileParser->Reset();
}
if(m_pOverlayContainer->GetSize() >= 5)
return;
CDVDOverlay* pOverlay = m_pSubtitleFileParser->Parse(pts);
// add all overlays which fit the pts
while(pOverlay)
{
m_pOverlayContainer->Add(pOverlay);
pOverlay->Release();
pOverlay = m_pSubtitleFileParser->Parse(pts);
}
m_lastPts = pts;
}
}
示例2: Remove
VecOverlaysIter CDVDOverlayContainer::Remove(VecOverlaysIter itOverlay)
{
VecOverlaysIter itNext;
CDVDOverlay* pOverlay = *itOverlay;
{
CSingleLock lock(*this);
itNext = m_overlays.erase(itOverlay);
}
pOverlay->Release();
return itNext;
}
示例3: SendMessage
void CDVDPlayerSubtitle::SendMessage(CDVDMsg* pMsg)
{
CSingleLock lock(m_section);
if (pMsg->IsType(CDVDMsg::DEMUXER_PACKET))
{
CDVDMsgDemuxerPacket* pMsgDemuxerPacket = (CDVDMsgDemuxerPacket*)pMsg;
DemuxPacket* pPacket = pMsgDemuxerPacket->GetPacket();
if (m_pOverlayCodec)
{
int result = m_pOverlayCodec->Decode(pPacket);
if(result == OC_OVERLAY)
{
CDVDOverlay* overlay;
while((overlay = m_pOverlayCodec->GetOverlay()) != NULL)
{
overlay->iGroupId = pPacket->iGroupId;
m_pOverlayContainer->Add(overlay);
overlay->Release();
}
}
}
else if (m_streaminfo.codec == CODEC_ID_DVD_SUBTITLE)
{
CDVDOverlaySpu* pSPUInfo = m_dvdspus.AddData(pPacket->pData, pPacket->iSize, pPacket->pts);
if (pSPUInfo)
{
CLog::Log(LOGDEBUG, "CDVDPlayer::ProcessSubData: Got complete SPU packet");
pSPUInfo->iGroupId = pPacket->iGroupId;
m_pOverlayContainer->Add(pSPUInfo);
pSPUInfo->Release();
}
}
}
else if( pMsg->IsType(CDVDMsg::SUBTITLE_CLUTCHANGE) )
{
CDVDMsgSubtitleClutChange* pData = (CDVDMsgSubtitleClutChange*)pMsg;
for (int i = 0; i < 16; i++)
{
BYTE* color = m_dvdspus.m_clut[i];
BYTE* t = (BYTE*)pData->m_data[i];
// pData->m_data[i] points to an uint32_t
// Byte swapping is needed between big and little endian systems
#ifdef WORDS_BIGENDIAN
color[0] = t[1]; // Y
color[1] = t[2]; // Cr
color[2] = t[3]; // Cb
#else
color[0] = t[2]; // Y
color[1] = t[0]; // Cr
color[2] = t[1]; // Cb
#endif
}
m_dvdspus.m_bHasClut = true;
}
else if( pMsg->IsType(CDVDMsg::GENERAL_FLUSH)
|| pMsg->IsType(CDVDMsg::GENERAL_RESET) )
{
m_dvdspus.Reset();
if (m_pSubtitleFileParser)
m_pSubtitleFileParser->Reset();
if (m_pOverlayCodec)
m_pOverlayCodec->Flush();
/* We must flush active overlays on flush or if we have a file
* parser since it will re-populate active items. */
if(pMsg->IsType(CDVDMsg::GENERAL_FLUSH) || m_pSubtitleFileParser)
m_pOverlayContainer->Clear();
m_lastPts = DVD_NOPTS_VALUE;
}
pMsg->Release();
}