From 1e9db41cb19d63847c73a613b45b45b96559cad0 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sun, 23 Oct 2011 10:10:25 +0000 Subject: Fix : MPEGSplitter, fix A/V sync issue on MPEG-TS with H.264 stream; some MPEG-TS with H.264 stream was unable to playback with MPC software decoder. Ticket #98; git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@3791 10f7b99b-c216-0410-bff0-8a66a9350fd8 --- src/filters/parser/MpegSplitter/MpegSplitter.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/filters/parser/MpegSplitter') diff --git a/src/filters/parser/MpegSplitter/MpegSplitter.cpp b/src/filters/parser/MpegSplitter/MpegSplitter.cpp index aa1ba6a3e..ad83bf734 100644 --- a/src/filters/parser/MpegSplitter/MpegSplitter.cpp +++ b/src/filters/parser/MpegSplitter/MpegSplitter.cpp @@ -1790,6 +1790,8 @@ HRESULT CMpegSplitterOutputPin::DeliverPacket(CAutoPtr p) m_p->RemoveAt(0, start - m_p->GetData()); } + REFERENCE_TIME rtStart = Packet::INVALID_TIME, rtStop = Packet::INVALID_TIME; + for(POSITION pos = m_pl.GetHeadPosition(); pos; m_pl.GetNext(pos)) { if(pos == m_pl.GetHeadPosition()) { continue; @@ -1802,7 +1804,17 @@ HRESULT CMpegSplitterOutputPin::DeliverPacket(CAutoPtr p) m_fHasAccessUnitDelimiters = true; } - if((pData[4]&0x1f) == 0x09 || !m_fHasAccessUnitDelimiters && pPacket->rtStart != Packet::INVALID_TIME) { + if((pData[4]&0x1f) == 0x09 || (!m_fHasAccessUnitDelimiters && pPacket->rtStart != Packet::INVALID_TIME)) { + if (pPacket->rtStart == Packet::INVALID_TIME && rtStart != Packet::INVALID_TIME) { + pPacket->rtStart = rtStart; + pPacket->rtStop = rtStop; + } +/* + if(pPacket->rtStart == Packet::INVALID_TIME) { + continue; + } +*/ + p = m_pl.RemoveHead(); while(pos != m_pl.GetHeadPosition()) { @@ -1815,6 +1827,10 @@ HRESULT CMpegSplitterOutputPin::DeliverPacket(CAutoPtr p) return hr; } } + if (rtStart == Packet::INVALID_TIME) { + rtStart = pPacket->rtStart; + rtStop = pPacket->rtStop; + } } return S_OK; -- cgit v1.2.3