mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 09:17:14 +00:00
dsdmo: Add Flanger effect stub.
This commit is contained in:
parent
e2258279e0
commit
654b970be1
|
@ -65,3 +65,11 @@ coclass DirectSoundCompressorDMO {}
|
||||||
vi_progid("Microsoft.DirectSoundChorusDMO")
|
vi_progid("Microsoft.DirectSoundChorusDMO")
|
||||||
]
|
]
|
||||||
coclass DirectSoundChorusDMO {}
|
coclass DirectSoundChorusDMO {}
|
||||||
|
|
||||||
|
[
|
||||||
|
uuid(efca3d92-dfd8-4672-a603-7420894bad98),
|
||||||
|
threading(both),
|
||||||
|
progid("Microsoft.DirectSoundFlangerDMO.1"),
|
||||||
|
vi_progid("Microsoft.DirectSoundFlangerDMO")
|
||||||
|
]
|
||||||
|
coclass DirectSoundFlangerDMO {}
|
||||||
|
|
|
@ -1233,6 +1233,100 @@ static HRESULT chorus_create(IUnknown *outer, IUnknown **out)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct dmo_flangerfx
|
||||||
|
{
|
||||||
|
struct effect effect;
|
||||||
|
IDirectSoundFXFlanger IDirectSoundFXFlanger_iface;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct dmo_flangerfx *impl_from_IDirectSoundFXFlanger(IDirectSoundFXFlanger *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, struct dmo_flangerfx, IDirectSoundFXFlanger_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI flangerfx_QueryInterface(IDirectSoundFXFlanger *iface, REFIID iid, void **out)
|
||||||
|
{
|
||||||
|
struct dmo_flangerfx *effect = impl_from_IDirectSoundFXFlanger(iface);
|
||||||
|
return IUnknown_QueryInterface(effect->effect.outer_unk, iid, out);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI flangerfx_AddRef(IDirectSoundFXFlanger *iface)
|
||||||
|
{
|
||||||
|
struct dmo_flangerfx *effect = impl_from_IDirectSoundFXFlanger(iface);
|
||||||
|
return IUnknown_AddRef(effect->effect.outer_unk);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI flangerfx_Release(IDirectSoundFXFlanger *iface)
|
||||||
|
{
|
||||||
|
struct dmo_flangerfx *effect = impl_from_IDirectSoundFXFlanger(iface);
|
||||||
|
return IUnknown_Release(effect->effect.outer_unk);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI flangerfx_SetAllParameters(IDirectSoundFXFlanger *iface, const DSFXFlanger *flanger)
|
||||||
|
{
|
||||||
|
struct dmo_flangerfx *This = impl_from_IDirectSoundFXFlanger(iface);
|
||||||
|
FIXME("(%p) %p\n", This, flanger);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI flangerfx_GetAllParameters(IDirectSoundFXFlanger *iface, DSFXFlanger *flanger)
|
||||||
|
{
|
||||||
|
struct dmo_flangerfx *This = impl_from_IDirectSoundFXFlanger(iface);
|
||||||
|
FIXME("(%p) %p\n", This, flanger);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct IDirectSoundFXFlangerVtbl flanger_vtbl =
|
||||||
|
{
|
||||||
|
flangerfx_QueryInterface,
|
||||||
|
flangerfx_AddRef,
|
||||||
|
flangerfx_Release,
|
||||||
|
flangerfx_SetAllParameters,
|
||||||
|
flangerfx_GetAllParameters
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct dmo_flangerfx *impl_flanger_from_effect(struct effect *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, struct dmo_flangerfx, effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *flanger_query_interface(struct effect *iface, REFIID iid)
|
||||||
|
{
|
||||||
|
struct dmo_flangerfx *effect = impl_flanger_from_effect(iface);
|
||||||
|
|
||||||
|
if (IsEqualGUID(iid, &IID_IDirectSoundFXFlanger))
|
||||||
|
return &effect->IDirectSoundFXFlanger_iface;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void flanger_destroy(struct effect *iface)
|
||||||
|
{
|
||||||
|
struct dmo_flangerfx *effect = impl_flanger_from_effect(iface);
|
||||||
|
|
||||||
|
free(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct effect_ops flanger_ops =
|
||||||
|
{
|
||||||
|
.destroy = flanger_destroy,
|
||||||
|
.query_interface = flanger_query_interface,
|
||||||
|
};
|
||||||
|
|
||||||
|
static HRESULT flanger_create(IUnknown *outer, IUnknown **out)
|
||||||
|
{
|
||||||
|
struct dmo_flangerfx *object;
|
||||||
|
|
||||||
|
if (!(object = calloc(1, sizeof(*object))))
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
effect_init(&object->effect, outer, &flanger_ops);
|
||||||
|
object->IDirectSoundFXFlanger_iface.lpVtbl = &flanger_vtbl;
|
||||||
|
|
||||||
|
TRACE("Created flanger effect %p.\n", object);
|
||||||
|
*out = &object->effect.IUnknown_inner;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
struct class_factory
|
struct class_factory
|
||||||
{
|
{
|
||||||
IClassFactory IClassFactory_iface;
|
IClassFactory IClassFactory_iface;
|
||||||
|
@ -1320,6 +1414,7 @@ class_factories[] =
|
||||||
{&GUID_DSFX_STANDARD_ECHO, {{&class_factory_vtbl}, echo_create}},
|
{&GUID_DSFX_STANDARD_ECHO, {{&class_factory_vtbl}, echo_create}},
|
||||||
{&GUID_DSFX_STANDARD_COMPRESSOR, {{&class_factory_vtbl}, compressor_create}},
|
{&GUID_DSFX_STANDARD_COMPRESSOR, {{&class_factory_vtbl}, compressor_create}},
|
||||||
{&GUID_DSFX_STANDARD_CHORUS, {{&class_factory_vtbl}, chorus_create}},
|
{&GUID_DSFX_STANDARD_CHORUS, {{&class_factory_vtbl}, chorus_create}},
|
||||||
|
{&GUID_DSFX_STANDARD_FLANGER, {{&class_factory_vtbl}, flanger_create}},
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)
|
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)
|
||||||
|
|
|
@ -415,11 +415,14 @@ static void test_flanger_parameters(void)
|
||||||
|
|
||||||
hr = CoCreateInstance(&GUID_DSFX_STANDARD_FLANGER, NULL, CLSCTX_INPROC_SERVER,
|
hr = CoCreateInstance(&GUID_DSFX_STANDARD_FLANGER, NULL, CLSCTX_INPROC_SERVER,
|
||||||
&IID_IDirectSoundFXFlanger, (void **)&flanger);
|
&IID_IDirectSoundFXFlanger, (void **)&flanger);
|
||||||
todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr);
|
ok(hr == S_OK, "Got hr %#lx.\n", hr);
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
hr = IDirectSoundFXFlanger_GetAllParameters(flanger, ¶ms);
|
hr = IDirectSoundFXFlanger_GetAllParameters(flanger, ¶ms);
|
||||||
|
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(hr == S_OK, "Got hr %#lx.\n", hr);
|
||||||
ok(params.fWetDryMix == 50.0f, "Got %.8e%% wetness.\n", params.fWetDryMix);
|
ok(params.fWetDryMix == 50.0f, "Got %.8e%% wetness.\n", params.fWetDryMix);
|
||||||
ok(params.fDepth == 100.0f, "Got %.8e * 0.01%% depth.\n", params.fDepth);
|
ok(params.fDepth == 100.0f, "Got %.8e * 0.01%% depth.\n", params.fDepth);
|
||||||
|
@ -551,7 +554,7 @@ START_TEST(dsdmo)
|
||||||
{&GUID_DSFX_STANDARD_COMPRESSOR, &IID_IDirectSoundFXCompressor},
|
{&GUID_DSFX_STANDARD_COMPRESSOR, &IID_IDirectSoundFXCompressor},
|
||||||
{&GUID_DSFX_STANDARD_DISTORTION, &IID_IDirectSoundFXDistortion, TRUE},
|
{&GUID_DSFX_STANDARD_DISTORTION, &IID_IDirectSoundFXDistortion, TRUE},
|
||||||
{&GUID_DSFX_STANDARD_ECHO, &IID_IDirectSoundFXEcho},
|
{&GUID_DSFX_STANDARD_ECHO, &IID_IDirectSoundFXEcho},
|
||||||
{&GUID_DSFX_STANDARD_FLANGER, &IID_IDirectSoundFXFlanger, TRUE},
|
{&GUID_DSFX_STANDARD_FLANGER, &IID_IDirectSoundFXFlanger},
|
||||||
{&GUID_DSFX_STANDARD_GARGLE, &IID_IDirectSoundFXGargle, TRUE},
|
{&GUID_DSFX_STANDARD_GARGLE, &IID_IDirectSoundFXGargle, TRUE},
|
||||||
{&GUID_DSFX_STANDARD_I3DL2REVERB, &IID_IDirectSoundFXI3DL2Reverb},
|
{&GUID_DSFX_STANDARD_I3DL2REVERB, &IID_IDirectSoundFXI3DL2Reverb},
|
||||||
{&GUID_DSFX_STANDARD_PARAMEQ, &IID_IDirectSoundFXParamEq},
|
{&GUID_DSFX_STANDARD_PARAMEQ, &IID_IDirectSoundFXParamEq},
|
||||||
|
|
Loading…
Reference in a new issue