[PATCH 1/2] xaudio2: Implement CreateFX for legacy xaudio2 versions
Andrew Eikum
aeikum at codeweavers.com
Fri Oct 23 14:31:09 CDT 2015
The various xapofx versions all use the same CLSID to identify the
same effect types. In order to differentiate the versions in Wine
without duplicating a ton of code into each xapofx DLL, I made new
internal CLSIDs for each version of xapofx, which xaudio2_7 registers
and uses to tell them apart.
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
---
dlls/xapofx1_1/Makefile.in | 1 +
dlls/xapofx1_1/main.c | 16 +++++
dlls/xapofx1_1/xapofx1_1.spec | 2 +-
dlls/xapofx1_2/Makefile.in | 1 +
dlls/xapofx1_2/main.c | 16 +++++
dlls/xapofx1_2/xapofx1_2.spec | 2 +-
dlls/xapofx1_3/Makefile.in | 1 +
dlls/xapofx1_3/main.c | 20 +++++-
dlls/xapofx1_3/xapofx1_3.spec | 2 +-
dlls/xapofx1_4/Makefile.in | 1 +
dlls/xapofx1_4/main.c | 21 +++++-
dlls/xapofx1_4/xapofx1_4.spec | 2 +-
dlls/xapofx1_5/main.c | 12 +++-
dlls/xaudio2_7/tests/xaudio2.c | 137 ++++++++++++++++++++++++++++++++++++++
dlls/xaudio2_7/xaudio_classes.idl | 35 ++++++++++
dlls/xaudio2_7/xaudio_dll.c | 49 +++++++++-----
include/xapofx.h | 76 +++++++++++++++++++++
17 files changed, 371 insertions(+), 23 deletions(-)
create mode 100644 include/xapofx.h
diff --git a/dlls/xapofx1_1/Makefile.in b/dlls/xapofx1_1/Makefile.in
index aff49eb..48bd79e 100644
--- a/dlls/xapofx1_1/Makefile.in
+++ b/dlls/xapofx1_1/Makefile.in
@@ -1,4 +1,5 @@
MODULE = xapofx1_1.dll
+IMPORTS = ole32
C_SRCS = \
main.c
diff --git a/dlls/xapofx1_1/main.c b/dlls/xapofx1_1/main.c
index 8fd6022..3e4c839 100644
--- a/dlls/xapofx1_1/main.c
+++ b/dlls/xapofx1_1/main.c
@@ -19,8 +19,11 @@
#include "config.h"
#include <stdarg.h>
+#include "initguid.h"
#include "windef.h"
#include "winbase.h"
+#include "compobj.h"
+#include "xapofx.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(xapofx);
@@ -43,3 +46,16 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
}
return TRUE;
}
+
+HRESULT CDECL CreateFX(REFCLSID clsid, IUnknown **out)
+{
+ const GUID *class = clsid;
+
+ TRACE("%s %p\n", debugstr_guid(clsid), out);
+
+ if(IsEqualGUID(clsid, &CLSID_FXReverb27) ||
+ IsEqualGUID(clsid, &CLSID_FXReverb))
+ class = &CLSID_WINE_FXReverb11;
+
+ return CoCreateInstance(class, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)out);
+}
diff --git a/dlls/xapofx1_1/xapofx1_1.spec b/dlls/xapofx1_1/xapofx1_1.spec
index bc17511..9b768cb 100644
--- a/dlls/xapofx1_1/xapofx1_1.spec
+++ b/dlls/xapofx1_1/xapofx1_1.spec
@@ -1 +1 @@
-@ cdecl CreateFX(ptr ptr) xapofx1_5.CreateFX
+@ cdecl CreateFX(ptr ptr)
diff --git a/dlls/xapofx1_2/Makefile.in b/dlls/xapofx1_2/Makefile.in
index fb76b12..21a2ca7 100644
--- a/dlls/xapofx1_2/Makefile.in
+++ b/dlls/xapofx1_2/Makefile.in
@@ -1,4 +1,5 @@
MODULE = xapofx1_2.dll
+IMPORTS = ole32
C_SRCS = \
main.c
diff --git a/dlls/xapofx1_2/main.c b/dlls/xapofx1_2/main.c
index e873b58..b70a5e0 100644
--- a/dlls/xapofx1_2/main.c
+++ b/dlls/xapofx1_2/main.c
@@ -19,8 +19,11 @@
#include "config.h"
#include <stdarg.h>
+#include "initguid.h"
#include "windef.h"
#include "winbase.h"
+#include "compobj.h"
+#include "xapofx.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(xapofx);
@@ -43,3 +46,16 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
}
return TRUE;
}
+
+HRESULT CDECL CreateFX(REFCLSID clsid, IUnknown **out)
+{
+ const GUID *class = clsid;
+
+ TRACE("%s %p\n", debugstr_guid(clsid), out);
+
+ if(IsEqualGUID(clsid, &CLSID_FXReverb27) ||
+ IsEqualGUID(clsid, &CLSID_FXReverb))
+ class = &CLSID_WINE_FXReverb12;
+
+ return CoCreateInstance(class, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)out);
+}
diff --git a/dlls/xapofx1_2/xapofx1_2.spec b/dlls/xapofx1_2/xapofx1_2.spec
index bc17511..9b768cb 100644
--- a/dlls/xapofx1_2/xapofx1_2.spec
+++ b/dlls/xapofx1_2/xapofx1_2.spec
@@ -1 +1 @@
-@ cdecl CreateFX(ptr ptr) xapofx1_5.CreateFX
+@ cdecl CreateFX(ptr ptr)
diff --git a/dlls/xapofx1_3/Makefile.in b/dlls/xapofx1_3/Makefile.in
index 3730872..31ef5b3 100644
--- a/dlls/xapofx1_3/Makefile.in
+++ b/dlls/xapofx1_3/Makefile.in
@@ -1,4 +1,5 @@
MODULE = xapofx1_3.dll
+IMPORTS = ole32
C_SRCS = \
main.c
diff --git a/dlls/xapofx1_3/main.c b/dlls/xapofx1_3/main.c
index 6a7f185..72e1d0d 100644
--- a/dlls/xapofx1_3/main.c
+++ b/dlls/xapofx1_3/main.c
@@ -17,11 +17,16 @@
*/
#include "config.h"
-
#include <stdarg.h>
+#include "initguid.h"
#include "windef.h"
#include "winbase.h"
+#include "compobj.h"
+#include "xapofx.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(xaudio2);
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
@@ -36,3 +41,16 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
return TRUE;
}
+
+HRESULT CDECL CreateFX(REFCLSID clsid, IUnknown **out)
+{
+ const GUID *class = clsid;
+
+ TRACE("%s %p\n", debugstr_guid(clsid), out);
+
+ if(IsEqualGUID(clsid, &CLSID_FXReverb27) ||
+ IsEqualGUID(clsid, &CLSID_FXReverb))
+ class = &CLSID_WINE_FXReverb13;
+
+ return CoCreateInstance(class, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)out);
+}
diff --git a/dlls/xapofx1_3/xapofx1_3.spec b/dlls/xapofx1_3/xapofx1_3.spec
index bc17511..9b768cb 100644
--- a/dlls/xapofx1_3/xapofx1_3.spec
+++ b/dlls/xapofx1_3/xapofx1_3.spec
@@ -1 +1 @@
-@ cdecl CreateFX(ptr ptr) xapofx1_5.CreateFX
+@ cdecl CreateFX(ptr ptr)
diff --git a/dlls/xapofx1_4/Makefile.in b/dlls/xapofx1_4/Makefile.in
index 12978d8..b65ea90 100644
--- a/dlls/xapofx1_4/Makefile.in
+++ b/dlls/xapofx1_4/Makefile.in
@@ -1,4 +1,5 @@
MODULE = xapofx1_4.dll
+IMPORTS = ole32
C_SRCS = \
main.c
diff --git a/dlls/xapofx1_4/main.c b/dlls/xapofx1_4/main.c
index 1b223ad..991a4a7 100644
--- a/dlls/xapofx1_4/main.c
+++ b/dlls/xapofx1_4/main.c
@@ -15,12 +15,18 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+
#include "config.h"
-
#include <stdarg.h>
+#include "initguid.h"
#include "windef.h"
#include "winbase.h"
+#include "compobj.h"
+#include "xapofx.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(xaudio2);
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
@@ -35,3 +41,16 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
return TRUE;
}
+
+HRESULT CDECL CreateFX(REFCLSID clsid, IUnknown **out)
+{
+ const GUID *class = clsid;
+
+ TRACE("%s %p\n", debugstr_guid(clsid), out);
+
+ if(IsEqualGUID(clsid, &CLSID_FXReverb27) ||
+ IsEqualGUID(clsid, &CLSID_FXReverb))
+ class = &CLSID_WINE_FXReverb14;
+
+ return CoCreateInstance(class, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)out);
+}
diff --git a/dlls/xapofx1_4/xapofx1_4.spec b/dlls/xapofx1_4/xapofx1_4.spec
index bc17511..9b768cb 100644
--- a/dlls/xapofx1_4/xapofx1_4.spec
+++ b/dlls/xapofx1_4/xapofx1_4.spec
@@ -1 +1 @@
-@ cdecl CreateFX(ptr ptr) xapofx1_5.CreateFX
+@ cdecl CreateFX(ptr ptr)
diff --git a/dlls/xapofx1_5/main.c b/dlls/xapofx1_5/main.c
index 4865d31..45ecefc 100644
--- a/dlls/xapofx1_5/main.c
+++ b/dlls/xapofx1_5/main.c
@@ -15,14 +15,15 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+
#include "config.h"
-
#include <stdarg.h>
#include "initguid.h"
#include "windef.h"
#include "winbase.h"
#include "compobj.h"
+#include "xapofx.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(xaudio2);
@@ -43,6 +44,13 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
HRESULT CDECL CreateFX(REFCLSID clsid, IUnknown **out)
{
+ const GUID *class = clsid;
+
TRACE("%s %p\n", debugstr_guid(clsid), out);
- return CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)out);
+
+ if(IsEqualGUID(clsid, &CLSID_FXReverb27) ||
+ IsEqualGUID(clsid, &CLSID_FXReverb))
+ class = &CLSID_WINE_FXReverb15;
+
+ return CoCreateInstance(class, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)out);
}
diff --git a/dlls/xaudio2_7/tests/xaudio2.c b/dlls/xaudio2_7/tests/xaudio2.c
index 23da38b..7d7ee17 100644
--- a/dlls/xaudio2_7/tests/xaudio2.c
+++ b/dlls/xaudio2_7/tests/xaudio2.c
@@ -25,6 +25,7 @@
#include "xaudio2.h"
#include "xaudio2fx.h"
#include "xapo.h"
+#include "xapofx.h"
#include "mmsystem.h"
static BOOL xaudio27;
@@ -246,12 +247,26 @@ static void test_simple_streaming(IXAudio2 *xa)
/* hook up volume meter */
if(xaudio27){
+ IXAPO *xapo;
+
hr = CoCreateInstance(&CLSID_AudioVolumeMeter, NULL,
CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)&vumeter);
ok(hr == S_OK, "CoCreateInstance(AudioVolumeMeter) failed: %08x\n", hr);
+
+ hr = IUnknown_QueryInterface(vumeter, &IID_IXAPO27, (void**)&xapo);
+ ok(hr == S_OK, "Couldn't get IXAPO27 interface: %08x\n", hr);
+ if(SUCCEEDED(hr))
+ IXAPO_Release(xapo);
}else{
+ IXAPO *xapo;
+
hr = pCreateAudioVolumeMeter(&vumeter);
ok(hr == S_OK, "CreateAudioVolumeMeter failed: %08x\n", hr);
+
+ hr = IUnknown_QueryInterface(vumeter, &IID_IXAPO, (void**)&xapo);
+ ok(hr == S_OK, "Couldn't get IXAPO interface: %08x\n", hr);
+ if(SUCCEEDED(hr))
+ IXAPO_Release(xapo);
}
effect.InitialState = TRUE;
@@ -778,6 +793,126 @@ static UINT32 test_DeviceDetails(IXAudio27 *xa)
return count;
}
+static void test_xapo_creation_legacy(const char *module, unsigned int version)
+{
+ HANDLE xapofxdll;
+ HRESULT hr;
+ IUnknown *fx_unk;
+ unsigned int i;
+
+ HRESULT (CDECL *pCreateFX)(REFCLSID,IUnknown**) = NULL;
+
+ /* CLSIDs are the same across all versions */
+ static struct {
+ const GUID *clsid;
+ BOOL todo;
+ } const_clsids[] = {
+ { &CLSID_FXEQ27, TRUE },
+ { &CLSID_FXMasteringLimiter27, TRUE },
+ { &CLSID_FXReverb27, FALSE },
+ { &CLSID_FXEcho27, TRUE},
+ /* older versions of xapofx actually have support for new clsids */
+ { &CLSID_FXEQ, TRUE },
+ { &CLSID_FXMasteringLimiter, TRUE },
+ { &CLSID_FXReverb, FALSE },
+ { &CLSID_FXEcho, TRUE}
+ };
+
+ /* different CLSID for each version */
+ static const GUID *avm_clsids[] = {
+ &CLSID_AudioVolumeMeter20,
+ &CLSID_AudioVolumeMeter21,
+ &CLSID_AudioVolumeMeter22,
+ &CLSID_AudioVolumeMeter23,
+ &CLSID_AudioVolumeMeter24,
+ &CLSID_AudioVolumeMeter25,
+ &CLSID_AudioVolumeMeter26,
+ &CLSID_AudioVolumeMeter
+ };
+
+ static const GUID *ar_clsids[] = {
+ &CLSID_AudioReverb20,
+ &CLSID_AudioReverb21,
+ &CLSID_AudioReverb22,
+ &CLSID_AudioReverb23,
+ &CLSID_AudioReverb24,
+ &CLSID_AudioReverb25,
+ &CLSID_AudioReverb26,
+ &CLSID_AudioReverb
+ };
+
+ xapofxdll = LoadLibraryA(module);
+ if(xapofxdll){
+ pCreateFX = (void*)GetProcAddress(xapofxdll, "CreateFX");
+ ok(pCreateFX != NULL, "%s did not have CreateFX?\n", module);
+ if(!pCreateFX){
+ FreeLibrary(xapofxdll);
+ return;
+ }
+ }else{
+ win_skip("Couldn't load %s\n", module);
+ return;
+ }
+
+ if(pCreateFX){
+ for(i = 0; i < sizeof(const_clsids) / sizeof(*const_clsids); ++i){
+ hr = pCreateFX(const_clsids[i].clsid, &fx_unk);
+ if(const_clsids[i].todo)
+ todo_wine ok(hr == S_OK, "%s: CreateFX(%s) failed: %08x\n", module, wine_dbgstr_guid(const_clsids[i].clsid), hr);
+ else
+ ok(hr == S_OK, "%s: CreateFX(%s) failed: %08x\n", module, wine_dbgstr_guid(const_clsids[i].clsid), hr);
+ if(SUCCEEDED(hr)){
+ IXAPO *xapo;
+ hr = IUnknown_QueryInterface(fx_unk, &IID_IXAPO27, (void**)&xapo);
+ ok(hr == S_OK, "Couldn't get IXAPO27 interface: %08x\n", hr);
+ if(SUCCEEDED(hr))
+ IXAPO_Release(xapo);
+ IUnknown_Release(fx_unk);
+ }
+
+ hr = CoCreateInstance(const_clsids[i].clsid, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IUnknown, (void**)&fx_unk);
+ ok(hr == REGDB_E_CLASSNOTREG, "CoCreateInstance should have failed: %08x\n", hr);
+ if(SUCCEEDED(hr))
+ IUnknown_Release(fx_unk);
+ }
+
+ hr = pCreateFX(avm_clsids[version - 20], &fx_unk);
+ ok(hr == S_OK, "%s: CreateFX(%s) failed: %08x\n", module, wine_dbgstr_guid(avm_clsids[version - 20]), hr);
+ if(SUCCEEDED(hr)){
+ IXAPO *xapo;
+ hr = IUnknown_QueryInterface(fx_unk, &IID_IXAPO27, (void**)&xapo);
+ ok(hr == S_OK, "Couldn't get IXAPO27 interface: %08x\n", hr);
+ if(SUCCEEDED(hr))
+ IXAPO_Release(xapo);
+ IUnknown_Release(fx_unk);
+ }
+
+ hr = pCreateFX(ar_clsids[version - 20], &fx_unk);
+ ok(hr == S_OK, "%s: CreateFX(%s) failed: %08x\n", module, wine_dbgstr_guid(ar_clsids[version - 20]), hr);
+ if(SUCCEEDED(hr)){
+ IXAPO *xapo;
+ hr = IUnknown_QueryInterface(fx_unk, &IID_IXAPO27, (void**)&xapo);
+ ok(hr == S_OK, "Couldn't get IXAPO27 interface: %08x\n", hr);
+ if(SUCCEEDED(hr))
+ IXAPO_Release(xapo);
+ IUnknown_Release(fx_unk);
+ }
+ }
+
+ FreeLibrary(xapofxdll);
+}
+
+static void test_xapo_creation(void)
+{
+ test_xapo_creation_legacy("xapofx1_1.dll", 22);
+ test_xapo_creation_legacy("xapofx1_2.dll", 23);
+ test_xapo_creation_legacy("xapofx1_3.dll", 24);
+ test_xapo_creation_legacy("xapofx1_3.dll", 25);
+ test_xapo_creation_legacy("xapofx1_4.dll", 26);
+ test_xapo_creation_legacy("xapofx1_5.dll", 27);
+}
+
static UINT32 check_has_devices(IXAudio2 *xa)
{
HRESULT hr;
@@ -808,6 +943,8 @@ START_TEST(xaudio2)
pCreateAudioVolumeMeter = (void*)GetProcAddress(xa28dll, "CreateAudioVolumeMeter");
}
+ test_xapo_creation();
+
/* XAudio 2.7 (Jun 2010 DirectX) */
hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER,
&IID_IXAudio27, (void**)&xa27);
diff --git a/dlls/xaudio2_7/xaudio_classes.idl b/dlls/xaudio2_7/xaudio_classes.idl
index 7be37fd..1f8b020 100644
--- a/dlls/xaudio2_7/xaudio_classes.idl
+++ b/dlls/xaudio2_7/xaudio_classes.idl
@@ -47,3 +47,38 @@ coclass AudioReverb { interface IUnknown; }
uuid(962f5027-99be-4692-a468-85802cf8de61)
]
coclass XACT31 { interface IUnknown; }
+
+[
+ helpstring("XAPOFX1.1 FXReverb Class (Wine)"),
+ threading(both),
+ uuid(a90bc001-e897-e897-7439-43FF02000101)
+]
+coclass FXReverb11 { interface IXAPO; }
+
+[
+ helpstring("XAPOFX1.2 FXReverb Class (Wine)"),
+ threading(both),
+ uuid(a90bc001-e897-e897-7439-43FF02000102)
+]
+coclass FXReverb12 { interface IXAPO; }
+
+[
+ helpstring("XAPOFX1.3 FXReverb Class (Wine)"),
+ threading(both),
+ uuid(a90bc001-e897-e897-7439-43FF02000103)
+]
+coclass FXReverb13 { interface IXAPO; }
+
+[
+ helpstring("XAPOFX1.4 FXReverb Class (Wine)"),
+ threading(both),
+ uuid(a90bc001-e897-e897-7439-43FF02000104)
+]
+coclass FXReverb14 { interface IXAPO; }
+
+[
+ helpstring("XAPOFX1.5 FXReverb Class (Wine)"),
+ threading(both),
+ uuid(a90bc001-e897-e897-7439-43FF02000105)
+]
+coclass FXReverb15 { interface IXAPO; }
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index a4a9399..d55d39e 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -29,6 +29,8 @@
#include "ole2.h"
#include "rpcproxy.h"
+#include "xapofx.h"
+
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(xaudio2);
@@ -2507,13 +2509,13 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
TRACE("(%s, %s, %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
- if IsEqualGUID(rclsid, &CLSID_XAudio20){
+ if(IsEqualGUID(rclsid, &CLSID_XAudio20)){
factory = make_xaudio2_factory(20);
- }else if IsEqualGUID(rclsid, &CLSID_XAudio21){
+ }else if(IsEqualGUID(rclsid, &CLSID_XAudio21)){
factory = make_xaudio2_factory(21);
- }else if IsEqualGUID(rclsid, &CLSID_XAudio22){
+ }else if(IsEqualGUID(rclsid, &CLSID_XAudio22)){
factory = make_xaudio2_factory(22);
- }else if IsEqualGUID(rclsid, &CLSID_XAudio23){
+ }else if(IsEqualGUID(rclsid, &CLSID_XAudio23)){
factory = make_xaudio2_factory(23);
}else if(IsEqualGUID(rclsid, &CLSID_XAudio24)){
factory = make_xaudio2_factory(24);
@@ -2524,13 +2526,13 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
}else if(IsEqualGUID(rclsid, &CLSID_XAudio2)){
factory = make_xaudio2_factory(27);
- }else if IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter20){
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter20)){
factory = make_xapo_factory(&CLSID_AudioVolumeMeter, 20);
- }else if IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter21){
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter21)){
factory = make_xapo_factory(&CLSID_AudioVolumeMeter, 21);
- }else if IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter22){
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter22)){
factory = make_xapo_factory(&CLSID_AudioVolumeMeter, 22);
- }else if IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter23){
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter23)){
factory = make_xapo_factory(&CLSID_AudioVolumeMeter, 23);
}else if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter24)){
factory = make_xapo_factory(&CLSID_AudioVolumeMeter, 24);
@@ -2541,23 +2543,40 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
}else if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter)){
factory = make_xapo_factory(&CLSID_AudioVolumeMeter, 27);
- }else if IsEqualGUID(rclsid, &CLSID_AudioReverb20){
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb20)){
factory = make_xapo_factory(&CLSID_AudioReverb, 20);
- }else if IsEqualGUID(rclsid, &CLSID_AudioReverb21){
+
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb21) ||
+ IsEqualGUID(rclsid, &CLSID_WINE_FXReverb10)){
factory = make_xapo_factory(&CLSID_AudioReverb, 21);
- }else if IsEqualGUID(rclsid, &CLSID_AudioReverb22){
+
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb22) ||
+ IsEqualGUID(rclsid, &CLSID_WINE_FXReverb11)){
factory = make_xapo_factory(&CLSID_AudioReverb, 22);
- }else if IsEqualGUID(rclsid, &CLSID_AudioReverb23){
+
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb23) ||
+ IsEqualGUID(rclsid, &CLSID_WINE_FXReverb12)){
factory = make_xapo_factory(&CLSID_AudioReverb, 23);
- }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb24)){
+
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb24) ||
+ IsEqualGUID(rclsid, &CLSID_WINE_FXReverb13)){
factory = make_xapo_factory(&CLSID_AudioReverb, 24);
+
}else if(IsEqualGUID(rclsid, &CLSID_AudioReverb25)){
factory = make_xapo_factory(&CLSID_AudioReverb, 25);
- }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb26)){
+
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb26) ||
+ IsEqualGUID(rclsid, &CLSID_WINE_FXReverb14)){
factory = make_xapo_factory(&CLSID_AudioReverb, 26);
- }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb)){
+
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb) ||
+ IsEqualGUID(rclsid, &CLSID_WINE_FXReverb15)){
factory = make_xapo_factory(&CLSID_AudioReverb, 27);
+
+ }else if(IsEqualGUID(rclsid, &CLSID_WINE_FXReverb28)){
+ factory = make_xapo_factory(&CLSID_AudioReverb, 28);
}
+
if(!factory) return CLASS_E_CLASSNOTAVAILABLE;
return IClassFactory_QueryInterface(factory, riid, ppv);
diff --git a/include/xapofx.h b/include/xapofx.h
new file mode 100644
index 0000000..9a51689
--- /dev/null
+++ b/include/xapofx.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2015 Andrew Eikum for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* CLSIDs used by CreateFX, but never registered */
+
+#ifndef _XAPOFX_H
+#define _XAPOFX_H
+
+/* xapofx 1.0 through 1.5 */
+DEFINE_GUID(CLSID_FXEQ27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x00);
+/* xaudio 2.8 */
+DEFINE_GUID(CLSID_FXEQ, 0xf5e01117, 0xd6c4, 0x485a, 0xa3, 0xf5, 0x69, 0x51, 0x96, 0xf3, 0xdb, 0xfa);
+/* wine internal */
+DEFINE_GUID(CLSID_WINE_FXEQ10, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x00, 0x00, 0x01, 0x00);
+DEFINE_GUID(CLSID_WINE_FXEQ11, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x00, 0x00, 0x01, 0x01);
+DEFINE_GUID(CLSID_WINE_FXEQ12, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x00, 0x00, 0x01, 0x02);
+DEFINE_GUID(CLSID_WINE_FXEQ13, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x00, 0x00, 0x01, 0x03);
+DEFINE_GUID(CLSID_WINE_FXEQ14, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x00, 0x00, 0x01, 0x04);
+DEFINE_GUID(CLSID_WINE_FXEQ15, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x00, 0x00, 0x01, 0x05);
+DEFINE_GUID(CLSID_WINE_FXEQ28, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x00, 0x00, 0x02, 0x08);
+
+/* xapofx 1.0 through 1.5 */
+DEFINE_GUID(CLSID_FXMasteringLimiter27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x01);
+/* xaudio 2.8 */
+DEFINE_GUID(CLSID_FXMasteringLimiter, 0xc4137916, 0x2be1, 0x46fd, 0x85, 0x99, 0x44, 0x15, 0x36, 0xf4, 0x98, 0x56);
+/* wine internal */
+DEFINE_GUID(CLSID_WINE_FXMasteringLimiter10, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x01, 0x00, 0x01, 0x00);
+DEFINE_GUID(CLSID_WINE_FXMasteringLimiter11, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x01, 0x00, 0x01, 0x01);
+DEFINE_GUID(CLSID_WINE_FXMasteringLimiter12, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x01, 0x00, 0x01, 0x02);
+DEFINE_GUID(CLSID_WINE_FXMasteringLimiter13, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x01, 0x00, 0x01, 0x03);
+DEFINE_GUID(CLSID_WINE_FXMasteringLimiter14, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x01, 0x00, 0x01, 0x04);
+DEFINE_GUID(CLSID_WINE_FXMasteringLimiter15, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x01, 0x00, 0x01, 0x05);
+DEFINE_GUID(CLSID_WINE_FXMasteringLimiter28, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x01, 0x00, 0x02, 0x08);
+
+/* xapofx 1.0 through 1.5 */
+DEFINE_GUID(CLSID_FXReverb27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x02);
+/* xaudio 2.8 */
+DEFINE_GUID(CLSID_FXReverb, 0x7d9aca56, 0xcb68, 0x4807, 0xb6, 0x32, 0xb1, 0x37, 0x35, 0x2e, 0x85, 0x96);
+/* wine internal */
+DEFINE_GUID(CLSID_WINE_FXReverb10, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x02, 0x00, 0x01, 0x00);
+DEFINE_GUID(CLSID_WINE_FXReverb11, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x02, 0x00, 0x01, 0x01);
+DEFINE_GUID(CLSID_WINE_FXReverb12, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x02, 0x00, 0x01, 0x02);
+DEFINE_GUID(CLSID_WINE_FXReverb13, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x02, 0x00, 0x01, 0x03);
+DEFINE_GUID(CLSID_WINE_FXReverb14, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x02, 0x00, 0x01, 0x04);
+DEFINE_GUID(CLSID_WINE_FXReverb15, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x02, 0x00, 0x01, 0x05);
+DEFINE_GUID(CLSID_WINE_FXReverb28, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x02, 0x00, 0x02, 0x08);
+
+/* xapofx 1.0 through 1.5 */
+DEFINE_GUID(CLSID_FXEcho27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x03);
+/* xaudio 2.8 */
+DEFINE_GUID(CLSID_FXEcho, 0x5039d740, 0xf736, 0x449a, 0x84, 0xd3, 0xa5, 0x62, 0x02, 0x55, 0x7b, 0x87);
+/* wine internal */
+DEFINE_GUID(CLSID_WINE_FXEcho10, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x03, 0x00, 0x01, 0x00);
+DEFINE_GUID(CLSID_WINE_FXEcho11, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x03, 0x00, 0x01, 0x01);
+DEFINE_GUID(CLSID_WINE_FXEcho12, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x03, 0x00, 0x01, 0x02);
+DEFINE_GUID(CLSID_WINE_FXEcho13, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x03, 0x00, 0x01, 0x03);
+DEFINE_GUID(CLSID_WINE_FXEcho14, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x03, 0x00, 0x01, 0x04);
+DEFINE_GUID(CLSID_WINE_FXEcho15, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x03, 0x00, 0x01, 0x05);
+DEFINE_GUID(CLSID_WINE_FXEcho28, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0xFF, 0x03, 0x00, 0x02, 0x08);
+
+#endif
--
2.6.2
More information about the wine-patches
mailing list