Module: wine Branch: master Commit: 819643ada87a4b033bfd93f84894d5a15b35eb70 URL: http://source.winehq.org/git/wine.git/?a=commit;h=819643ada87a4b033bfd93f848...
Author: Erich Hoover ehoover@mines.edu Date: Sat May 14 11:14:45 2011 -0600
quartz: Return IMediaSeeking interface for Parser PullPin.
---
dlls/quartz/parser.c | 27 ++++++++++++++++++++++++++- 1 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c index b5a305c..784c528 100644 --- a/dlls/quartz/parser.c +++ b/dlls/quartz/parser.c @@ -702,6 +702,31 @@ static const IPinVtbl Parser_OutputPin_Vtbl = BasePinImpl_NewSegment };
+static HRESULT WINAPI Parser_PullPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv) +{ + PullPin *This = (PullPin *)iface; + + TRACE("(%p/%p)->(%s, %p)\n", This, iface, qzdebugstr_guid(riid), ppv); + + *ppv = NULL; + + /* + * It is important to capture the request for the IMediaSeeking interface before it is passed + * on to PullPin_QueryInterface, this is necessary since the Parser filter does not support + * querying IMediaSeeking + */ + if (IsEqualIID(riid, &IID_IMediaSeeking)) + *ppv = &((ParserImpl*)This->pin.pinInfo.pFilter)->sourceSeeking; + + if (*ppv) + { + IUnknown_AddRef((IUnknown *)(*ppv)); + return S_OK; + } + + return PullPin_QueryInterface(iface, riid, ppv); +} + static HRESULT WINAPI Parser_PullPin_Disconnect(IPin * iface) { HRESULT hr; @@ -770,7 +795,7 @@ static HRESULT WINAPI Parser_PullPin_EnumMediaTypes(IPin *iface, IEnumMediaTypes
static const IPinVtbl Parser_InputPin_Vtbl = { - PullPin_QueryInterface, + Parser_PullPin_QueryInterface, BasePinImpl_AddRef, PullPin_Release, BaseInputPinImpl_Connect,