Zebediah Figura : qasf/dmowrapper: Add a stub IDMOWrapperFilter interface.

Alexandre Julliard julliard at winehq.org
Tue Feb 18 16:13:46 CST 2020


Module: wine
Branch: master
Commit: 90af4d2863ef89c5fce61ddd9d1fe08997e6fa37
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=90af4d2863ef89c5fce61ddd9d1fe08997e6fa37

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Mon Feb 17 17:30:58 2020 -0600

qasf/dmowrapper: Add a stub IDMOWrapperFilter interface.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=34622
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/qasf/dmowrapper.c       | 56 ++++++++++++++++++++++++++++++++++++++++++++
 dlls/qasf/tests/dmowrapper.c |  2 +-
 2 files changed, 57 insertions(+), 1 deletion(-)

diff --git a/dlls/qasf/dmowrapper.c b/dlls/qasf/dmowrapper.c
index c7c5d3df9e..d4547d4ba3 100644
--- a/dlls/qasf/dmowrapper.c
+++ b/dlls/qasf/dmowrapper.c
@@ -25,6 +25,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(qasf);
 struct dmo_wrapper
 {
     struct strmbase_filter filter;
+    IDMOWrapperFilter IDMOWrapperFilter_iface;
 };
 
 static inline struct dmo_wrapper *impl_from_strmbase_filter(struct strmbase_filter *iface)
@@ -32,6 +33,44 @@ static inline struct dmo_wrapper *impl_from_strmbase_filter(struct strmbase_filt
     return CONTAINING_RECORD(iface, struct dmo_wrapper, filter);
 }
 
+static inline struct dmo_wrapper *impl_from_IDMOWrapperFilter(IDMOWrapperFilter *iface)
+{
+    return CONTAINING_RECORD(iface, struct dmo_wrapper, IDMOWrapperFilter_iface);
+}
+
+static HRESULT WINAPI dmo_wrapper_filter_QueryInterface(IDMOWrapperFilter *iface, REFIID iid, void **out)
+{
+    struct dmo_wrapper *filter = impl_from_IDMOWrapperFilter(iface);
+    return IUnknown_QueryInterface(filter->filter.outer_unk, iid, out);
+}
+
+static ULONG WINAPI dmo_wrapper_filter_AddRef(IDMOWrapperFilter *iface)
+{
+    struct dmo_wrapper *filter = impl_from_IDMOWrapperFilter(iface);
+    return IUnknown_AddRef(filter->filter.outer_unk);
+}
+
+static ULONG WINAPI dmo_wrapper_filter_Release(IDMOWrapperFilter *iface)
+{
+    struct dmo_wrapper *filter = impl_from_IDMOWrapperFilter(iface);
+    return IUnknown_Release(filter->filter.outer_unk);
+}
+
+static HRESULT WINAPI dmo_wrapper_filter_Init(IDMOWrapperFilter *iface, REFCLSID clsid, REFCLSID category)
+{
+    FIXME("iface %p, clsid %s, category %s, stub!\n",
+            iface, wine_dbgstr_guid(clsid), wine_dbgstr_guid(category));
+    return E_NOTIMPL;
+}
+
+static const IDMOWrapperFilterVtbl dmo_wrapper_filter_vtbl =
+{
+    dmo_wrapper_filter_QueryInterface,
+    dmo_wrapper_filter_AddRef,
+    dmo_wrapper_filter_Release,
+    dmo_wrapper_filter_Init,
+};
+
 static struct strmbase_pin *dmo_wrapper_get_pin(struct strmbase_filter *iface, unsigned int index)
 {
     return NULL;
@@ -45,10 +84,25 @@ static void dmo_wrapper_destroy(struct strmbase_filter *iface)
     free(filter);
 }
 
+static HRESULT dmo_wrapper_query_interface(struct strmbase_filter *iface, REFIID iid, void **out)
+{
+    struct dmo_wrapper *filter = impl_from_strmbase_filter(iface);
+
+    if (IsEqualGUID(iid, &IID_IDMOWrapperFilter))
+    {
+        *out = &filter->IDMOWrapperFilter_iface;
+        IUnknown_AddRef((IUnknown *)*out);
+        return S_OK;
+    }
+
+    return E_NOINTERFACE;
+}
+
 static struct strmbase_filter_ops filter_ops =
 {
     .filter_get_pin = dmo_wrapper_get_pin,
     .filter_destroy = dmo_wrapper_destroy,
+    .filter_query_interface = dmo_wrapper_query_interface,
 };
 
 HRESULT dmo_wrapper_create(IUnknown *outer, IUnknown **out)
@@ -61,6 +115,8 @@ HRESULT dmo_wrapper_create(IUnknown *outer, IUnknown **out)
     /* Always pass NULL as the outer object; see test_aggregation(). */
     strmbase_filter_init(&object->filter, NULL, &CLSID_DMOWrapperFilter, &filter_ops);
 
+    object->IDMOWrapperFilter_iface.lpVtbl = &dmo_wrapper_filter_vtbl;
+
     TRACE("Created DMO wrapper %p.\n", object);
     *out = &object->filter.IUnknown_inner;
 
diff --git a/dlls/qasf/tests/dmowrapper.c b/dlls/qasf/tests/dmowrapper.c
index 397980b376..e061ca2417 100644
--- a/dlls/qasf/tests/dmowrapper.c
+++ b/dlls/qasf/tests/dmowrapper.c
@@ -62,7 +62,7 @@ static void test_interfaces(void)
     IBaseFilter *filter = create_dmo_wrapper();
 
     check_interface(filter, &IID_IBaseFilter, TRUE);
-    todo_wine check_interface(filter, &IID_IDMOWrapperFilter, TRUE);
+    check_interface(filter, &IID_IDMOWrapperFilter, TRUE);
     check_interface(filter, &IID_IMediaFilter, TRUE);
     check_interface(filter, &IID_IPersist, TRUE);
     todo_wine check_interface(filter, &IID_IPersistStream, TRUE);




More information about the wine-cvs mailing list