Hi,
what about if ppPin is NULL?
I think that this patch needs test cases to prove that it is correct?
David
---
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