From 929ab3e527b25bcfea375e4373230748868d8714 Mon Sep 17 00:00:00 2001 From: Andrew Eikum Date: Thu, 30 Jul 2015 10:58:54 -0500 Subject: [PATCH] xaudio2_8: Add DLL and implement XAudio2Create. --- configure | 2 + configure.ac | 1 + dlls/xaudio2_8/Makefile.in | 5 +++ dlls/xaudio2_8/xaudio2_8.spec | 1 + dlls/xaudio2_8/xaudio_dll.c | 73 +++++++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+) create mode 100644 dlls/xaudio2_8/Makefile.in create mode 100644 dlls/xaudio2_8/xaudio2_8.spec create mode 100644 dlls/xaudio2_8/xaudio_dll.c diff --git a/configure b/configure index da4c15a81a6..dff3e10d9cf 100755 --- a/configure +++ b/configure @@ -1355,6 +1355,7 @@ enable_xapofx1_3 enable_xapofx1_4 enable_xapofx1_5 enable_xaudio2_7 +enable_xaudio2_8 enable_xinput1_1 enable_xinput1_2 enable_xinput1_3 @@ -17821,6 +17822,7 @@ wine_fn_config_dll xapofx1_3 enable_xapofx1_3 wine_fn_config_dll xapofx1_4 enable_xapofx1_4 wine_fn_config_dll xapofx1_5 enable_xapofx1_5 wine_fn_config_dll xaudio2_7 enable_xaudio2_7 clean +wine_fn_config_dll xaudio2_8 enable_xaudio2_8 wine_fn_config_dll xinput1_1 enable_xinput1_1 wine_fn_config_dll xinput1_2 enable_xinput1_2 wine_fn_config_dll xinput1_3 enable_xinput1_3 implib xinput diff --git a/configure.ac b/configure.ac index 45b8fdba5a4..04897391c0a 100644 --- a/configure.ac +++ b/configure.ac @@ -3424,6 +3424,7 @@ WINE_CONFIG_DLL(xapofx1_3) WINE_CONFIG_DLL(xapofx1_4) WINE_CONFIG_DLL(xapofx1_5) WINE_CONFIG_DLL(xaudio2_7,,[clean]) +WINE_CONFIG_DLL(xaudio2_8) WINE_CONFIG_DLL(xinput1_1) WINE_CONFIG_DLL(xinput1_2) WINE_CONFIG_DLL(xinput1_3,,[implib],[xinput]) diff --git a/dlls/xaudio2_8/Makefile.in b/dlls/xaudio2_8/Makefile.in new file mode 100644 index 00000000000..d5fb624b881 --- /dev/null +++ b/dlls/xaudio2_8/Makefile.in @@ -0,0 +1,5 @@ +MODULE = xaudio2_8.dll +IMPORTS = ole32 + +C_SRCS = \ + xaudio_dll.c diff --git a/dlls/xaudio2_8/xaudio2_8.spec b/dlls/xaudio2_8/xaudio2_8.spec new file mode 100644 index 00000000000..dd4fee15f76 --- /dev/null +++ b/dlls/xaudio2_8/xaudio2_8.spec @@ -0,0 +1 @@ +@ stdcall XAudio2Create(ptr long long) diff --git a/dlls/xaudio2_8/xaudio_dll.c b/dlls/xaudio2_8/xaudio_dll.c new file mode 100644 index 00000000000..e5dfb9d4344 --- /dev/null +++ b/dlls/xaudio2_8/xaudio_dll.c @@ -0,0 +1,73 @@ +/* + * 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 + */ + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" + +#include "initguid.h" +#include "xaudio2.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls( hinstDLL ); + break; + } + return TRUE; +} + +HRESULT WINAPI XAudio2Create(IXAudio2 **ppxa2, UINT32 flags, XAUDIO2_PROCESSOR proc) +{ + HRESULT hr; + IXAudio2 *xa2; + IXAudio27 *xa27; + + /* create XAudio2 2.8 instance */ + hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, + &IID_IXAudio2, (void**)&xa2); + if(FAILED(hr)) + return hr; + + hr = IXAudio2_QueryInterface(xa2, &IID_IXAudio27, (void**)&xa27); + if(FAILED(hr)){ + IXAudio2_Release(xa2); + return hr; + } + + hr = IXAudio27_Initialize(xa27, flags, proc); + if(FAILED(hr)){ + IXAudio27_Release(xa27); + IXAudio2_Release(xa2); + return hr; + } + + IXAudio27_Release(xa27); + + *ppxa2 = xa2; + + return S_OK; +}