Reference that attempt to create these. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=33326
From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
--- dlls/dsdmo/dsdmo.idl | 8 ++++ dlls/dsdmo/main.c | 96 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+)
diff --git a/dlls/dsdmo/dsdmo.idl b/dlls/dsdmo/dsdmo.idl index 3922b4d6778..2eba0a4936e 100644 --- a/dlls/dsdmo/dsdmo.idl +++ b/dlls/dsdmo/dsdmo.idl @@ -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 {} diff --git a/dlls/dsdmo/main.c b/dlls/dsdmo/main.c index bb19b7b7e2e..0e0f5a444b8 100644 --- a/dlls/dsdmo/main.c +++ b/dlls/dsdmo/main.c @@ -1139,6 +1139,100 @@ static HRESULT compressor_create(IUnknown *outer, IUnknown **out) return S_OK; }
+struct dmo_chordfx +{ + struct effect effect; + IDirectSoundFXChorus IDirectSoundFXChorus_iface; +}; + +static inline struct dmo_chordfx *impl_from_IDirectSoundFXChorus(IDirectSoundFXChorus *iface) +{ + return CONTAINING_RECORD(iface, struct dmo_chordfx, IDirectSoundFXChorus_iface); +} + +static HRESULT WINAPI chordfx_QueryInterface(IDirectSoundFXChorus *iface, REFIID iid, void **out) +{ + struct dmo_chordfx *effect = impl_from_IDirectSoundFXChorus(iface); + return IUnknown_QueryInterface(effect->effect.outer_unk, iid, out); +} + +static ULONG WINAPI chordfx_AddRef(IDirectSoundFXChorus *iface) +{ + struct dmo_chordfx *effect = impl_from_IDirectSoundFXChorus(iface); + return IUnknown_AddRef(effect->effect.outer_unk); +} + +static ULONG WINAPI chordfx_Release(IDirectSoundFXChorus *iface) +{ + struct dmo_chordfx *effect = impl_from_IDirectSoundFXChorus(iface); + return IUnknown_Release(effect->effect.outer_unk); +} + +static HRESULT WINAPI chordfx_SetAllParameters(IDirectSoundFXChorus *iface, const DSFXChorus *compressor) +{ + struct dmo_chordfx *This = impl_from_IDirectSoundFXChorus(iface); + FIXME("(%p) %p\n", This, compressor); + return E_NOTIMPL; +} + +static HRESULT WINAPI chordfx_GetAllParameters(IDirectSoundFXChorus *iface, DSFXChorus *compressor) +{ + struct dmo_chordfx *This = impl_from_IDirectSoundFXChorus(iface); + FIXME("(%p) %p\n", This, compressor); + return E_NOTIMPL; +} + +static const struct IDirectSoundFXChorusVtbl chord_vtbl = +{ + chordfx_QueryInterface, + chordfx_AddRef, + chordfx_Release, + chordfx_SetAllParameters, + chordfx_GetAllParameters +}; + +static struct dmo_chordfx *impl_chord_from_effect(struct effect *iface) +{ + return CONTAINING_RECORD(iface, struct dmo_chordfx, effect); +} + +static void *chord_query_interface(struct effect *iface, REFIID iid) +{ + struct dmo_chordfx *effect = impl_chord_from_effect(iface); + + if (IsEqualGUID(iid, &IID_IDirectSoundFXChorus)) + return &effect->IDirectSoundFXChorus_iface; + return NULL; +} + +static void chord_destroy(struct effect *iface) +{ + struct dmo_chordfx *effect = impl_chord_from_effect(iface); + + free(effect); +} + +static const struct effect_ops chord_ops = +{ + .destroy = chord_destroy, + .query_interface = chord_query_interface, +}; + +static HRESULT chord_create(IUnknown *outer, IUnknown **out) +{ + struct dmo_chordfx *object; + + if (!(object = calloc(1, sizeof(*object)))) + return E_OUTOFMEMORY; + + effect_init(&object->effect, outer, &chord_ops); + object->IDirectSoundFXChorus_iface.lpVtbl = &chord_vtbl; + + TRACE("Created chord effect %p.\n", object); + *out = &object->effect.IUnknown_inner; + return S_OK; +} + struct class_factory { IClassFactory IClassFactory_iface; @@ -1225,6 +1319,8 @@ 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}, chord_create}}, + };
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)
From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
--- dlls/dsdmo/dsdmo.idl | 8 ++++ dlls/dsdmo/main.c | 96 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 103 insertions(+), 1 deletion(-)
diff --git a/dlls/dsdmo/dsdmo.idl b/dlls/dsdmo/dsdmo.idl index 2eba0a4936e..30c54d0f889 100644 --- a/dlls/dsdmo/dsdmo.idl +++ b/dlls/dsdmo/dsdmo.idl @@ -65,3 +65,11 @@ coclass DirectSoundCompressorDMO {} vi_progid("Microsoft.DirectSoundChorusDMO") ] coclass DirectSoundChorusDMO {} + +[ + uuid(efca3d92-dfd8-4672-a603-7420894bad98), + threading(both), + progid("Microsoft.DirectSoundFlangerDMO.1"), + vi_progid("Microsoft.DirectSoundFlangerDMO") +] +coclass DirectSoundFlangerDMO {} diff --git a/dlls/dsdmo/main.c b/dlls/dsdmo/main.c index 0e0f5a444b8..af9d116788d 100644 --- a/dlls/dsdmo/main.c +++ b/dlls/dsdmo/main.c @@ -1233,6 +1233,100 @@ static HRESULT chord_create(IUnknown *outer, IUnknown **out) 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 { IClassFactory IClassFactory_iface; @@ -1320,7 +1414,7 @@ class_factories[] = {&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}, chord_create}}, - + {&GUID_DSFX_STANDARD_FLANGER, {{&class_factory_vtbl}, flanger_create}}, };
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=134165
Your paranoid android.
=== debian11 (32 bit report) ===
dsdmo: dsdmo.c:567: Test succeeded inside todo block: Failed to create {efe6629c-81f7-4281-bd91-c9d604a95af6}, hr 0. dsdmo.c:567: Test succeeded inside todo block: Failed to create {efca3d92-dfd8-4672-a603-7420894bad98}, hr 0. dsdmo.c:311: Test succeeded inside todo block: Got hr 0. dsdmo.c:316: Test failed: Got hr 0x80004001. dsdmo.c:317: Test failed: Got wetness 1.81003481e+031%. dsdmo.c:318: Test failed: Got depth 1.46936794e-039. dsdmo.c:319: Test failed: Got feedback -1.13688572e-013. dsdmo.c:320: Test failed: Got LFO frequency 1.53721204e+030. dsdmo.c:322: Test failed: Got delay 1.46936794e-039. dsdmo.c:323: Test failed: Got phase differential -1442840448. dsdmo.c:415: Test succeeded inside todo block: Got hr 0. dsdmo.c:420: Test failed: Got hr 0x80004001. dsdmo.c:421: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:422: Test failed: Got 1.46936794e-039 * 0.01% depth. dsdmo.c:423: Test failed: Got -1.13688572e-013% feedback. dsdmo.c:425: Test failed: Got delay 1.46936794e-039 ms. dsdmo.c:426: Test failed: Got phase differential -1442840448.
=== debian11 (32 bit zh:CN report) ===
dsdmo: dsdmo.c:567: Test succeeded inside todo block: Failed to create {efe6629c-81f7-4281-bd91-c9d604a95af6}, hr 0. dsdmo.c:567: Test succeeded inside todo block: Failed to create {efca3d92-dfd8-4672-a603-7420894bad98}, hr 0. dsdmo.c:311: Test succeeded inside todo block: Got hr 0. dsdmo.c:316: Test failed: Got hr 0x80004001. dsdmo.c:317: Test failed: Got wetness 1.81003481e+031%. dsdmo.c:318: Test failed: Got depth 1.46936794e-039. dsdmo.c:319: Test failed: Got feedback -1.13688572e-013. dsdmo.c:320: Test failed: Got LFO frequency 1.53721204e+030. dsdmo.c:322: Test failed: Got delay 1.46936794e-039. dsdmo.c:323: Test failed: Got phase differential -1442840448. dsdmo.c:415: Test succeeded inside todo block: Got hr 0. dsdmo.c:420: Test failed: Got hr 0x80004001. dsdmo.c:421: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:422: Test failed: Got 1.46936794e-039 * 0.01% depth. dsdmo.c:423: Test failed: Got -1.13688572e-013% feedback. dsdmo.c:425: Test failed: Got delay 1.46936794e-039 ms. dsdmo.c:426: Test failed: Got phase differential -1442840448.
=== debian11b (64 bit WoW report) ===
dsdmo: dsdmo.c:567: Test succeeded inside todo block: Failed to create {efe6629c-81f7-4281-bd91-c9d604a95af6}, hr 0. dsdmo.c:567: Test succeeded inside todo block: Failed to create {efca3d92-dfd8-4672-a603-7420894bad98}, hr 0. dsdmo.c:311: Test succeeded inside todo block: Got hr 0. dsdmo.c:316: Test failed: Got hr 0x80004001. dsdmo.c:317: Test failed: Got wetness 1.81003481e+031%. dsdmo.c:318: Test failed: Got depth 1.46936794e-039. dsdmo.c:319: Test failed: Got feedback -1.13688572e-013. dsdmo.c:320: Test failed: Got LFO frequency 1.53721204e+030. dsdmo.c:322: Test failed: Got delay 1.46936794e-039. dsdmo.c:323: Test failed: Got phase differential -1442840448. dsdmo.c:415: Test succeeded inside todo block: Got hr 0. dsdmo.c:420: Test failed: Got hr 0x80004001. dsdmo.c:421: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:422: Test failed: Got 1.46936794e-039 * 0.01% depth. dsdmo.c:423: Test failed: Got -1.13688572e-013% feedback. dsdmo.c:425: Test failed: Got delay 1.46936794e-039 ms. dsdmo.c:426: Test failed: Got phase differential -1442840448.