[PATCH v3 03/13] qedit: Implement MediaDet_get_Filter.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Fri Apr 17 11:09:03 CDT 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/qedit/mediadet.c | 15 ++++++++++--
dlls/qedit/tests/mediadet.c | 48 ++++++++++++++++++++++++++++++++++++-
2 files changed, 60 insertions(+), 3 deletions(-)
diff --git a/dlls/qedit/mediadet.c b/dlls/qedit/mediadet.c
index 1883a12..c2cc33e 100644
--- a/dlls/qedit/mediadet.c
+++ b/dlls/qedit/mediadet.c
@@ -147,8 +147,19 @@ static ULONG WINAPI MediaDet_Release(IMediaDet *iface)
static HRESULT WINAPI MediaDet_get_Filter(IMediaDet* iface, IUnknown **pVal)
{
MediaDetImpl *This = impl_from_IMediaDet(iface);
- FIXME("(%p)->(%p): not implemented!\n", This, pVal);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, pVal);
+
+ if (!pVal)
+ return E_POINTER;
+
+ *pVal = (IUnknown*)This->source;
+ if (*pVal)
+ IUnknown_AddRef(*pVal);
+ else
+ return S_FALSE;
+
+ return S_OK;
}
static HRESULT WINAPI MediaDet_put_Filter(IMediaDet* iface, IUnknown *newVal)
diff --git a/dlls/qedit/tests/mediadet.c b/dlls/qedit/tests/mediadet.c
index 596171b..ccf7f0b 100644
--- a/dlls/qedit/tests/mediadet.c
+++ b/dlls/qedit/tests/mediadet.c
@@ -188,13 +188,19 @@ static BOOL init_tests(void)
static void test_mediadet(void)
{
HRESULT hr;
+ FILTER_INFO filter_info;
+ IEnumMediaTypes *type;
IMediaDet *pM = NULL;
BSTR filename = NULL;
+ IBaseFilter *filter;
+ IEnumPins *pins;
LONG nstrms = 0;
LONG strm;
GUID guid;
BSTR bstr;
- AM_MEDIA_TYPE mt;
+ IPin *pin;
+ AM_MEDIA_TYPE mt, *pmt;
+ IUnknown *unk;
double fps;
int flags;
int i;
@@ -256,6 +262,14 @@ static void test_mediadet(void)
hr = IMediaDet_get_StreamTypeB(pM, NULL);
ok(hr == E_INVALIDARG, "IMediaDet_get_StreamTypeB failed: %08x\n", hr);
+ hr = IMediaDet_get_Filter(pM, NULL);
+ ok(hr == E_POINTER, "IMediaDet_get_Filter failed: %08x\n", hr);
+
+ unk = (IUnknown*)0xdeadbeef;
+ hr = IMediaDet_get_Filter(pM, &unk);
+ ok(hr == S_FALSE, "IMediaDet_get_Filter failed: %08x\n", hr);
+ ok(unk == NULL, "Wrong filter %p\n", unk);
+
filename = SysAllocString(test_avi_filename);
hr = IMediaDet_put_Filename(pM, filename);
ok(hr == S_OK, "IMediaDet_put_Filename failed: %08x\n", hr);
@@ -427,6 +441,38 @@ static void test_mediadet(void)
ok(hr == S_OK, "IMediaDet_get_CurrentStream failed: %08x\n", hr);
ok(strm == 1, "IMediaDet_get_CurrentStream: strm is %i\n", strm);
+ hr = IMediaDet_get_Filter(pM, &unk);
+ ok(hr == S_OK, "IMediaDet_get_Filter failed: %08x\n", hr);
+ ok(unk != NULL, "NULL filter\n");
+ hr = IUnknown_QueryInterface(unk, &IID_IBaseFilter, (void**)&filter);
+ IUnknown_Release(unk);
+ ok(hr == S_OK, "Could not get IBaseFilter interface: %08x\n", hr);
+
+ hr = IBaseFilter_EnumPins(filter, &pins);
+ ok(hr == S_OK, "IBaseFilter_EnumPins failed: %08x\n", hr);
+ hr = IEnumPins_Next(pins, 1, &pin, NULL);
+ ok(hr == S_OK, "IEnumPins_Next failed: %08x\n", hr);
+ hr = IPin_EnumMediaTypes(pin, &type);
+ ok(hr == S_OK, "IPin_EnumMediaTypes failed: %08x\n", hr);
+ hr = IEnumMediaTypes_Next(type, 1, &pmt, NULL);
+ ok(hr == S_OK, "IEnumMediaTypes_Next failed: %08x\n", hr);
+ ok(IsEqualGUID(&pmt->majortype, &MEDIATYPE_Stream), "Wrong GUID %s\n", wine_dbgstr_guid(&pmt->majortype));
+ IEnumMediaTypes_Release(type);
+ CoTaskMemFree(pmt->pbFormat);
+ CoTaskMemFree(pmt);
+ IPin_Release(pin);
+
+ hr = IEnumPins_Next(pins, 1, &pin, NULL);
+ ok(hr == S_FALSE, "IEnumPins_Next failed: %08x\n", hr);
+ IEnumPins_Release(pins);
+
+ hr = IBaseFilter_QueryFilterInfo(filter, &filter_info);
+ ok(hr == S_OK, "IBaseFilter_QueryFilterInfo failed: %08x\n", hr);
+todo_wine
+ ok(!wcscmp(filter_info.achName, L"Source"), "Wrong filter name: %s\n", wine_dbgstr_w(filter_info.achName));
+ IFilterGraph_Release(filter_info.pGraph);
+ IBaseFilter_Release(filter);
+
hr = IMediaDet_Release(pM);
ok(hr == 0, "IMediaDet_Release returned: %x\n", hr);
--
2.21.0
More information about the wine-devel
mailing list