[PATCH 4/4] dmusic: Add a stub IDirectMusicThru to the midi ports
Michael Stefaniuc
mstefani at winehq.org
Sun Aug 19 17:01:37 CDT 2018
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/dmusic/port.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 50 insertions(+), 1 deletion(-)
diff --git a/dlls/dmusic/port.c b/dlls/dmusic/port.c
index 4df86649e9..9a18c8844d 100644
--- a/dlls/dmusic/port.c
+++ b/dlls/dmusic/port.c
@@ -906,6 +906,7 @@ HRESULT synth_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *port_param
struct midi_port {
IDirectMusicPort IDirectMusicPort_iface;
+ IDirectMusicThru IDirectMusicThru_iface;
LONG ref;
IReferenceClock *clock;
};
@@ -918,17 +919,21 @@ static inline struct midi_port *impl_from_IDirectMusicPort(IDirectMusicPort *ifa
static HRESULT WINAPI midi_IDirectMusicPort_QueryInterface(IDirectMusicPort *iface, REFIID riid,
void **ret_iface)
{
+ struct midi_port *This = impl_from_IDirectMusicPort(iface);
+
TRACE("(%p, %s, %p)\n", iface, debugstr_dmguid(riid), ret_iface);
if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicPort))
*ret_iface = iface;
+ else if (IsEqualIID(riid, &IID_IDirectMusicThru))
+ *ret_iface = &This->IDirectMusicThru_iface;
else {
WARN("no interface for %s\n", debugstr_dmguid(riid));
*ret_iface = NULL;
return E_NOINTERFACE;
}
- IDirectMusicPort_AddRef(iface);
+ IUnknown_AddRef((IUnknown *)*ret_iface);
return S_OK;
}
@@ -1126,6 +1131,49 @@ static const IDirectMusicPortVtbl midi_port_vtbl = {
midi_IDirectMusicPort_GetFormat,
};
+static inline struct midi_port *impl_from_IDirectMusicThru(IDirectMusicThru *iface)
+{
+ return CONTAINING_RECORD(iface, struct midi_port, IDirectMusicThru_iface);
+}
+
+static HRESULT WINAPI midi_IDirectMusicThru_QueryInterface(IDirectMusicThru *iface, REFIID riid,
+ void **ret_iface)
+{
+ struct midi_port *This = impl_from_IDirectMusicThru(iface);
+
+ return IDirectMusicPort_QueryInterface(&This->IDirectMusicPort_iface, riid, ret_iface);
+}
+
+static ULONG WINAPI midi_IDirectMusicThru_AddRef(IDirectMusicThru *iface)
+{
+ struct midi_port *This = impl_from_IDirectMusicThru(iface);
+
+ return IDirectMusicPort_AddRef(&This->IDirectMusicPort_iface);
+}
+
+static ULONG WINAPI midi_IDirectMusicThru_Release(IDirectMusicThru *iface)
+{
+ struct midi_port *This = impl_from_IDirectMusicThru(iface);
+
+ return IDirectMusicPort_Release(&This->IDirectMusicPort_iface);
+}
+
+static HRESULT WINAPI midi_IDirectMusicThru_ThruChannel(IDirectMusicThru *iface, DWORD src_group,
+ DWORD src_channel, DWORD dest_group, DWORD dest_channel, IDirectMusicPort *dest_port)
+{
+ FIXME("(%p, %u, %u, %u, %u, %p) stub!\n", iface, src_group, src_channel, dest_group,
+ dest_channel, dest_port);
+
+ return E_NOTIMPL;
+}
+
+static const IDirectMusicThruVtbl midi_thru_vtbl = {
+ midi_IDirectMusicThru_QueryInterface,
+ midi_IDirectMusicThru_AddRef,
+ midi_IDirectMusicThru_Release,
+ midi_IDirectMusicThru_ThruChannel,
+};
+
HRESULT midi_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *params, DMUS_PORTCAPS *caps,
IDirectMusicPort **port)
{
@@ -1136,6 +1184,7 @@ HRESULT midi_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *params, DMU
return E_OUTOFMEMORY;
obj->IDirectMusicPort_iface.lpVtbl = &midi_port_vtbl;
+ obj->IDirectMusicThru_iface.lpVtbl = &midi_thru_vtbl;
obj->ref = 1;
hr = DMUSIC_CreateReferenceClockImpl(&IID_IReferenceClock, (void **)&obj->clock, NULL);
--
2.14.4
More information about the wine-devel
mailing list