dsdmo: Add Chorus effect stub.

This commit is contained in:
Alistair Leslie-Hughes 2023-06-26 12:31:56 +10:00 committed by Alexandre Julliard
parent 7255f63a65
commit e2258279e0
3 changed files with 108 additions and 2 deletions

View file

@ -57,3 +57,11 @@ coclass DirectSoundEchoDMO {}
vi_progid("Microsoft.DirectSoundCompressorDMO")
]
coclass DirectSoundCompressorDMO {}
[
uuid(efe6629c-81f7-4281-bd91-c9d604a95af6),
threading(both),
progid("Microsoft.DirectSoundChorusDMO.1"),
vi_progid("Microsoft.DirectSoundChorusDMO")
]
coclass DirectSoundChorusDMO {}

View file

@ -1139,6 +1139,100 @@ static HRESULT compressor_create(IUnknown *outer, IUnknown **out)
return S_OK;
}
struct dmochorusfx
{
struct effect effect;
IDirectSoundFXChorus IDirectSoundFXChorus_iface;
};
static inline struct dmochorusfx *impl_from_IDirectSoundFXChorus(IDirectSoundFXChorus *iface)
{
return CONTAINING_RECORD(iface, struct dmochorusfx, IDirectSoundFXChorus_iface);
}
static HRESULT WINAPI chorusfx_QueryInterface(IDirectSoundFXChorus *iface, REFIID iid, void **out)
{
struct dmochorusfx *effect = impl_from_IDirectSoundFXChorus(iface);
return IUnknown_QueryInterface(effect->effect.outer_unk, iid, out);
}
static ULONG WINAPI chorusfx_AddRef(IDirectSoundFXChorus *iface)
{
struct dmochorusfx *effect = impl_from_IDirectSoundFXChorus(iface);
return IUnknown_AddRef(effect->effect.outer_unk);
}
static ULONG WINAPI chorusfx_Release(IDirectSoundFXChorus *iface)
{
struct dmochorusfx *effect = impl_from_IDirectSoundFXChorus(iface);
return IUnknown_Release(effect->effect.outer_unk);
}
static HRESULT WINAPI chorusfx_SetAllParameters(IDirectSoundFXChorus *iface, const DSFXChorus *compressor)
{
struct dmochorusfx *This = impl_from_IDirectSoundFXChorus(iface);
FIXME("(%p) %p\n", This, compressor);
return E_NOTIMPL;
}
static HRESULT WINAPI chorusfx_GetAllParameters(IDirectSoundFXChorus *iface, DSFXChorus *compressor)
{
struct dmochorusfx *This = impl_from_IDirectSoundFXChorus(iface);
FIXME("(%p) %p\n", This, compressor);
return E_NOTIMPL;
}
static const struct IDirectSoundFXChorusVtbl chorus_vtbl =
{
chorusfx_QueryInterface,
chorusfx_AddRef,
chorusfx_Release,
chorusfx_SetAllParameters,
chorusfx_GetAllParameters
};
static struct dmochorusfx *implchorus_from_effect(struct effect *iface)
{
return CONTAINING_RECORD(iface, struct dmochorusfx, effect);
}
static void *chorus_query_interface(struct effect *iface, REFIID iid)
{
struct dmochorusfx *effect = implchorus_from_effect(iface);
if (IsEqualGUID(iid, &IID_IDirectSoundFXChorus))
return &effect->IDirectSoundFXChorus_iface;
return NULL;
}
static void chorus_destroy(struct effect *iface)
{
struct dmochorusfx *effect = implchorus_from_effect(iface);
free(effect);
}
static const struct effect_ops chorus_ops =
{
.destroy = chorus_destroy,
.query_interface = chorus_query_interface,
};
static HRESULT chorus_create(IUnknown *outer, IUnknown **out)
{
struct dmochorusfx *object;
if (!(object = calloc(1, sizeof(*object))))
return E_OUTOFMEMORY;
effect_init(&object->effect, outer, &chorus_ops);
object->IDirectSoundFXChorus_iface.lpVtbl = &chorus_vtbl;
TRACE("Created chorus effect %p.\n", object);
*out = &object->effect.IUnknown_inner;
return S_OK;
}
struct class_factory
{
IClassFactory IClassFactory_iface;
@ -1225,6 +1319,7 @@ class_factories[] =
{&GUID_DSFX_WAVES_REVERB, {{&class_factory_vtbl}, waves_reverb_create}},
{&GUID_DSFX_STANDARD_ECHO, {{&class_factory_vtbl}, echo_create}},
{&GUID_DSFX_STANDARD_COMPRESSOR, {{&class_factory_vtbl}, compressor_create}},
{&GUID_DSFX_STANDARD_CHORUS, {{&class_factory_vtbl}, chorus_create}},
};
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)

View file

@ -308,11 +308,14 @@ static void test_chorus_parameters(void)
hr = CoCreateInstance(&GUID_DSFX_STANDARD_CHORUS, NULL, CLSCTX_INPROC_SERVER,
&IID_IDirectSoundFXChorus, (void **)&chorus);
todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr);
ok(hr == S_OK, "Got hr %#lx.\n", hr);
if (hr != S_OK)
return;
hr = IDirectSoundFXChorus_GetAllParameters(chorus, &params);
todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr);
if (hr != S_OK)
return;
ok(hr == S_OK, "Got hr %#lx.\n", hr);
ok(params.fWetDryMix == 50.0f, "Got wetness %.8e%%.\n", params.fWetDryMix);
ok(params.fDepth == 10.0f, "Got depth %.8e.\n", params.fDepth);
@ -544,7 +547,7 @@ START_TEST(dsdmo)
}
tests[] =
{
{&GUID_DSFX_STANDARD_CHORUS, &IID_IDirectSoundFXChorus, TRUE},
{&GUID_DSFX_STANDARD_CHORUS, &IID_IDirectSoundFXChorus},
{&GUID_DSFX_STANDARD_COMPRESSOR, &IID_IDirectSoundFXCompressor},
{&GUID_DSFX_STANDARD_DISTORTION, &IID_IDirectSoundFXDistortion, TRUE},
{&GUID_DSFX_STANDARD_ECHO, &IID_IDirectSoundFXEcho},