void CClip::Reset(REFERENCE_TIME totalStreamOffset) { CAutoLock vectorVLock(&m_sectionVectorVideo); CAutoLock vectorALock(&m_sectionVectorAudio); LogDebug("CClip:: Clip Reset (%d,%d) stream Offset %I64d", nPlaylist, nClip, totalStreamOffset); FlushAudio(); FlushVideo(); lastVideoPosition = playlistFirstPacketTime; lastAudioPosition = playlistFirstPacketTime; if (clipPlaylistOffset != totalStreamOffset) { clipReset = true; clipPlaylistOffset = totalStreamOffset; } audioPlaybackPosition = playlistFirstPacketTime; videoPlaybackPosition = playlistFirstPacketTime; m_rtClipStartingOffset = 0LL; earliestPacketAccepted = INT64_MAX; superceeded=0; sparseVideo = false; if (m_pSparseVideoPacket) { delete m_pSparseVideoPacket; m_pSparseVideoPacket = NULL; } firstAudio=true; firstVideo=true; firstPacketAccepted = false; firstPacketReturned = false; }
CClip::~CClip(void) { CAutoLock vectorVLock(&m_sectionVectorVideo); CAutoLock vectorALock(&m_sectionVectorAudio); FlushAudio(); FlushVideo(); DeleteMediaType(m_videoPmt); if (m_pSparseVideoPacket) delete m_pSparseVideoPacket; m_pSparseVideoPacket = NULL; }
void CDeMultiplexer::Flush(bool bClearclips) { LogDebug("demux:flushing"); SetHoldAudio(true); SetHoldVideo(true); FlushPESBuffers(true, false); if (bClearclips) m_playlistManager->ClearClips(); FlushAudio(); FlushVideo(); SetHoldAudio(false); SetHoldVideo(false); }