dmsynth: Implement IKsControl_KsProperty for Synth and SynthSink objects.
This commit is contained in:
parent
8bb1af84f4
commit
b3b7616f79
|
@ -2,6 +2,7 @@
|
||||||
* IDirectMusicSynth8 Implementation
|
* IDirectMusicSynth8 Implementation
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003-2004 Rok Mandeljc
|
* Copyright (C) 2003-2004 Rok Mandeljc
|
||||||
|
* Copyright (C) 2012 Christian Costa
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -415,9 +416,52 @@ static ULONG WINAPI DMSynthImpl_IKsControl_Release(IKsControl* iface)
|
||||||
static HRESULT WINAPI DMSynthImpl_IKsControl_KsProperty(IKsControl* iface, PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData,
|
static HRESULT WINAPI DMSynthImpl_IKsControl_KsProperty(IKsControl* iface, PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData,
|
||||||
ULONG DataLength, ULONG* BytesReturned)
|
ULONG DataLength, ULONG* BytesReturned)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(%p, %u, %p, %u, %p): stub\n", iface, Property, PropertyLength, PropertyData, DataLength, BytesReturned);
|
TRACE("(%p)->(%p, %u, %p, %u, %p)\n", iface, Property, PropertyLength, PropertyData, DataLength, BytesReturned);
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("Property = %s - %u - %u\n", debugstr_guid(&Property->Set), Property->Id, Property->Flags);
|
||||||
|
|
||||||
|
if (Property->Flags != KSPROPERTY_TYPE_GET)
|
||||||
|
{
|
||||||
|
FIXME("Property flags %u not yet supported\n", Property->Flags);
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataLength < sizeof(DWORD))
|
||||||
|
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
|
||||||
|
|
||||||
|
if (IsEqualGUID(&Property->Set, &GUID_DMUS_PROP_INSTRUMENT2))
|
||||||
|
{
|
||||||
|
*(DWORD*)PropertyData = TRUE;
|
||||||
|
*BytesReturned = sizeof(DWORD);
|
||||||
|
}
|
||||||
|
else if (IsEqualGUID(&Property->Set, &GUID_DMUS_PROP_DLS2))
|
||||||
|
{
|
||||||
|
*(DWORD*)PropertyData = TRUE;
|
||||||
|
*BytesReturned = sizeof(DWORD);
|
||||||
|
}
|
||||||
|
else if (IsEqualGUID(&Property->Set, &GUID_DMUS_PROP_GM_Hardware))
|
||||||
|
{
|
||||||
|
*(DWORD*)PropertyData = FALSE;
|
||||||
|
*BytesReturned = sizeof(DWORD);
|
||||||
|
}
|
||||||
|
else if (IsEqualGUID(&Property->Set, &GUID_DMUS_PROP_GS_Hardware))
|
||||||
|
{
|
||||||
|
*(DWORD*)PropertyData = FALSE;
|
||||||
|
*BytesReturned = sizeof(DWORD);
|
||||||
|
}
|
||||||
|
else if (IsEqualGUID(&Property->Set, &GUID_DMUS_PROP_XG_Hardware))
|
||||||
|
{
|
||||||
|
*(DWORD*)PropertyData = FALSE;
|
||||||
|
*BytesReturned = sizeof(DWORD);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FIXME("Unknown property %s\n", debugstr_guid(&Property->Set));
|
||||||
|
*(DWORD*)PropertyData = FALSE;
|
||||||
|
*BytesReturned = sizeof(DWORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI DMSynthImpl_IKsControl_KsMethod(IKsControl* iface, PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData,
|
static HRESULT WINAPI DMSynthImpl_IKsControl_KsMethod(IKsControl* iface, PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* IDirectMusicSynthSink Implementation
|
* IDirectMusicSynthSink Implementation
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003-2004 Rok Mandeljc
|
* Copyright (C) 2003-2004 Rok Mandeljc
|
||||||
|
* Copyright (C) 2012 Christian Costa
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -209,9 +210,32 @@ static ULONG WINAPI DMSynthSinkImpl_IKsControl_Release(IKsControl* iface)
|
||||||
static HRESULT WINAPI DMSynthSinkImpl_IKsControl_KsProperty(IKsControl* iface, PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData,
|
static HRESULT WINAPI DMSynthSinkImpl_IKsControl_KsProperty(IKsControl* iface, PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData,
|
||||||
ULONG DataLength, ULONG* BytesReturned)
|
ULONG DataLength, ULONG* BytesReturned)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(%p, %u, %p, %u, %p): stub\n", iface, Property, PropertyLength, PropertyData, DataLength, BytesReturned);
|
TRACE("(%p)->(%p, %u, %p, %u, %p)\n", iface, Property, PropertyLength, PropertyData, DataLength, BytesReturned);
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("Property = %s - %u - %u\n", debugstr_guid(&Property->Set), Property->Id, Property->Flags);
|
||||||
|
|
||||||
|
if (Property->Flags != KSPROPERTY_TYPE_GET)
|
||||||
|
{
|
||||||
|
FIXME("Property flags %u not yet supported\n", Property->Flags);
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DataLength < sizeof(DWORD))
|
||||||
|
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
|
||||||
|
|
||||||
|
if (IsEqualGUID(&Property->Set, &GUID_DMUS_PROP_SinkUsesDSound))
|
||||||
|
{
|
||||||
|
*(DWORD*)PropertyData = TRUE;
|
||||||
|
*BytesReturned = sizeof(DWORD);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FIXME("Unknown property %s\n", debugstr_guid(&Property->Set));
|
||||||
|
*(DWORD*)PropertyData = FALSE;
|
||||||
|
*BytesReturned = sizeof(DWORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI DMSynthSinkImpl_IKsControl_KsMethod(IKsControl* iface, PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData,
|
static HRESULT WINAPI DMSynthSinkImpl_IKsControl_KsMethod(IKsControl* iface, PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData,
|
||||||
|
|
|
@ -39,6 +39,9 @@ static void test_dmsynth(void)
|
||||||
IKsControl* control_synth = NULL;
|
IKsControl* control_synth = NULL;
|
||||||
IKsControl* control_sink = NULL;
|
IKsControl* control_sink = NULL;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
KSPROPERTY property;
|
||||||
|
ULONG value;
|
||||||
|
ULONG bytes;
|
||||||
|
|
||||||
hr = CoCreateInstance(&CLSID_DirectMusicSynth, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicSynth, (LPVOID*)&dmsynth);
|
hr = CoCreateInstance(&CLSID_DirectMusicSynth, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicSynth, (LPVOID*)&dmsynth);
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
|
@ -52,9 +55,45 @@ static void test_dmsynth(void)
|
||||||
|
|
||||||
hr = IDirectMusicSynth_QueryInterface(dmsynth, &IID_IKsControl, (LPVOID*)&control_synth);
|
hr = IDirectMusicSynth_QueryInterface(dmsynth, &IID_IKsControl, (LPVOID*)&control_synth);
|
||||||
ok(hr == S_OK, "IDirectMusicSynth_QueryInterface returned: %x\n", hr);
|
ok(hr == S_OK, "IDirectMusicSynth_QueryInterface returned: %x\n", hr);
|
||||||
|
|
||||||
|
property.Id = 0;
|
||||||
|
property.Flags = KSPROPERTY_TYPE_GET;
|
||||||
|
|
||||||
|
property.Set = GUID_DMUS_PROP_INSTRUMENT2;
|
||||||
|
hr = IKsControl_KsProperty(control_synth, &property, sizeof(property), &value, sizeof(value), &bytes);
|
||||||
|
ok(hr == S_OK, "IKsControl_KsProperty returned: %x\n", hr);
|
||||||
|
ok(bytes == sizeof(DWORD), "Returned bytes: %u, should be 4\n", bytes);
|
||||||
|
ok(value == TRUE, "Return value: %u, should be 1\n", value);
|
||||||
|
property.Set = GUID_DMUS_PROP_DLS2;
|
||||||
|
hr = IKsControl_KsProperty(control_synth, &property, sizeof(property), &value, sizeof(value), &bytes);
|
||||||
|
ok(hr == S_OK, "IKsControl_KsProperty returned: %x\n", hr);
|
||||||
|
ok(bytes == sizeof(DWORD), "Returned bytes: %u, should be 4\n", bytes);
|
||||||
|
ok(value == TRUE, "Return value: %u, should be 1\n", value);
|
||||||
|
property.Set = GUID_DMUS_PROP_GM_Hardware;
|
||||||
|
hr = IKsControl_KsProperty(control_synth, &property, sizeof(property), &value, sizeof(value), &bytes);
|
||||||
|
ok(hr == S_OK, "IKsControl_KsProperty returned: %x\n", hr);
|
||||||
|
ok(bytes == sizeof(DWORD), "Returned bytes: %u, should be 4\n", bytes);
|
||||||
|
ok(value == FALSE, "Return value: %u, should be 0\n", value);
|
||||||
|
property.Set = GUID_DMUS_PROP_GS_Hardware;
|
||||||
|
hr = IKsControl_KsProperty(control_synth, &property, sizeof(property), &value, sizeof(value), &bytes);
|
||||||
|
ok(hr == S_OK, "IKsControl_KsProperty returned: %x\n", hr);
|
||||||
|
ok(bytes == sizeof(DWORD), "Returned bytes: %u, should be 4\n", bytes);
|
||||||
|
ok(value == FALSE, "Return value: %u, should be 0\n", value);
|
||||||
|
property.Set = GUID_DMUS_PROP_XG_Hardware;
|
||||||
|
hr = IKsControl_KsProperty(control_synth, &property, sizeof(property), &value, sizeof(value), &bytes);
|
||||||
|
ok(hr == S_OK, "IKsControl_KsProperty returned: %x\n", hr);
|
||||||
|
ok(bytes == sizeof(DWORD), "Returned bytes: %u, should be 4\n", bytes);
|
||||||
|
ok(value == FALSE, "Return value: %u, should be 0\n", value);
|
||||||
|
|
||||||
hr = IDirectMusicSynthSink_QueryInterface(dmsynth_sink, &IID_IKsControl, (LPVOID*)&control_sink);
|
hr = IDirectMusicSynthSink_QueryInterface(dmsynth_sink, &IID_IKsControl, (LPVOID*)&control_sink);
|
||||||
ok(hr == S_OK, "IDirectMusicSynthSink_QueryInterface returned: %x\n", hr);
|
ok(hr == S_OK, "IDirectMusicSynthSink_QueryInterface returned: %x\n", hr);
|
||||||
|
|
||||||
|
property.Set = GUID_DMUS_PROP_SinkUsesDSound;
|
||||||
|
hr = IKsControl_KsProperty(control_sink, &property, sizeof(property), &value, sizeof(value), &bytes);
|
||||||
|
ok(hr == S_OK, "IKsControl_KsProperty returned: %x\n", hr);
|
||||||
|
ok(bytes == sizeof(DWORD), "Returned bytes: %u, should be 4\n", bytes);
|
||||||
|
ok(value == TRUE, "Return value: %u, should be 1\n", value);
|
||||||
|
|
||||||
/* Synth has no default clock */
|
/* Synth has no default clock */
|
||||||
hr = IDirectMusicSynth_GetLatencyClock(dmsynth, &clock_synth);
|
hr = IDirectMusicSynth_GetLatencyClock(dmsynth, &clock_synth);
|
||||||
ok(hr == DMUS_E_NOSYNTHSINK, "IDirectMusicSynth_GetLatencyClock returned: %x\n", hr);
|
ok(hr == DMUS_E_NOSYNTHSINK, "IDirectMusicSynth_GetLatencyClock returned: %x\n", hr);
|
||||||
|
|
Loading…
Reference in New Issue