[PATCH 0/2] MR653: Dsdmo fx
From: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> --- dlls/dsdmo/dsdmo.idl | 8 ++++ dlls/dsdmo/main.c | 97 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/dlls/dsdmo/dsdmo.idl b/dlls/dsdmo/dsdmo.idl index 7f172084828..c8130f8a1ce 100644 --- a/dlls/dsdmo/dsdmo.idl +++ b/dlls/dsdmo/dsdmo.idl @@ -41,3 +41,11 @@ coclass DirectSoundParamEqDMO {} uuid(87fc0268-9a55-4360-95aa-004a1d9de26c) ] coclass DirectSoundWavesReverbDMO {} + +[ + uuid(ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d), + threading(both), + progid("Microsoft.DirectSoundEchoDMO.1"), + vi_progid("Microsoft.DirectSoundEchoDMO") +] +coclass DirectSoundEchoDMO {} diff --git a/dlls/dsdmo/main.c b/dlls/dsdmo/main.c index 3b106a8f633..200293f5214 100644 --- a/dlls/dsdmo/main.c +++ b/dlls/dsdmo/main.c @@ -947,6 +947,102 @@ static HRESULT waves_reverb_create(IUnknown *outer, IUnknown **out) return S_OK; } +struct dmo_echofx +{ + struct effect effect; + IDirectSoundFXEcho IDirectSoundFXEcho_iface; +}; + +static inline struct dmo_echofx *impl_from_IDirectSoundFXEcho(IDirectSoundFXEcho *iface) +{ + return CONTAINING_RECORD(iface, struct dmo_echofx, IDirectSoundFXEcho_iface); +} + +static HRESULT WINAPI echofx_QueryInterface(IDirectSoundFXEcho *iface, REFIID iid, void **out) +{ + struct dmo_echofx *effect = impl_from_IDirectSoundFXEcho(iface); + return IUnknown_QueryInterface(effect->effect.outer_unk, iid, out); +} + +static ULONG WINAPI echofx_AddRef(IDirectSoundFXEcho *iface) +{ + struct dmo_echofx *effect = impl_from_IDirectSoundFXEcho(iface); + return IUnknown_AddRef(effect->effect.outer_unk); +} + +static ULONG WINAPI echofx_Release(IDirectSoundFXEcho *iface) +{ + struct dmo_echofx *effect = impl_from_IDirectSoundFXEcho(iface); + return IUnknown_Release(effect->effect.outer_unk); +} + +static HRESULT WINAPI echofx_SetAllParameters(IDirectSoundFXEcho *iface, const DSFXEcho *echo) +{ + struct dmo_echofx *effect = impl_from_IDirectSoundFXEcho(iface); + FIXME("(%p) %p\n", effect, echo); + + return E_NOTIMPL; +} + +static HRESULT WINAPI echofx_GetAllParameters(IDirectSoundFXEcho *iface, DSFXEcho *echo) +{ + struct dmo_echofx *effect = impl_from_IDirectSoundFXEcho(iface); + FIXME("(%p) %p\n", effect, echo); + + return E_NOTIMPL; +} + +static const struct IDirectSoundFXEchoVtbl echofx_vtbl = +{ + echofx_QueryInterface, + echofx_AddRef, + echofx_Release, + echofx_SetAllParameters, + echofx_GetAllParameters +}; + +static struct dmo_echofx *impl_echo_from_effect(struct effect *iface) +{ + return CONTAINING_RECORD(iface, struct dmo_echofx, effect); +} + +static void *echo_query_interface(struct effect *iface, REFIID iid) +{ + struct dmo_echofx *effect = impl_echo_from_effect(iface); + + if (IsEqualGUID(iid, &IID_IDirectSoundFXEcho)) + return &effect->IDirectSoundFXEcho_iface; + return NULL; +} + +static void echo_destroy(struct effect *iface) +{ + struct dmo_echofx *effect = impl_echo_from_effect(iface); + + free(effect); +} + +static const struct effect_ops echo_ops = +{ + .destroy = echo_destroy, + .query_interface = echo_query_interface, +}; + +static HRESULT echo_create(IUnknown *outer, IUnknown **out) +{ + struct dmo_echofx *object; + + if (!(object = calloc(1, sizeof(*object)))) + return E_OUTOFMEMORY; + + effect_init(&object->effect, outer, &echo_ops); + object->IDirectSoundFXEcho_iface.lpVtbl = &echofx_vtbl; + + TRACE("Created echo effect %p.\n", object); + *out = &object->effect.IUnknown_inner; + return S_OK; +} + struct class_factory { IClassFactory IClassFactory_iface; @@ -1031,6 +1127,7 @@ class_factories[] = {&GUID_DSFX_STANDARD_I3DL2REVERB, {{&class_factory_vtbl}, reverb_create}}, {&GUID_DSFX_STANDARD_PARAMEQ, {{&class_factory_vtbl}, eq_create}}, {&GUID_DSFX_WAVES_REVERB, {{&class_factory_vtbl}, waves_reverb_create}}, + {&GUID_DSFX_STANDARD_ECHO, {{&class_factory_vtbl}, echo_create}}, }; HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/653
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=121348 Your paranoid android. === debian11 (32 bit report) === dsdmo: dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}, hr 0. dsdmo.c:388: Test succeeded inside todo block: Got hr 0. dsdmo.c:393: Test failed: Got hr 0x80004001. dsdmo.c:394: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:395: Test failed: Got 1.46936794e-039% feedback. dsdmo.c:396: Test failed: Got left delay -1.13688572e-013 ms. dsdmo.c:397: Test failed: Got right delay 1.53721204e+030 ms. dsdmo.c:398: Test failed: Got delay swap 1. === debian11 (32 bit Chinese:China report) === dsdmo: dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}, hr 0. dsdmo.c:388: Test succeeded inside todo block: Got hr 0. dsdmo.c:393: Test failed: Got hr 0x80004001. dsdmo.c:394: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:395: Test failed: Got 1.46936794e-039% feedback. dsdmo.c:396: Test failed: Got left delay -1.13688572e-013 ms. dsdmo.c:397: Test failed: Got right delay 1.53721204e+030 ms. dsdmo.c:398: Test failed: Got delay swap 1. === debian11 (32 bit WoW report) === dsdmo: dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}, hr 0. dsdmo.c:388: Test succeeded inside todo block: Got hr 0. dsdmo.c:393: Test failed: Got hr 0x80004001. dsdmo.c:394: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:395: Test failed: Got 1.46936794e-039% feedback. dsdmo.c:396: Test failed: Got left delay -1.13688572e-013 ms. dsdmo.c:397: Test failed: Got right delay 1.53721204e+030 ms. dsdmo.c:398: Test failed: Got delay swap 1. === debian11 (64 bit WoW report) === dsdmo: dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}, hr 0. dsdmo.c:388: Test succeeded inside todo block: Got hr 0. dsdmo.c:393: Test failed: Got hr 0x80004001. dsdmo.c:394: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:395: Test failed: Got 1.46936794e-039% feedback. dsdmo.c:396: Test failed: Got left delay -1.13688572e-013 ms. dsdmo.c:397: Test failed: Got right delay 1.53721204e+030 ms. dsdmo.c:398: Test failed: Got delay swap 1.
From: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> --- dlls/dsdmo/dsdmo.idl | 8 ++++ dlls/dsdmo/main.c | 97 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/dlls/dsdmo/dsdmo.idl b/dlls/dsdmo/dsdmo.idl index c8130f8a1ce..ee3154f64d1 100644 --- a/dlls/dsdmo/dsdmo.idl +++ b/dlls/dsdmo/dsdmo.idl @@ -49,3 +49,11 @@ coclass DirectSoundWavesReverbDMO {} vi_progid("Microsoft.DirectSoundEchoDMO") ] coclass DirectSoundEchoDMO {} + +[ + uuid(ef011f79-4000-406d-87af-bffb3fc39d57), + threading(both), + progid("Microsoft.DirectSoundCompressorDMO.1"), + vi_progid("Microsoft.DirectSoundCompressorDMO") +] +coclass DirectSoundCompressorDMO {} \ No newline at end of file diff --git a/dlls/dsdmo/main.c b/dlls/dsdmo/main.c index 200293f5214..bb19b7b7e2e 100644 --- a/dlls/dsdmo/main.c +++ b/dlls/dsdmo/main.c @@ -1043,6 +1043,102 @@ static HRESULT echo_create(IUnknown *outer, IUnknown **out) return S_OK; } +struct dmo_compressorfx +{ + struct effect effect; + IDirectSoundFXCompressor IDirectSoundFXCompressor_iface; +}; + +static inline struct dmo_compressorfx *impl_from_IDirectSoundFXCompressor(IDirectSoundFXCompressor *iface) +{ + return CONTAINING_RECORD(iface, struct dmo_compressorfx, IDirectSoundFXCompressor_iface); +} + +static HRESULT WINAPI compressorfx_QueryInterface(IDirectSoundFXCompressor *iface, REFIID iid, void **out) +{ + struct dmo_compressorfx *effect = impl_from_IDirectSoundFXCompressor(iface); + return IUnknown_QueryInterface(effect->effect.outer_unk, iid, out); +} + +static ULONG WINAPI compressorfx_AddRef(IDirectSoundFXCompressor *iface) +{ + struct dmo_compressorfx *effect = impl_from_IDirectSoundFXCompressor(iface); + return IUnknown_AddRef(effect->effect.outer_unk); +} + +static ULONG WINAPI compressorfx_Release(IDirectSoundFXCompressor *iface) +{ + struct dmo_compressorfx *effect = impl_from_IDirectSoundFXCompressor(iface); + return IUnknown_Release(effect->effect.outer_unk); +} + +static HRESULT WINAPI compressorfx_SetAllParameters(IDirectSoundFXCompressor *iface, const DSFXCompressor *compressor) +{ + struct dmo_compressorfx *This = impl_from_IDirectSoundFXCompressor(iface); + FIXME("(%p) %p\n", This, compressor); + + return E_NOTIMPL; +} + +static HRESULT WINAPI compressorfx_GetAllParameters(IDirectSoundFXCompressor *iface, DSFXCompressor *compressor) +{ + struct dmo_compressorfx *This = impl_from_IDirectSoundFXCompressor(iface); + FIXME("(%p) %p\n", This, compressor); + + return E_NOTIMPL; +} + +static const struct IDirectSoundFXCompressorVtbl compressor_vtbl = +{ + compressorfx_QueryInterface, + compressorfx_AddRef, + compressorfx_Release, + compressorfx_SetAllParameters, + compressorfx_GetAllParameters +}; + +static struct dmo_compressorfx *impl_compressor_from_effect(struct effect *iface) +{ + return CONTAINING_RECORD(iface, struct dmo_compressorfx, effect); +} + +static void *compressor_query_interface(struct effect *iface, REFIID iid) +{ + struct dmo_compressorfx *effect = impl_compressor_from_effect(iface); + + if (IsEqualGUID(iid, &IID_IDirectSoundFXCompressor)) + return &effect->IDirectSoundFXCompressor_iface; + return NULL; +} + +static void compressor_destroy(struct effect *iface) +{ + struct dmo_compressorfx *effect = impl_compressor_from_effect(iface); + + free(effect); +} + +static const struct effect_ops compressor_ops = +{ + .destroy = compressor_destroy, + .query_interface = compressor_query_interface, +}; + +static HRESULT compressor_create(IUnknown *outer, IUnknown **out) +{ + struct dmo_compressorfx *object; + + if (!(object = calloc(1, sizeof(*object)))) + return E_OUTOFMEMORY; + + effect_init(&object->effect, outer, &compressor_ops); + object->IDirectSoundFXCompressor_iface.lpVtbl = &compressor_vtbl; + + TRACE("Created compressor effect %p.\n", object); + *out = &object->effect.IUnknown_inner; + return S_OK; +} + struct class_factory { IClassFactory IClassFactory_iface; @@ -1128,6 +1224,7 @@ class_factories[] = {&GUID_DSFX_STANDARD_PARAMEQ, {{&class_factory_vtbl}, eq_create}}, {&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}}, }; HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/653
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=121349 Your paranoid android. === debian11 (32 bit report) === dsdmo: dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef011f79-4000-406d-87af-bffb3fc39d57}, hr 0. dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}, hr 0. dsdmo.c:338: Test succeeded inside todo block: Got hr 0. dsdmo.c:343: Test failed: Got hr 0x80004001. dsdmo.c:344: Test failed: Got gain 1.81003481e+031 dB. dsdmo.c:345: Test failed: Got attack time 1.46936794e-039 ms. dsdmo.c:346: Test failed: Got threshold 1.53721204e+030 dB. dsdmo.c:347: Test failed: Got ratio 1.40129846e-045:1. dsdmo.c:348: Test failed: Got pre-delay 1.46936794e-039 ms. dsdmo.c:388: Test succeeded inside todo block: Got hr 0. dsdmo.c:393: Test failed: Got hr 0x80004001. dsdmo.c:394: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:395: Test failed: Got 1.46936794e-039% feedback. dsdmo.c:396: Test failed: Got left delay -1.13688572e-013 ms. dsdmo.c:397: Test failed: Got right delay 1.53721204e+030 ms. dsdmo.c:398: Test failed: Got delay swap 1. === debian11 (32 bit Chinese:China report) === dsdmo: dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef011f79-4000-406d-87af-bffb3fc39d57}, hr 0. dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}, hr 0. dsdmo.c:338: Test succeeded inside todo block: Got hr 0. dsdmo.c:343: Test failed: Got hr 0x80004001. dsdmo.c:344: Test failed: Got gain 1.81003481e+031 dB. dsdmo.c:345: Test failed: Got attack time 1.46936794e-039 ms. dsdmo.c:346: Test failed: Got threshold 1.53721204e+030 dB. dsdmo.c:347: Test failed: Got ratio 1.40129846e-045:1. dsdmo.c:348: Test failed: Got pre-delay 1.46936794e-039 ms. dsdmo.c:388: Test succeeded inside todo block: Got hr 0. dsdmo.c:393: Test failed: Got hr 0x80004001. dsdmo.c:394: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:395: Test failed: Got 1.46936794e-039% feedback. dsdmo.c:396: Test failed: Got left delay -1.13688572e-013 ms. dsdmo.c:397: Test failed: Got right delay 1.53721204e+030 ms. dsdmo.c:398: Test failed: Got delay swap 1. === debian11 (32 bit WoW report) === dsdmo: dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef011f79-4000-406d-87af-bffb3fc39d57}, hr 0. dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}, hr 0. dsdmo.c:338: Test succeeded inside todo block: Got hr 0. dsdmo.c:343: Test failed: Got hr 0x80004001. dsdmo.c:344: Test failed: Got gain 1.81003481e+031 dB. dsdmo.c:345: Test failed: Got attack time 1.46936794e-039 ms. dsdmo.c:346: Test failed: Got threshold 1.53721204e+030 dB. dsdmo.c:347: Test failed: Got ratio 1.40129846e-045:1. dsdmo.c:348: Test failed: Got pre-delay 1.46936794e-039 ms. dsdmo.c:388: Test succeeded inside todo block: Got hr 0. dsdmo.c:393: Test failed: Got hr 0x80004001. dsdmo.c:394: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:395: Test failed: Got 1.46936794e-039% feedback. dsdmo.c:396: Test failed: Got left delay -1.13688572e-013 ms. dsdmo.c:397: Test failed: Got right delay 1.53721204e+030 ms. dsdmo.c:398: Test failed: Got delay swap 1. === debian11 (64 bit WoW report) === dsdmo: dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef011f79-4000-406d-87af-bffb3fc39d57}, hr 0. dsdmo.c:565: Test succeeded inside todo block: Failed to create {ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}, hr 0. dsdmo.c:338: Test succeeded inside todo block: Got hr 0. dsdmo.c:343: Test failed: Got hr 0x80004001. dsdmo.c:344: Test failed: Got gain 1.81003481e+031 dB. dsdmo.c:345: Test failed: Got attack time 1.46936794e-039 ms. dsdmo.c:346: Test failed: Got threshold 1.53721204e+030 dB. dsdmo.c:347: Test failed: Got ratio 1.40129846e-045:1. dsdmo.c:348: Test failed: Got pre-delay 1.46936794e-039 ms. dsdmo.c:388: Test succeeded inside todo block: Got hr 0. dsdmo.c:393: Test failed: Got hr 0x80004001. dsdmo.c:394: Test failed: Got 1.81003481e+031% wetness. dsdmo.c:395: Test failed: Got 1.46936794e-039% feedback. dsdmo.c:396: Test failed: Got left delay -1.13688572e-013 ms. dsdmo.c:397: Test failed: Got right delay 1.53721204e+030 ms. dsdmo.c:398: Test failed: Got delay swap 1.
participants (3)
-
Alistair Leslie-Hughes -
Alistair Leslie-Hughes (@alesliehughes) -
Marvin