Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2013-04-13 10:34:53 +0400
committerHendrik Leppkes <h.leppkes@gmail.com>2013-04-13 10:34:53 +0400
commite8e062dde77ee91dc7b5a7f20557c5bf3f38c385 (patch)
tree5a9d38cb2e1cb05f5ebfad07b510dc5d684a9339
parent826f5da04f7d489d84571ffa532a2286edb2d8b4 (diff)
Fix media type handling when switching video streams
-rw-r--r--demuxer/LAVSplitter/OutputPin.cpp11
-rw-r--r--demuxer/LAVSplitter/OutputPin.h3
2 files changed, 13 insertions, 1 deletions
diff --git a/demuxer/LAVSplitter/OutputPin.cpp b/demuxer/LAVSplitter/OutputPin.cpp
index 39a4a4c9..9a411385 100644
--- a/demuxer/LAVSplitter/OutputPin.cpp
+++ b/demuxer/LAVSplitter/OutputPin.cpp
@@ -253,6 +253,12 @@ STDMETHODIMP CLAVOutputPin::Connect(IPin* pReceivePin, const AM_MEDIA_TYPE* pmt)
return hr;
}
+HRESULT CLAVOutputPin::CompleteConnect(IPin *pReceivePin)
+{
+ m_StreamMT = m_mt;
+ return __super::CompleteConnect(pReceivePin);
+}
+
HRESULT CLAVOutputPin::DeliverBeginFlush()
{
DbgLog((LOG_TRACE, 20, L"::DeliverBeginFlush on %s Pin", CBaseDemuxer::CStreamList::ToStringW(m_pinType)));
@@ -347,11 +353,12 @@ HRESULT CLAVOutputPin::QueuePacket(Packet *pPacket)
if(m_newMT && pPacket) {
DbgLog((LOG_TRACE, 10, L"::QueuePacket() - Found new Media Type"));
pPacket->pmt = CreateMediaType(m_newMT);
+ SetStreamMediaType(m_newMT);
SAFE_DELETE(m_newMT);
}
}
- m_Parser.Parse(m_mt.subtype, pPacket);
+ m_Parser.Parse(m_StreamMT.subtype, pPacket);
return m_hrDeliver;
}
@@ -485,6 +492,8 @@ HRESULT CLAVOutputPin::DeliverPacket(Packet *pPacket)
m_mts.clear();
m_mts.push_back(pmt);
pPacket->pmt = NULL;
+
+ SetMediaType(&pmt);
}
bool fTimeValid = pPacket->rtStart != Packet::INVALID_TIME;
diff --git a/demuxer/LAVSplitter/OutputPin.h b/demuxer/LAVSplitter/OutputPin.h
index 1e7c6ff4..2a483c8c 100644
--- a/demuxer/LAVSplitter/OutputPin.h
+++ b/demuxer/LAVSplitter/OutputPin.h
@@ -57,6 +57,7 @@ public:
HRESULT Inactive();
STDMETHODIMP Connect(IPin * pReceivePin, const AM_MEDIA_TYPE *pmt);
+ HRESULT CompleteConnect(IPin *pReceivePin);
// IMediaSeeking
STDMETHODIMP GetCapabilities(DWORD* pCapabilities);
@@ -94,6 +95,7 @@ public:
void SetNewMediaTypes(std::vector<CMediaType> pmts) { CAutoLock lock(&m_csMT); m_mts = pmts; SetQueueSizes(); }
void SendMediaType(CMediaType *mt) { CAutoLock lock(&m_csMT); m_newMT = mt;}
+ void SetStreamMediaType(CMediaType *mt) { CAutoLock lock(&m_csMT); m_StreamMT = *mt; }
CMediaType& GetActiveMediaType() { return m_mt; }
@@ -130,6 +132,7 @@ private:
CCritSec m_csMT;
std::vector<CMediaType> m_mts;
CPacketQueue m_queue;
+ CMediaType m_StreamMT;
std::string m_containerFormat;