View Single Post
Old 2nd September 2010, 11:12   #223  |  Link
Underground78
Registered User
 
Underground78's Avatar
 
Join Date: Oct 2004
Location: France
Posts: 567
Quote:
Originally Posted by Underground78 View Post
Hi,

I have a file which does not start with LAVFSplitter and I have been try to understand what was going on with the debugging. In fact the first image of the video is displayed then it freezes but the duration counter keeps going.

If I look at stack traces which concern LAVFDShowSplitter I see :

- for CLAVFOutPut Pin Video thread :
Code:
LAVFDShowSplitter.ax!CBaseOutputPin::GetDeliveryBuffer(IMediaSample * * ppSample, __int64 * pStartTime, __int64 * pEndTime, unsigned long dwFlags)  Ligne 2654 + 0x2c octets	C++
02de6c50()	
LAVFDShowSplitter.ax!CLAVFOutputPin::ThreadProc()  Ligne 275 + 0x23 octets	C++
LAVFDShowSplitter.ax!CAMThread::InitialThreadProc(void * pv)  Ligne 123 + 0xe octets	C++
- for CLAVFOutPut Pin Audio thread :
Code:
LAVFDShowSplitter.ax!CBaseOutputPin::GetDeliveryBuffer(IMediaSample * * ppSample, __int64 * pStartTime, __int64 * pEndTime, unsigned long dwFlags)  Ligne 2654 + 0x2c octets	C++
02de7050()	
LAVFDShowSplitter.ax!CLAVFOutputPin::ThreadProc()  Ligne 275 + 0x23 octets	C++
LAVFDShowSplitter.ax!CAMThread::InitialThreadProc(void * pv)  Ligne 123 + 0xe octets	C++
- demuxer thread seems to sleep(1) because the queue is full.

In fact both Output Pin threads are waiting for "m_pAllocator->GetBuffer(ppSample,pStartTime,pEndTime,dwFlags);" to return but it never does ...

Does somebody have an idea about what could cause this ?

Thanks in advance !
I am still trying to understand this so I compiled a debug version of MPC-HC and here what I got :

- CLAVFOutPut Pin Video thread :
Code:
mpc-hc.exe!CBaseOutputPin::GetDeliveryBuffer(IMediaSample * * ppSample, __int64 * pStartTime, __int64 * pEndTime, unsigned long dwFlags)  Ligne 2654 + 0x2c octets	C++
mpc-hc.exe!CBaseVideoFilter::GetDeliveryBuffer(int w, int h, IMediaSample * * ppOut)  Ligne 122 + 0x25 octets	C++
mpc-hc.exe!CMpeg2DecFilter::DeliverFast()  Ligne 593 + 0x25 octets	C++
mpc-hc.exe!CMpeg2DecFilter::Transform(IMediaSample * pIn)  Ligne 536 + 0x8 octets	C++
mpc-hc.exe!CBaseVideoFilter::Receive(IMediaSample * pIn)  Ligne 107 + 0x13 octets	C++
mpc-hc.exe!CTransformInputPin::Receive(IMediaSample * pSample)  Ligne 763 + 0x19 octets	C++
mpc-hc.exe!CDeCSSInputPin::Receive(IMediaSample * pSample)  Ligne 90 + 0x13 octets	C++
LAVFDShowSplitter.ax!CBaseOutputPin::Deliver(IMediaSample * pSample)  Ligne 2695 + 0x20 octets	C++
LAVFDShowSplitter.ax!CLAVFOutputPin::DeliverPacket(Packet * pPacket)  Ligne 345 + 0x13 octets	C++
LAVFDShowSplitter.ax!CLAVFOutputPin::ThreadProc()  Ligne 275 + 0x23 octets	C++
LAVFDShowSplitter.ax!CAMThread::InitialThreadProc(void * pv)  Ligne 123 + 0xe octets	C++
- CLAVFOutPut Pin Audio thread :
Code:
mpc-hc.exe!CBaseOutputPin::GetDeliveryBuffer(IMediaSample * * ppSample, __int64 * pStartTime, __int64 * pEndTime, unsigned long dwFlags)  Ligne 2654 + 0x2c octets	C++
mpc-hc.exe!CStreamSwitcherInputPin::InitializeOutputSample(IMediaSample * pInSample, IMediaSample * * ppOutSample)  Ligne 384 + 0x7f octets	C++
mpc-hc.exe!CStreamSwitcherInputPin::Receive(IMediaSample * pSample)  Ligne 750 + 0x1e octets	C++
mpc-hc.exe!CBaseOutputPin::Deliver(IMediaSample * pSample)  Ligne 2695 + 0x20 octets	C++
mpc-hc.exe!CMpaDecFilter::Deliver(ATL::CAtlArray<float,ATL::CElementTraits<float> > & pBuff, unsigned long nSamplesPerSec, unsigned short nChannels, unsigned long dwChannelMask)  Ligne 1730 + 0x29 octets	C++
mpc-hc.exe!CMpaDecFilter::ProcessMPA()  Ligne 1597 + 0x23 octets	C++
mpc-hc.exe!CMpaDecFilter::Receive(IMediaSample * pIn)  Ligne 494 + 0x8 octets	C++
mpc-hc.exe!CTransformInputPin::Receive(IMediaSample * pSample)  Ligne 763 + 0x19 octets	C++
mpc-hc.exe!CDeCSSInputPin::Receive(IMediaSample * pSample)  Ligne 90 + 0x13 octets	C++
LAVFDShowSplitter.ax!CBaseOutputPin::Deliver(IMediaSample * pSample)  Ligne 2695 + 0x20 octets	C++
LAVFDShowSplitter.ax!CLAVFOutputPin::DeliverPacket(Packet * pPacket)  Ligne 345 + 0x13 octets	C++
LAVFDShowSplitter.ax!CLAVFOutputPin::ThreadProc()  Ligne 275 + 0x23 octets	C++
LAVFDShowSplitter.ax!CAMThread::InitialThreadProc(void * pv)  Ligne 123 + 0xe octets	C++
It seems that the problem happens after the samples have been decoded but I don't know how to find what happens exactly ...
Underground78 is offline   Reply With Quote