diff options
author | Aleksoid <aleksoid@users.sourceforge.net> | 2012-03-29 04:02:42 +0400 |
---|---|---|
committer | Aleksoid <aleksoid@users.sourceforge.net> | 2012-03-29 04:02:42 +0400 |
commit | 8c5e000cb11ad04b1ac6d1ac8f26a3847f376430 (patch) | |
tree | 30ee33c076981fa0159985700ed178dc26c53a9e /src/filters/parser/MP4Splitter/MP4Splitter.cpp | |
parent | 302828391123475871333b3f0d51804bf09653d8 (diff) |
Fix : MP4Splitter - hang pictures/slow response after the seeking : ticket #1682, #971, #90 ; sometimes deadloop at the end of file : ticket #1987;
Change : MPCVideoDec/ffmpeg - remove some custom code;
Change : Adjust drop-down list width for long shaders name; ticket #2108;
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@4205 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'src/filters/parser/MP4Splitter/MP4Splitter.cpp')
-rw-r--r-- | src/filters/parser/MP4Splitter/MP4Splitter.cpp | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/filters/parser/MP4Splitter/MP4Splitter.cpp b/src/filters/parser/MP4Splitter/MP4Splitter.cpp index 6bf6f1cf2..6817d8230 100644 --- a/src/filters/parser/MP4Splitter/MP4Splitter.cpp +++ b/src/filters/parser/MP4Splitter/MP4Splitter.cpp @@ -1074,7 +1074,7 @@ HRESULT CMP4SplitterFilter::CreateOutputs(IAsyncReader* pAsyncReader) }
}
- CAutoPtr<CBaseSplitterOutputPin> pPinOut(DNew CBaseSplitterOutputPin(mts, name, this, this, &hr));
+ CAutoPtr<CBaseSplitterOutputPin> pPinOut(DNew CMP4SplitterOutputPin(mts, name, this, this, &hr));
if (!TrackName.IsEmpty()) {
pPinOut->SetProperty(L"NAME", TrackName);
@@ -1097,7 +1097,7 @@ HRESULT CMP4SplitterFilter::CreateOutputs(IAsyncReader* pAsyncReader) id ^= 0x80402010; // FIXME: until fixing, let's hope there won't be another track like this...
- CAutoPtr<CBaseSplitterOutputPin> pPinOut(DNew CBaseSplitterOutputPin(mts, name + postfix, this, this, &hr));
+ CAutoPtr<CBaseSplitterOutputPin> pPinOut(DNew CMP4SplitterOutputPin(mts, name + postfix, this, this, &hr));
if (!TrackName.IsEmpty()) {
pPinOut->SetProperty(L"NAME", TrackName + postfix);
@@ -1249,7 +1249,7 @@ void CMP4SplitterFilter::DemuxSeek(REFERENCE_TIME rt) AP4_Track* track = movie->GetTrack(pPair->m_key);
if (AP4_FAILED(track->GetSampleIndexForRefTime(rt, pPair->m_value.index))) {
- pPair->m_value.index = 0;
+ continue;
}
AP4_Sample sample;
@@ -1930,3 +1930,34 @@ CMPEG4VideoSourceFilter::CMPEG4VideoSourceFilter(LPUNKNOWN pUnk, HRESULT* phr) m_clsid = __uuidof(this);
m_pInput.Free();
}
+
+//
+// CMP4SplitterOutputPin
+//
+
+CMP4SplitterOutputPin::CMP4SplitterOutputPin(CAtlArray<CMediaType>& mts, LPCWSTR pName, CBaseFilter* pFilter, CCritSec* pLock, HRESULT* phr)
+ : CBaseSplitterOutputPin(mts, pName, pFilter, pLock, phr)
+{
+}
+
+CMP4SplitterOutputPin::~CMP4SplitterOutputPin()
+{
+}
+
+HRESULT CMP4SplitterOutputPin::DeliverNewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
+{
+ CAutoLock cAutoLock(this);
+ return __super::DeliverNewSegment(tStart, tStop, dRate);
+}
+
+HRESULT CMP4SplitterOutputPin::DeliverEndFlush()
+{
+ CAutoLock cAutoLock(this);
+ return __super::DeliverEndFlush();
+}
+
+HRESULT CMP4SplitterOutputPin::DeliverPacket(CAutoPtr<Packet> p)
+{
+ CAutoLock cAutoLock(this);
+ return __super::DeliverPacket(p);
+}
|