Hi, what about if ppPin is NULL? I think that this patch needs test cases to prove that it is correct? David 2010/8/6 Anton Khirnov <wyskas(a)gmail.com>
--- dlls/quartz/filesource.c | 32 ++++++++++++++++++++++++++++++-- 1 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c index 110415d..00a91c8 100644 --- a/dlls/quartz/filesource.c +++ b/dlls/quartz/filesource.c @@ -548,9 +548,37 @@ static HRESULT WINAPI AsyncReader_EnumPins(IBaseFilter * iface, IEnumPins **ppEn
static HRESULT WINAPI AsyncReader_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin) { - FIXME("(%s, %p)\n", debugstr_w(Id), ppPin); + IEnumPins *enumpins; + HRESULT hr;
- return E_NOTIMPL; + hr = AsyncReader_EnumPins(iface, &enumpins); + if (FAILED(hr)) + return S_FALSE; + + while (hr == S_OK) { + IPin *pin; + LPWSTR pinname; + + hr = IEnumPins_Next(enumpins, 1, &pin, NULL); + if (FAILED(hr)) + break; + + hr = IPin_QueryId(pin, &pinname); + if (SUCCEEDED(hr)) { + if (!strcmpW(pinname, Id)) { + *ppPin = pin; + IPin_AddRef(*ppPin); + CoTaskMemFree(pinname); + break; + } + CoTaskMemFree(pinname); + } + } + + IEnumPins_Release(enumpins); + if (SUCCEEDED(hr)) + return S_OK; + return S_FALSE; }
static HRESULT WINAPI AsyncReader_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo) -- 1.7.1