Zhiyi Zhang : dsdmo: Add IMediaParamInfo stub interface.

Alexandre Julliard julliard at winehq.org
Wed Jul 20 15:55:32 CDT 2022


Module: wine
Branch: master
Commit: a0cac2e0d83828a13ea2fcc3860d9ff628cce586
URL:    https://gitlab.winehq.org/wine/wine/-/commit/a0cac2e0d83828a13ea2fcc3860d9ff628cce586

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Tue Jul 19 21:04:25 2022 +0800

dsdmo: Add IMediaParamInfo stub interface.

Fix Chuzzle Deluxe crash at start.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>

---

 dlls/dsdmo/main.c        | 77 ++++++++++++++++++++++++++++++++++++++++++++++++
 dlls/dsdmo/tests/dsdmo.c |  7 -----
 2 files changed, 77 insertions(+), 7 deletions(-)

diff --git a/dlls/dsdmo/main.c b/dlls/dsdmo/main.c
index fe7cf1115a7..720d37350fe 100644
--- a/dlls/dsdmo/main.c
+++ b/dlls/dsdmo/main.c
@@ -22,6 +22,7 @@
 #include "mmsystem.h"
 #include "uuids.h"
 #include "initguid.h"
+#include "medparam.h"
 #include "dsound.h"
 #include "rpcproxy.h"
 
@@ -33,6 +34,7 @@ struct effect
 {
     IMediaObject IMediaObject_iface;
     IMediaObjectInPlace IMediaObjectInPlace_iface;
+    IMediaParamInfo IMediaParamInfo_iface;
     IUnknown IUnknown_inner;
     IUnknown *outer_unk;
     LONG refcount;
@@ -66,6 +68,8 @@ static HRESULT WINAPI effect_inner_QueryInterface(IUnknown *iface, REFIID iid, v
         *out = &effect->IMediaObject_iface;
     else if (IsEqualGUID(iid, &IID_IMediaObjectInPlace))
         *out = &effect->IMediaObjectInPlace_iface;
+    else if (IsEqualGUID(iid, &IID_IMediaParamInfo))
+        *out = &effect->IMediaParamInfo_iface;
     else if (!(*out = effect->ops->query_interface(effect, iid)))
     {
         WARN("%s not implemented; returning E_NOINTERFACE.\n", debugstr_guid(iid));
@@ -418,6 +422,78 @@ static const IMediaObjectInPlaceVtbl effect_inplace_vtbl =
     effect_inplace_GetLatency,
 };
 
+static struct effect *impl_from_IMediaParamInfo(IMediaParamInfo *iface)
+{
+    return CONTAINING_RECORD(iface, struct effect, IMediaParamInfo_iface);
+}
+
+static HRESULT WINAPI effect_media_param_info_QueryInterface(IMediaParamInfo *iface, REFIID iid, void **out)
+{
+    struct effect *effect = impl_from_IMediaParamInfo(iface);
+    return IUnknown_QueryInterface(effect->outer_unk, iid, out);
+}
+
+static ULONG WINAPI effect_media_param_info_AddRef(IMediaParamInfo *iface)
+{
+    struct effect *effect = impl_from_IMediaParamInfo(iface);
+    return IUnknown_AddRef(effect->outer_unk);
+}
+
+static ULONG WINAPI effect_media_param_info_Release(IMediaParamInfo *iface)
+{
+    struct effect *effect = impl_from_IMediaParamInfo(iface);
+    return IUnknown_Release(effect->outer_unk);
+}
+
+static HRESULT WINAPI effect_media_param_info_GetParamCount(IMediaParamInfo *iface, DWORD *count)
+{
+    FIXME("iface %p, count %p, stub!\n", iface, count);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI effect_media_param_info_GetParamInfo(IMediaParamInfo *iface, DWORD index, MP_PARAMINFO *info)
+{
+    FIXME("iface %p, index %lu, info %p, stub!\n", iface, index, info);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI effect_media_param_info_GetParamText(IMediaParamInfo *iface, DWORD index, WCHAR **text)
+{
+    FIXME("iface %p, index %lu, text %p, stub!\n", iface, index, text);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI effect_media_param_info_GetNumTimeFormats(IMediaParamInfo *iface, DWORD *count)
+{
+    FIXME("iface %p, count %p, stub!\n", iface, count);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI effect_media_param_info_GetSupportedTimeFormat(IMediaParamInfo *iface, DWORD index, GUID *guid)
+{
+    FIXME("iface %p, index %lu, guid %p, stub!\n", iface, index, guid);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI effect_media_param_info_GetCurrentTimeFormat(IMediaParamInfo *iface, GUID *guid, MP_TIMEDATA *time_data)
+{
+    FIXME("iface %p, guid %p, time_data %p, stub!\n", iface, guid, time_data);
+    return E_NOTIMPL;
+}
+
+static const IMediaParamInfoVtbl effect_media_param_info_vtbl =
+{
+    effect_media_param_info_QueryInterface,
+    effect_media_param_info_AddRef,
+    effect_media_param_info_Release,
+    effect_media_param_info_GetParamCount,
+    effect_media_param_info_GetParamInfo,
+    effect_media_param_info_GetParamText,
+    effect_media_param_info_GetNumTimeFormats,
+    effect_media_param_info_GetSupportedTimeFormat,
+    effect_media_param_info_GetCurrentTimeFormat,
+};
+
 static void effect_init(struct effect *effect, IUnknown *outer, const struct effect_ops *ops)
 {
     effect->outer_unk = outer ? outer : &effect->IUnknown_inner;
@@ -425,6 +501,7 @@ static void effect_init(struct effect *effect, IUnknown *outer, const struct eff
     effect->IUnknown_inner.lpVtbl = &effect_inner_vtbl;
     effect->IMediaObject_iface.lpVtbl = &effect_vtbl;
     effect->IMediaObjectInPlace_iface.lpVtbl = &effect_inplace_vtbl;
+    effect->IMediaParamInfo_iface.lpVtbl = &effect_media_param_info_vtbl;
 
     InitializeCriticalSection(&effect->cs);
     effect->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": effect.cs");
diff --git a/dlls/dsdmo/tests/dsdmo.c b/dlls/dsdmo/tests/dsdmo.c
index 4947b67c751..90b8e61f5e7 100644
--- a/dlls/dsdmo/tests/dsdmo.c
+++ b/dlls/dsdmo/tests/dsdmo.c
@@ -151,14 +151,7 @@ static void test_interfaces(const GUID *clsid, const GUID *iid)
         winetest_push_context("GUID %s", debugstr_guid(guids[i]));
 
         hr = IUnknown_QueryInterface(unk, guids[i], (void **)&unk2);
-        todo_wine_if(guids[i] == &IID_IMediaParamInfo)
         ok(hr == S_OK, "Got hr %#lx.\n", hr);
-        if (hr != S_OK)
-        {
-            winetest_pop_context();
-            continue;
-        }
-
         hr = IUnknown_QueryInterface(unk2, iid, (void **)&unk3);
         ok(hr == S_OK, "Got hr %#lx.\n", hr);
         ok(unk3 == unk, "Interface pointers didn't match.\n");




More information about the wine-cvs mailing list