Commit 5edd6610 authored by Christian Costa's avatar Christian Costa Committed by Alexandre Julliard

Fixed a bug that made the connection possible whereas no suitable

media type has be found during the negotiation. Fixed the release of the media sample in PullPin_Thread_Process. Added and fixed a lot of traces.
parent 10a02500
...@@ -267,7 +267,7 @@ HRESULT WINAPI IPinImpl_ConnectionMediaType(IPin * iface, AM_MEDIA_TYPE * pmt) ...@@ -267,7 +267,7 @@ HRESULT WINAPI IPinImpl_ConnectionMediaType(IPin * iface, AM_MEDIA_TYPE * pmt)
HRESULT hr; HRESULT hr;
ICOM_THIS(IPinImpl, iface); ICOM_THIS(IPinImpl, iface);
TRACE("(%p)\n", pmt); TRACE("(%p/%p)->(%p)\n", This, iface, pmt);
EnterCriticalSection(This->pCritSec); EnterCriticalSection(This->pCritSec);
{ {
...@@ -291,7 +291,7 @@ HRESULT WINAPI IPinImpl_QueryPinInfo(IPin * iface, PIN_INFO * pInfo) ...@@ -291,7 +291,7 @@ HRESULT WINAPI IPinImpl_QueryPinInfo(IPin * iface, PIN_INFO * pInfo)
{ {
ICOM_THIS(IPinImpl, iface); ICOM_THIS(IPinImpl, iface);
TRACE("(%p)\n", pInfo); TRACE("(%p/%p)->(%p)\n", This, iface, pInfo);
Copy_PinInfo(pInfo, &This->pinInfo); Copy_PinInfo(pInfo, &This->pinInfo);
...@@ -302,7 +302,7 @@ HRESULT WINAPI IPinImpl_QueryDirection(IPin * iface, PIN_DIRECTION * pPinDir) ...@@ -302,7 +302,7 @@ HRESULT WINAPI IPinImpl_QueryDirection(IPin * iface, PIN_DIRECTION * pPinDir)
{ {
ICOM_THIS(IPinImpl, iface); ICOM_THIS(IPinImpl, iface);
TRACE("(%p)\n", pPinDir); TRACE("(%p/%p)->(%p)\n", This, iface, pPinDir);
*pPinDir = This->pinInfo.dir; *pPinDir = This->pinInfo.dir;
...@@ -313,7 +313,7 @@ HRESULT WINAPI IPinImpl_QueryId(IPin * iface, LPWSTR * Id) ...@@ -313,7 +313,7 @@ HRESULT WINAPI IPinImpl_QueryId(IPin * iface, LPWSTR * Id)
{ {
ICOM_THIS(IPinImpl, iface); ICOM_THIS(IPinImpl, iface);
TRACE("(%p)\n", Id); TRACE("(%p/%p)->(%p)\n", This, iface, Id);
*Id = CoTaskMemAlloc((strlenW(This->pinInfo.achName) + 1) * sizeof(WCHAR)); *Id = CoTaskMemAlloc((strlenW(This->pinInfo.achName) + 1) * sizeof(WCHAR));
if (!Id) if (!Id)
...@@ -328,16 +328,17 @@ HRESULT WINAPI IPinImpl_QueryAccept(IPin * iface, const AM_MEDIA_TYPE * pmt) ...@@ -328,16 +328,17 @@ HRESULT WINAPI IPinImpl_QueryAccept(IPin * iface, const AM_MEDIA_TYPE * pmt)
{ {
ICOM_THIS(IPinImpl, iface); ICOM_THIS(IPinImpl, iface);
TRACE("(%p)\n", pmt); TRACE("(%p/%p)->(%p)\n", This, iface, pmt);
return (This->fnQueryAccept(This->pUserData, pmt) == S_OK ? S_OK : S_FALSE); return (This->fnQueryAccept(This->pUserData, pmt) == S_OK ? S_OK : S_FALSE);
} }
HRESULT WINAPI IPinImpl_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnum) HRESULT WINAPI IPinImpl_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnum)
{ {
ICOM_THIS(IPinImpl, iface);
ENUMMEDIADETAILS emd; ENUMMEDIADETAILS emd;
TRACE("(%p)\n", ppEnum); TRACE("(%p/%p)->(%p)\n", This, iface, ppEnum);
/* override this method to allow enumeration of your types */ /* override this method to allow enumeration of your types */
emd.cMediaTypes = 0; emd.cMediaTypes = 0;
...@@ -348,7 +349,9 @@ HRESULT WINAPI IPinImpl_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnum) ...@@ -348,7 +349,9 @@ HRESULT WINAPI IPinImpl_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnum)
HRESULT WINAPI IPinImpl_QueryInternalConnections(IPin * iface, IPin ** apPin, ULONG * cPin) HRESULT WINAPI IPinImpl_QueryInternalConnections(IPin * iface, IPin ** apPin, ULONG * cPin)
{ {
TRACE("(%p, %p)\n", apPin, cPin); ICOM_THIS(IPinImpl, iface);
TRACE("(%p/%p)->(%p, %p)\n", This, iface, apPin, cPin);
return E_NOTIMPL; /* to tell caller that all input pins connected to all output pins */ return E_NOTIMPL; /* to tell caller that all input pins connected to all output pins */
} }
...@@ -359,7 +362,7 @@ HRESULT WINAPI InputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv) ...@@ -359,7 +362,7 @@ HRESULT WINAPI InputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
{ {
ICOM_THIS(InputPin, iface); ICOM_THIS(InputPin, iface);
TRACE("(%s, %p)\n", qzdebugstr_guid(riid), ppv); TRACE("(%p)->(%s, %p)\n", iface, qzdebugstr_guid(riid), ppv);
*ppv = NULL; *ppv = NULL;
...@@ -530,7 +533,7 @@ HRESULT WINAPI MemInputPin_GetAllocator(IMemInputPin * iface, IMemAllocator ** p ...@@ -530,7 +533,7 @@ HRESULT WINAPI MemInputPin_GetAllocator(IMemInputPin * iface, IMemAllocator ** p
{ {
ICOM_THIS_From_IMemInputPin(InputPin, iface); ICOM_THIS_From_IMemInputPin(InputPin, iface);
TRACE("MemInputPin_GetAllocator()\n"); TRACE("(%p/%p)->(%p)\n", This, iface, ppAllocator);
*ppAllocator = This->pAllocator; *ppAllocator = This->pAllocator;
if (*ppAllocator) if (*ppAllocator)
...@@ -543,7 +546,7 @@ HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator * ...@@ -543,7 +546,7 @@ HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator *
{ {
ICOM_THIS_From_IMemInputPin(InputPin, iface); ICOM_THIS_From_IMemInputPin(InputPin, iface);
TRACE("()\n"); TRACE("(%p/%p)->(%p, %d)\n", This, iface, pAllocator, bReadOnly);
if (This->pAllocator) if (This->pAllocator)
IMemAllocator_Release(This->pAllocator); IMemAllocator_Release(This->pAllocator);
...@@ -556,7 +559,9 @@ HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator * ...@@ -556,7 +559,9 @@ HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator *
HRESULT WINAPI MemInputPin_GetAllocatorRequirements(IMemInputPin * iface, ALLOCATOR_PROPERTIES * pProps) HRESULT WINAPI MemInputPin_GetAllocatorRequirements(IMemInputPin * iface, ALLOCATOR_PROPERTIES * pProps)
{ {
TRACE("(%p)\n", pProps); ICOM_THIS_From_IMemInputPin(InputPin, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pProps);
/* override this method if you have any specific requirements */ /* override this method if you have any specific requirements */
...@@ -568,7 +573,7 @@ HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample) ...@@ -568,7 +573,7 @@ HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample)
ICOM_THIS_From_IMemInputPin(InputPin, iface); ICOM_THIS_From_IMemInputPin(InputPin, iface);
/* this trace commented out for performance reasons */ /* this trace commented out for performance reasons */
/* TRACE("(%p)\n", pSample);*/ /*TRACE("(%p/%p)->(%p)\n", This, iface, pSample);*/
return This->fnSampleProc(This->pin.pUserData, pSample); return This->fnSampleProc(This->pin.pUserData, pSample);
} }
...@@ -576,7 +581,9 @@ HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample) ...@@ -576,7 +581,9 @@ HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample)
HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample ** pSamples, long nSamples, long *nSamplesProcessed) HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample ** pSamples, long nSamples, long *nSamplesProcessed)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
TRACE("(%p, %ld, %p)\n", pSamples, nSamples, nSamplesProcessed); ICOM_THIS_From_IMemInputPin(InputPin, iface);
TRACE("(%p/%p)->(%p, %ld, %p)\n", This, iface, pSamples, nSamples, nSamplesProcessed);
for (*nSamplesProcessed = 0; *nSamplesProcessed < nSamples; (*nSamplesProcessed)++) for (*nSamplesProcessed = 0; *nSamplesProcessed < nSamples; (*nSamplesProcessed)++)
{ {
...@@ -590,7 +597,9 @@ HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample ** ...@@ -590,7 +597,9 @@ HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample **
HRESULT WINAPI MemInputPin_ReceiveCanBlock(IMemInputPin * iface) HRESULT WINAPI MemInputPin_ReceiveCanBlock(IMemInputPin * iface)
{ {
FIXME("()\n"); ICOM_THIS_From_IMemInputPin(InputPin, iface);
FIXME("(%p/%p)->()\n", This, iface);
/* FIXME: we should check whether any output pins will block */ /* FIXME: we should check whether any output pins will block */
...@@ -613,7 +622,9 @@ static const IMemInputPinVtbl MemInputPin_Vtbl = ...@@ -613,7 +622,9 @@ static const IMemInputPinVtbl MemInputPin_Vtbl =
HRESULT WINAPI OutputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv) HRESULT WINAPI OutputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
{ {
TRACE("(%s, %p)\n", qzdebugstr_guid(riid), ppv); ICOM_THIS(OutputPin, iface);
TRACE("(%p/%p)->(%s, %p)\n", This, iface, qzdebugstr_guid(riid), ppv);
*ppv = NULL; *ppv = NULL;
...@@ -637,7 +648,7 @@ ULONG WINAPI OutputPin_Release(IPin * iface) ...@@ -637,7 +648,7 @@ ULONG WINAPI OutputPin_Release(IPin * iface)
{ {
ICOM_THIS(OutputPin, iface); ICOM_THIS(OutputPin, iface);
TRACE("()\n"); TRACE("(%p/%p)->()\n", This, iface);
if (!InterlockedDecrement(&This->pin.refCount)) if (!InterlockedDecrement(&This->pin.refCount))
{ {
...@@ -653,7 +664,7 @@ HRESULT WINAPI OutputPin_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDI ...@@ -653,7 +664,7 @@ HRESULT WINAPI OutputPin_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDI
HRESULT hr; HRESULT hr;
ICOM_THIS(OutputPin, iface); ICOM_THIS(OutputPin, iface);
TRACE("(%p, %p)\n", pReceivePin, pmt); TRACE("(%p/%p)->(%p, %p)\n", This, iface, pReceivePin, pmt);
dump_AM_MEDIA_TYPE(pmt); dump_AM_MEDIA_TYPE(pmt);
/* If we try to connect to ourself, we will definitely deadlock. /* If we try to connect to ourself, we will definitely deadlock.
...@@ -696,6 +707,8 @@ HRESULT WINAPI OutputPin_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDI ...@@ -696,6 +707,8 @@ HRESULT WINAPI OutputPin_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDI
/* then try receiver filter's media types */ /* then try receiver filter's media types */
if (hr != S_OK && SUCCEEDED(hr = IPin_EnumMediaTypes(pReceivePin, &pEnumCandidates))) /* if we haven't already connected successfully */ if (hr != S_OK && SUCCEEDED(hr = IPin_EnumMediaTypes(pReceivePin, &pEnumCandidates))) /* if we haven't already connected successfully */
{ {
hr = VFW_E_NO_ACCEPTABLE_TYPES; /* Assume the worst, but set to S_OK if connected successfully */
while (S_OK == IEnumMediaTypes_Next(pEnumCandidates, 1, &pmtCandidate, NULL)) while (S_OK == IEnumMediaTypes_Next(pEnumCandidates, 1, &pmtCandidate, NULL))
{ {
if (( !pmt || CompareMediaTypes(pmt, pmtCandidate, TRUE) ) && if (( !pmt || CompareMediaTypes(pmt, pmtCandidate, TRUE) ) &&
...@@ -763,7 +776,7 @@ HRESULT WINAPI OutputPin_EndOfStream(IPin * iface) ...@@ -763,7 +776,7 @@ HRESULT WINAPI OutputPin_EndOfStream(IPin * iface)
HRESULT WINAPI OutputPin_BeginFlush(IPin * iface) HRESULT WINAPI OutputPin_BeginFlush(IPin * iface)
{ {
TRACE("()\n"); TRACE("(%p)->()\n", iface);
/* not supposed to do anything in an output pin */ /* not supposed to do anything in an output pin */
...@@ -772,7 +785,7 @@ HRESULT WINAPI OutputPin_BeginFlush(IPin * iface) ...@@ -772,7 +785,7 @@ HRESULT WINAPI OutputPin_BeginFlush(IPin * iface)
HRESULT WINAPI OutputPin_EndFlush(IPin * iface) HRESULT WINAPI OutputPin_EndFlush(IPin * iface)
{ {
TRACE("()\n"); TRACE("(%p)->()\n", iface);
/* not supposed to do anything in an output pin */ /* not supposed to do anything in an output pin */
...@@ -781,7 +794,7 @@ HRESULT WINAPI OutputPin_EndFlush(IPin * iface) ...@@ -781,7 +794,7 @@ HRESULT WINAPI OutputPin_EndFlush(IPin * iface)
HRESULT WINAPI OutputPin_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate) HRESULT WINAPI OutputPin_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
{ {
TRACE("(%lx%08lx, %lx%08lx, %e)\n", (ULONG)(tStart >> 32), (ULONG)tStart, (ULONG)(tStop >> 32), (ULONG)tStop, dRate); TRACE("(%p)->(%lx%08lx, %lx%08lx, %e)\n", iface, (ULONG)(tStart >> 32), (ULONG)tStart, (ULONG)(tStop >> 32), (ULONG)tStop, dRate);
/* not supposed to do anything in an output pin */ /* not supposed to do anything in an output pin */
...@@ -899,7 +912,7 @@ HRESULT OutputPin_CommitAllocator(OutputPin * This) ...@@ -899,7 +912,7 @@ HRESULT OutputPin_CommitAllocator(OutputPin * This)
{ {
HRESULT hr; HRESULT hr;
TRACE("()\n"); TRACE("(%p)->()\n", This);
EnterCriticalSection(This->pin.pCritSec); EnterCriticalSection(This->pin.pCritSec);
{ {
...@@ -934,7 +947,7 @@ HRESULT OutputPin_DeliverDisconnect(OutputPin * This) ...@@ -934,7 +947,7 @@ HRESULT OutputPin_DeliverDisconnect(OutputPin * This)
{ {
HRESULT hr; HRESULT hr;
TRACE("()\n"); TRACE("(%p)->()\n", This);
EnterCriticalSection(This->pin.pCritSec); EnterCriticalSection(This->pin.pCritSec);
{ {
...@@ -1026,7 +1039,7 @@ HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const ...@@ -1026,7 +1039,7 @@ HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const
HRESULT hr = S_OK; HRESULT hr = S_OK;
ICOM_THIS(PullPin, iface); ICOM_THIS(PullPin, iface);
TRACE("(%p, %p)\n", pReceivePin, pmt); TRACE("(%p/%p)->(%p, %p)\n", This, iface, pReceivePin, pmt);
dump_AM_MEDIA_TYPE(pmt); dump_AM_MEDIA_TYPE(pmt);
EnterCriticalSection(This->pin.pCritSec); EnterCriticalSection(This->pin.pCritSec);
...@@ -1082,7 +1095,9 @@ HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const ...@@ -1082,7 +1095,9 @@ HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const
HRESULT WINAPI PullPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv) HRESULT WINAPI PullPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
{ {
TRACE("(%s, %p)\n", qzdebugstr_guid(riid), ppv); ICOM_THIS(PullPin, iface);
TRACE("(%p/%p)->(%s, %p)\n", This, iface, qzdebugstr_guid(riid), ppv);
*ppv = NULL; *ppv = NULL;
...@@ -1106,7 +1121,7 @@ ULONG WINAPI PullPin_Release(IPin * iface) ...@@ -1106,7 +1121,7 @@ ULONG WINAPI PullPin_Release(IPin * iface)
{ {
ICOM_THIS(PullPin, iface); ICOM_THIS(PullPin, iface);
TRACE("()\n"); TRACE("(%p/%p)->()\n", This, iface);
if (!InterlockedDecrement(&This->pin.refCount)) if (!InterlockedDecrement(&This->pin.refCount))
{ {
...@@ -1173,7 +1188,7 @@ static void CALLBACK PullPin_Thread_Process(ULONG_PTR iface) ...@@ -1173,7 +1188,7 @@ static void CALLBACK PullPin_Thread_Process(ULONG_PTR iface)
ERR("Processing error: %lx\n", hr); ERR("Processing error: %lx\n", hr);
if (pSample) if (pSample)
IMemAllocator_ReleaseBuffer(This->pAlloc, pSample); IMediaSample_Release(pSample);
} }
} }
...@@ -1181,7 +1196,7 @@ static void CALLBACK PullPin_Thread_Stop(ULONG_PTR iface) ...@@ -1181,7 +1196,7 @@ static void CALLBACK PullPin_Thread_Stop(ULONG_PTR iface)
{ {
ICOM_THIS(PullPin, iface); ICOM_THIS(PullPin, iface);
TRACE("()\n"); TRACE("(%p/%p)->()\n", This, (LPVOID)iface);
EnterCriticalSection(This->pin.pCritSec); EnterCriticalSection(This->pin.pCritSec);
{ {
...@@ -1203,7 +1218,7 @@ HRESULT PullPin_InitProcessing(PullPin * This) ...@@ -1203,7 +1218,7 @@ HRESULT PullPin_InitProcessing(PullPin * This)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
TRACE("()\n"); TRACE("(%p)->()\n", This);
assert(!This->hThread); assert(!This->hThread);
...@@ -1233,6 +1248,7 @@ HRESULT PullPin_InitProcessing(PullPin * This) ...@@ -1233,6 +1248,7 @@ HRESULT PullPin_InitProcessing(PullPin * This)
HRESULT PullPin_StartProcessing(PullPin * This) HRESULT PullPin_StartProcessing(PullPin * This)
{ {
/* if we are connected */ /* if we are connected */
TRACE("(%p)->()\n", This);
if(This->pAlloc) if(This->pAlloc)
{ {
assert(This->hThread); assert(This->hThread);
...@@ -1281,7 +1297,7 @@ HRESULT PullPin_WaitForStateChange(PullPin * This, DWORD dwMilliseconds) ...@@ -1281,7 +1297,7 @@ HRESULT PullPin_WaitForStateChange(PullPin * This, DWORD dwMilliseconds)
HRESULT PullPin_Seek(PullPin * This, REFERENCE_TIME rtStart, REFERENCE_TIME rtStop) HRESULT PullPin_Seek(PullPin * This, REFERENCE_TIME rtStart, REFERENCE_TIME rtStop)
{ {
FIXME("(%lx%08lx, %lx%08lx)\n", (LONG)(rtStart >> 32), (LONG)rtStart, (LONG)(rtStop >> 32), (LONG)rtStop); FIXME("(%p)->(%lx%08lx, %lx%08lx)\n", This, (LONG)(rtStart >> 32), (LONG)rtStart, (LONG)(rtStop >> 32), (LONG)rtStop);
PullPin_BeginFlush((IPin *)This); PullPin_BeginFlush((IPin *)This);
/* FIXME: need critical section? */ /* FIXME: need critical section? */
...@@ -1294,25 +1310,25 @@ HRESULT PullPin_Seek(PullPin * This, REFERENCE_TIME rtStart, REFERENCE_TIME rtSt ...@@ -1294,25 +1310,25 @@ HRESULT PullPin_Seek(PullPin * This, REFERENCE_TIME rtStart, REFERENCE_TIME rtSt
HRESULT WINAPI PullPin_EndOfStream(IPin * iface) HRESULT WINAPI PullPin_EndOfStream(IPin * iface)
{ {
FIXME("()\n"); FIXME("(%p)->()\n", iface);
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT WINAPI PullPin_BeginFlush(IPin * iface) HRESULT WINAPI PullPin_BeginFlush(IPin * iface)
{ {
FIXME("()\n"); FIXME("(%p)->()\n", iface);
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT WINAPI PullPin_EndFlush(IPin * iface) HRESULT WINAPI PullPin_EndFlush(IPin * iface)
{ {
FIXME("()\n"); FIXME("(%p)->()\n", iface);
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT WINAPI PullPin_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate) HRESULT WINAPI PullPin_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
{ {
FIXME("()\n"); FIXME("(%p)->(%s, %s, %g)\n", iface, wine_dbgstr_longlong(tStart), wine_dbgstr_longlong(tStop), dRate);
return E_NOTIMPL; return E_NOTIMPL;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment