diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj index dad6e891ed..1429782557 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj @@ -36,7 +36,6 @@ - @@ -52,7 +51,6 @@ - diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj.filters b/Source/Core/AudioCommon/AudioCommon.vcxproj.filters index 661c6ce0ea..9d7975c53f 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj.filters +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj.filters @@ -6,7 +6,6 @@ - @@ -30,7 +29,6 @@ - diff --git a/Source/Core/AudioCommon/CMakeLists.txt b/Source/Core/AudioCommon/CMakeLists.txt index 7ede29eb41..7ed1eba65d 100644 --- a/Source/Core/AudioCommon/CMakeLists.txt +++ b/Source/Core/AudioCommon/CMakeLists.txt @@ -39,7 +39,7 @@ if(ENABLE_OPENAL) find_package(OpenAL) if(OPENAL_FOUND) message(STATUS "OpenAL found, enabling OpenAL sound backend") - target_sources(audiocommon PRIVATE OpenALStream.cpp aldlist.cpp) + target_sources(audiocommon PRIVATE OpenALStream.cpp) target_link_libraries(audiocommon PRIVATE OpenAL::OpenAL) target_compile_definitions(audiocommon PRIVATE HAVE_OPENAL=1) else() diff --git a/Source/Core/AudioCommon/OpenALStream.cpp b/Source/Core/AudioCommon/OpenALStream.cpp index 753a925288..ffb0bf93dd 100644 --- a/Source/Core/AudioCommon/OpenALStream.cpp +++ b/Source/Core/AudioCommon/OpenALStream.cpp @@ -9,7 +9,6 @@ #include #include "AudioCommon/OpenALStream.h" -#include "AudioCommon/aldlist.h" #include "Common/Logging/Log.h" #include "Common/MsgHandler.h" #include "Common/Thread.h" @@ -24,21 +23,19 @@ // bool OpenALStream::Start() { - ALDeviceList pDeviceList; - if (!pDeviceList.GetNumDevices()) + if (!alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT")) { PanicAlertT("OpenAL: can't find sound devices"); return false; } - char* defDevName = pDeviceList.GetDeviceName(pDeviceList.GetDefaultDevice()); + const char* defaultDeviceName = alcGetString(nullptr, ALC_DEFAULT_DEVICE_SPECIFIER); + INFO_LOG(AUDIO, "Found OpenAL device %s", defaultDeviceName); - INFO_LOG(AUDIO, "Found OpenAL device %s", defDevName); - - ALCdevice* pDevice = alcOpenDevice(defDevName); + ALCdevice* pDevice = alcOpenDevice(defaultDeviceName); if (!pDevice) { - PanicAlertT("OpenAL: can't open device %s", defDevName); + PanicAlertT("OpenAL: can't open device %s", defaultDeviceName); return false; } @@ -46,7 +43,7 @@ bool OpenALStream::Start() if (!pContext) { alcCloseDevice(pDevice); - PanicAlertT("OpenAL: can't create context for device %s", defDevName); + PanicAlertT("OpenAL: can't create context for device %s", defaultDeviceName); return false; } diff --git a/Source/Core/AudioCommon/aldlist.cpp b/Source/Core/AudioCommon/aldlist.cpp deleted file mode 100644 index accd13c595..0000000000 --- a/Source/Core/AudioCommon/aldlist.cpp +++ /dev/null @@ -1,386 +0,0 @@ -// Copyright 2009 Dolphin Emulator Project -// Licensed under GPLv2+ -// Refer to the license.txt file included. - -/* - * Copyright (c) 2006, Creative Labs Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted - * provided - * that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this list of - * conditions and - * the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, this list of - * conditions - * and the following disclaimer in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Creative Labs Inc. nor the names of its contributors may be used to - * endorse or - * promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR - * IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include "AudioCommon/aldlist.h" -#include "Common/CommonFuncs.h" -#include "Common/CommonTypes.h" -#ifdef _WIN32 -#include "../../../Externals/OpenAL/include/al.h" -#include "../../../Externals/OpenAL/include/alc.h" -#elif defined(__APPLE__) -#include -#include -#else -#include -#include -#endif - -/* - * Init call - */ -ALDeviceList::ALDeviceList() -{ - ALDEVICEINFO ALDeviceInfo; - - // DeviceInfo vector stores, for each enumerated device, it's device name, selection status, spec - // version #, and extension support - vDeviceInfo.clear(); - vDeviceInfo.reserve(10); - - defaultDeviceIndex = 0; - - // grab function pointers for 1.0-API functions, and if successful proceed to enumerate all - // devices - // if (LoadOAL10Library(nullptr, &ALFunction) == TRUE) { - if (alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT")) - { - const char* devices = alcGetString(nullptr, ALC_DEVICE_SPECIFIER); - const char* defaultDeviceName = alcGetString(nullptr, ALC_DEFAULT_DEVICE_SPECIFIER); - // go through device list (each device terminated with a single nullptr, list terminated with - // double nullptr) - for (s32 index = 0; devices != nullptr && strlen(devices) > 0; - index++, devices += strlen(devices) + 1) - { - if (strcmp(defaultDeviceName, devices) == 0) - { - defaultDeviceIndex = index; - } - ALCdevice* device = alcOpenDevice(devices); - if (device) - { - ALCcontext* context = alcCreateContext(device, nullptr); - if (context) - { - alcMakeContextCurrent(context); - // if new actual device name isn't already in the list, then add it... - const char* actualDeviceName = alcGetString(device, ALC_DEVICE_SPECIFIER); - bool bNewName = true; - for (s32 i = 0; i < GetNumDevices(); i++) - { - if (strcmp(GetDeviceName(i), actualDeviceName) == 0) - { - bNewName = false; - } - } - if ((bNewName) && (actualDeviceName != nullptr) && (strlen(actualDeviceName) > 0)) - { - ALDeviceInfo.bSelected = true; - ALDeviceInfo.strDeviceName = actualDeviceName; - alcGetIntegerv(device, ALC_MAJOR_VERSION, sizeof(s32), &ALDeviceInfo.iMajorVersion); - alcGetIntegerv(device, ALC_MINOR_VERSION, sizeof(s32), &ALDeviceInfo.iMinorVersion); - - ALDeviceInfo.pvstrExtensions = new std::vector; - - // Check for ALC Extensions - if (alcIsExtensionPresent(device, "ALC_EXT_CAPTURE") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("ALC_EXT_CAPTURE"); - if (alcIsExtensionPresent(device, "ALC_EXT_EFX") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("ALC_EXT_EFX"); - - // Check for AL Extensions - if (alIsExtensionPresent("AL_EXT_OFFSET") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("AL_EXT_OFFSET"); - - if (alIsExtensionPresent("AL_EXT_LINEAR_DISTANCE") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("AL_EXT_LINEAR_DISTANCE"); - if (alIsExtensionPresent("AL_EXT_EXPONENT_DISTANCE") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("AL_EXT_EXPONENT_DISTANCE"); - - if (alIsExtensionPresent("EAX2.0") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("EAX2.0"); - if (alIsExtensionPresent("EAX3.0") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("EAX3.0"); - if (alIsExtensionPresent("EAX4.0") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("EAX4.0"); - if (alIsExtensionPresent("EAX5.0") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("EAX5.0"); - - if (alIsExtensionPresent("EAX-RAM") == AL_TRUE) - ALDeviceInfo.pvstrExtensions->push_back("EAX-RAM"); - - // Get Source Count - ALDeviceInfo.uiSourceCount = GetMaxNumSources(); - - vDeviceInfo.push_back(ALDeviceInfo); - } - alcMakeContextCurrent(nullptr); - alcDestroyContext(context); - } - alcCloseDevice(device); - } - } - } - //} - - ResetFilters(); -} - -/* - * Exit call - */ -ALDeviceList::~ALDeviceList() -{ - for (auto& di : vDeviceInfo) - { - if (di.pvstrExtensions) - { - di.pvstrExtensions->clear(); - delete di.pvstrExtensions; - } - } - - vDeviceInfo.clear(); -} - -/* - * Returns the number of devices in the complete device list - */ -s32 ALDeviceList::GetNumDevices() -{ - return (s32)vDeviceInfo.size(); -} - -/* - * Returns the device name at an index in the complete device list - */ -char* ALDeviceList::GetDeviceName(s32 index) -{ - if (index < GetNumDevices()) - return (char*)vDeviceInfo[index].strDeviceName.c_str(); - else - return nullptr; -} - -/* - * Returns the major and minor version numbers for a device at a specified index in the complete - * list - */ -void ALDeviceList::GetDeviceVersion(s32 index, s32* major, s32* minor) -{ - if (index < GetNumDevices()) - { - if (major) - *major = vDeviceInfo[index].iMajorVersion; - if (minor) - *minor = vDeviceInfo[index].iMinorVersion; - } -} - -/* - * Returns the maximum number of Sources that can be generate on the given device - */ -u32 ALDeviceList::GetMaxNumSources(s32 index) -{ - if (index < GetNumDevices()) - return vDeviceInfo[index].uiSourceCount; - else - return 0; -} - -/* - * Checks if the extension is supported on the given device - */ -bool ALDeviceList::IsExtensionSupported(s32 index, char* szExtName) -{ - bool bReturn = false; - - if (index < GetNumDevices()) - { - for (auto& ext : *vDeviceInfo[index].pvstrExtensions) - { - if (!strcasecmp(ext.c_str(), szExtName)) - { - bReturn = true; - break; - } - } - } - - return bReturn; -} - -/* - * returns the index of the default device in the complete device list - */ -s32 ALDeviceList::GetDefaultDevice() -{ - return defaultDeviceIndex; -} - -/* - * Deselects devices which don't have the specified minimum version - */ -void ALDeviceList::FilterDevicesMinVer(s32 major, s32 minor) -{ - s32 dMajor = 0, dMinor = 0; - for (u32 i = 0; i < vDeviceInfo.size(); i++) - { - GetDeviceVersion(i, &dMajor, &dMinor); - if ((dMajor < major) || ((dMajor == major) && (dMinor < minor))) - { - vDeviceInfo[i].bSelected = false; - } - } -} - -/* - * Deselects devices which don't have the specified maximum version - */ -void ALDeviceList::FilterDevicesMaxVer(s32 major, s32 minor) -{ - s32 dMajor = 0, dMinor = 0; - for (u32 i = 0; i < vDeviceInfo.size(); i++) - { - GetDeviceVersion(i, &dMajor, &dMinor); - if ((dMajor > major) || ((dMajor == major) && (dMinor > minor))) - { - vDeviceInfo[i].bSelected = false; - } - } -} - -/* - * Deselects device which don't support the given extension name - */ -void ALDeviceList::FilterDevicesExtension(char* szExtName) -{ - bool bFound; - - for (auto& di : vDeviceInfo) - { - bFound = false; - for (auto& ext : *di.pvstrExtensions) - { - if (!strcasecmp(ext.c_str(), szExtName)) - { - bFound = true; - break; - } - } - - if (!bFound) - di.bSelected = false; - } -} - -/* - * Resets all filtering, such that all devices are in the list - */ -void ALDeviceList::ResetFilters() -{ - for (s32 i = 0; i < GetNumDevices(); i++) - { - vDeviceInfo[i].bSelected = true; - } - - filterIndex = 0; -} - -/* - * Gets index of first filtered device - */ -s32 ALDeviceList::GetFirstFilteredDevice() -{ - s32 i; - - for (i = 0; i < GetNumDevices(); i++) - { - if (vDeviceInfo[i].bSelected == true) - { - break; - } - } - - filterIndex = i + 1; - return i; -} - -/* - * Gets index of next filtered device - */ -s32 ALDeviceList::GetNextFilteredDevice() -{ - s32 i; - - for (i = filterIndex; i < GetNumDevices(); i++) - { - if (vDeviceInfo[i].bSelected == true) - { - break; - } - } - - filterIndex = i + 1; - return i; -} - -/* - * Internal function to determine max number of Sources that can be generated - */ -u32 ALDeviceList::GetMaxNumSources() -{ - ALuint uiSources[256]; - u32 iSourceCount = 0; - - // Clear AL Error Code - alGetError(); - - // Generate up to 256 Sources, checking for any errors - for (iSourceCount = 0; iSourceCount < 256; iSourceCount++) - { - alGenSources(1, &uiSources[iSourceCount]); - if (alGetError() != AL_NO_ERROR) - break; - } - - // Release the Sources - alDeleteSources(iSourceCount, uiSources); - if (alGetError() != AL_NO_ERROR) - { - for (auto& uiSource : uiSources) - { - alDeleteSources(1, &uiSource); - } - } - - return iSourceCount; -} diff --git a/Source/Core/AudioCommon/aldlist.h b/Source/Core/AudioCommon/aldlist.h deleted file mode 100644 index 733c407ae7..0000000000 --- a/Source/Core/AudioCommon/aldlist.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 Dolphin Emulator Project -// Licensed under GPLv2+ -// Refer to the license.txt file included. - -#pragma once - -#include -#include - -#include "Common/CommonTypes.h" - -#ifdef _WIN32 -#pragma warning(disable : 4786) // disable warning "identifier was truncated to -//'255' characters in the browser information" -#endif - -typedef struct -{ - std::string strDeviceName; - s32 iMajorVersion; - s32 iMinorVersion; - u32 uiSourceCount; - std::vector* pvstrExtensions; - bool bSelected; -} ALDEVICEINFO, *LPALDEVICEINFO; - -class ALDeviceList -{ -private: - std::vector vDeviceInfo; - s32 defaultDeviceIndex; - s32 filterIndex; - -public: - ALDeviceList(); - ~ALDeviceList(); - s32 GetNumDevices(); - char* GetDeviceName(s32 index); - void GetDeviceVersion(s32 index, s32* major, s32* minor); - u32 GetMaxNumSources(s32 index); - bool IsExtensionSupported(s32 index, char* szExtName); - s32 GetDefaultDevice(); - void FilterDevicesMinVer(s32 major, s32 minor); - void FilterDevicesMaxVer(s32 major, s32 minor); - void FilterDevicesExtension(char* szExtName); - void ResetFilters(); - s32 GetFirstFilteredDevice(); - s32 GetNextFilteredDevice(); - -private: - u32 GetMaxNumSources(); -};