mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
Revert "XAudio2 code cleanup, plus switch header to wine version."
This reverts commit d52ed107a5
.
This commit is contained in:
parent
d52ed107a5
commit
f7b8e47a17
1196
3rdparty/win81sdk/Include/um/xaudio2.h
vendored
Normal file
1196
3rdparty/win81sdk/Include/um/xaudio2.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6586
3rdparty/wine/Include/xaudio2.h
vendored
6586
3rdparty/wine/Include/xaudio2.h
vendored
File diff suppressed because it is too large
Load Diff
1098
3rdparty/wine/Include/xaudio2.idl
vendored
1098
3rdparty/wine/Include/xaudio2.idl
vendored
File diff suppressed because it is too large
Load Diff
5
makefile
5
makefile
@ -25,6 +25,7 @@
|
||||
|
||||
# USE_DISPATCH_GL = 0
|
||||
# MODERN_WIN_API = 0
|
||||
# USE_XAUDIO2 = 0
|
||||
# DIRECTINPUT = 7
|
||||
# USE_SDL = 1
|
||||
# SDL_INI_PATH = .;$HOME/.mame/;ini;
|
||||
@ -576,6 +577,10 @@ ifdef MODERN_WIN_API
|
||||
PARAMS += --MODERN_WIN_API='$(MODERN_WIN_API)'
|
||||
endif
|
||||
|
||||
ifdef USE_XAUDIO2
|
||||
PARAMS += --USE_XAUDIO2='$(USE_XAUDIO2)'
|
||||
endif
|
||||
|
||||
ifdef DIRECTINPUT
|
||||
PARAMS += --DIRECTINPUT='$(DIRECTINPUT)'
|
||||
endif
|
||||
|
@ -89,7 +89,6 @@ function osdmodulesbuild()
|
||||
if _OPTIONS["targetos"]=="windows" then
|
||||
includedirs {
|
||||
MAME_DIR .. "3rdparty/winpcap/Include",
|
||||
MAME_DIR .. "3rdparty/wine/Include",
|
||||
}
|
||||
end
|
||||
|
||||
@ -432,6 +431,29 @@ newoption {
|
||||
},
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "USE_XAUDIO2",
|
||||
description = "Use XAudio2 API for audio",
|
||||
allowed = {
|
||||
{ "0", "Disable XAudio2" },
|
||||
{ "1", "Enable XAudio2" },
|
||||
},
|
||||
}
|
||||
|
||||
if _OPTIONS["USE_XAUDIO2"]=="1" then
|
||||
_OPTIONS["MODERN_WIN_API"] = "1",
|
||||
defines {
|
||||
"USE_XAUDIO2=1",
|
||||
},
|
||||
includedirs {
|
||||
MAME_DIR .. "3rdparty/win81sdk/Include/um",
|
||||
}
|
||||
else
|
||||
defines {
|
||||
"USE_XAUDIO2=0",
|
||||
}
|
||||
end
|
||||
|
||||
newoption {
|
||||
trigger = "USE_QTDEBUG",
|
||||
description = "Use QT debugger",
|
||||
|
@ -9,17 +9,26 @@
|
||||
#include "sound_module.h"
|
||||
#include "modules/osdmodule.h"
|
||||
|
||||
#if defined(OSD_WINDOWS) && (_WIN32_WINNT >= 0x0602)
|
||||
#if (defined(OSD_WINDOWS) && USE_XAUDIO2)
|
||||
|
||||
// standard windows headers
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include <mutex>
|
||||
|
||||
#pragma warning( push )
|
||||
#pragma warning( disable: 4068 )
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wattributes"
|
||||
// XAudio2 include
|
||||
#include <xaudio2.h>
|
||||
#pragma GCC diagnostic pop
|
||||
#pragma warning( pop )
|
||||
|
||||
|
||||
#include <mmsystem.h>
|
||||
|
||||
// stdlib includes
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
#include <queue>
|
||||
|
||||
@ -28,6 +37,7 @@
|
||||
// MAME headers
|
||||
#include "emu.h"
|
||||
#include "osdepend.h"
|
||||
#include "emuopts.h"
|
||||
|
||||
//============================================================
|
||||
// Constants
|
||||
@ -219,11 +229,11 @@ public:
|
||||
m_buffer_size(0),
|
||||
m_buffer_count(0),
|
||||
m_writepos(0),
|
||||
m_hEventBufferCompleted(nullptr),
|
||||
m_hEventDataAvailable(nullptr),
|
||||
m_hEventExiting(nullptr),
|
||||
m_hEventBufferCompleted(NULL),
|
||||
m_hEventDataAvailable(NULL),
|
||||
m_hEventExiting(NULL),
|
||||
m_buffer_pool(nullptr),
|
||||
m_xaudio2_module(nullptr),
|
||||
m_xaudio2_module(NULL),
|
||||
m_pfnxaudio2create(nullptr),
|
||||
m_overflows(0),
|
||||
m_underflows(0),
|
||||
@ -231,27 +241,27 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
int init(osd_options const &options) override;
|
||||
void exit() override;
|
||||
virtual int init(osd_options const &options) override;
|
||||
virtual void exit() override;
|
||||
|
||||
// sound_module
|
||||
void update_audio_stream(bool is_throttled, INT16 const *buffer, int samples_this_frame) override;
|
||||
void set_mastervolume(int attenuation) override;
|
||||
virtual void update_audio_stream(bool is_throttled, INT16 const *buffer, int samples_this_frame) override;
|
||||
virtual void set_mastervolume(int attenuation) override;
|
||||
|
||||
// Xaudio callbacks
|
||||
void STDMETHODCALLTYPE OnVoiceProcessingPassStart(UINT32 bytes_required) override;
|
||||
void STDMETHODCALLTYPE OnVoiceProcessingPassEnd() override {}
|
||||
void STDMETHODCALLTYPE OnStreamEnd() override {}
|
||||
void STDMETHODCALLTYPE OnBufferStart(void* pBufferContext) override {}
|
||||
void STDMETHODCALLTYPE OnLoopEnd(void* pBufferContext) override {}
|
||||
void STDMETHODCALLTYPE OnVoiceError(void* pBufferContext, HRESULT error) override {}
|
||||
void STDMETHODCALLTYPE OnBufferEnd(void *pBufferContext) override;
|
||||
void OnVoiceProcessingPassStart(UINT32 bytes_required) override;
|
||||
void OnVoiceProcessingPassEnd() override {}
|
||||
void OnStreamEnd() override {}
|
||||
void OnBufferStart(void* pBufferContext) override {}
|
||||
void OnLoopEnd(void* pBufferContext) override {}
|
||||
void OnVoiceError(void* pBufferContext, HRESULT error) override {}
|
||||
void OnBufferEnd(void *pBufferContext) override;
|
||||
|
||||
private:
|
||||
void create_buffers(const WAVEFORMATEX &format);
|
||||
HRESULT create_voices(const WAVEFORMATEX &format);
|
||||
void process_audio();
|
||||
void submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength) const;
|
||||
void submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength);
|
||||
void submit_needed();
|
||||
HRESULT xaudio2_create(IXAudio2 ** xaudio2_interface);
|
||||
void roll_buffer();
|
||||
@ -264,7 +274,7 @@ private:
|
||||
|
||||
int sound_xaudio2::init(osd_options const &options)
|
||||
{
|
||||
HRESULT result;
|
||||
HRESULT result = S_OK;
|
||||
|
||||
// Create the IXAudio2 object
|
||||
IXAudio2 *temp_xaudio2 = nullptr;
|
||||
@ -282,13 +292,20 @@ int sound_xaudio2::init(osd_options const &options)
|
||||
|
||||
m_sample_bytes = format.nBlockAlign;
|
||||
|
||||
#if defined(_DEBUG)
|
||||
XAUDIO2_DEBUG_CONFIGURATION debugConfig = { 0 };
|
||||
debugConfig.TraceMask = XAUDIO2_LOG_WARNINGS | XAUDIO2_LOG_TIMING | XAUDIO2_LOG_STREAMING;
|
||||
debugConfig.LogFunctionName = TRUE;
|
||||
m_xAudio2->SetDebugConfiguration(&debugConfig);
|
||||
#endif
|
||||
|
||||
// Create the buffers
|
||||
create_buffers(format);
|
||||
|
||||
// Initialize our events
|
||||
m_hEventBufferCompleted = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
||||
m_hEventDataAvailable = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
||||
m_hEventExiting = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
||||
m_hEventBufferCompleted = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
m_hEventDataAvailable = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
m_hEventExiting = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
|
||||
// create the voices and start them
|
||||
HR_RET1(create_voices(format));
|
||||
@ -396,7 +413,7 @@ void sound_xaudio2::set_mastervolume(int attenuation)
|
||||
// The XAudio2 voice callback triggered when a buffer finishes playing
|
||||
void sound_xaudio2::OnBufferEnd(void *pBufferContext)
|
||||
{
|
||||
BYTE* completed_buffer = static_cast<BYTE*>(pBufferContext);
|
||||
BYTE* completed_buffer = (BYTE*)pBufferContext;
|
||||
if (completed_buffer != nullptr)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_buffer_lock);
|
||||
@ -442,18 +459,18 @@ HRESULT sound_xaudio2::xaudio2_create(IXAudio2 ** ppxaudio2_interface)
|
||||
{
|
||||
if (nullptr == m_xaudio2_module)
|
||||
{
|
||||
m_xaudio2_module = LoadLibrary(L"xaudio2_8.dll");
|
||||
m_xaudio2_module = LoadLibrary(XAUDIO2_DLL);
|
||||
if (nullptr == m_xaudio2_module)
|
||||
{
|
||||
osd_printf_error("Failed to load module '%S', error: 0x%X\n", L"xaudio2_8.dll", static_cast<unsigned int>(GetLastError()));
|
||||
osd_printf_error("Failed to load module '%S', error: 0x%X\n", XAUDIO2_DLL, (unsigned int)GetLastError());
|
||||
HR_RETHR(E_FAIL);
|
||||
}
|
||||
}
|
||||
|
||||
m_pfnxaudio2create = reinterpret_cast<PFN_XAUDIO2CREATE>(GetProcAddress(m_xaudio2_module, "XAudio2Create"));
|
||||
m_pfnxaudio2create = (PFN_XAUDIO2CREATE)GetProcAddress(m_xaudio2_module, "XAudio2Create");
|
||||
if (nullptr == m_pfnxaudio2create)
|
||||
{
|
||||
osd_printf_error("Failed to get adddress of exported function XAudio2Create, error: 0x%X\n", static_cast<unsigned int>(GetLastError()));
|
||||
osd_printf_error("Failed to get adddress of exported function XAudio2Create, error: 0x%X\n", (unsigned int)GetLastError());
|
||||
HR_RETHR(E_FAIL);
|
||||
}
|
||||
}
|
||||
@ -493,9 +510,9 @@ void sound_xaudio2::create_buffers(const WAVEFORMATEX &format)
|
||||
|
||||
osd_printf_verbose(
|
||||
"Sound: XAudio2 created initial buffers. total size: %u, count %u, size each %u\n",
|
||||
static_cast<unsigned int>(total_buffer_size),
|
||||
static_cast<unsigned int>(m_buffer_count),
|
||||
static_cast<unsigned int>(m_buffer_size));
|
||||
(unsigned int)total_buffer_size,
|
||||
(unsigned int)m_buffer_count,
|
||||
(unsigned int)m_buffer_size);
|
||||
|
||||
// reset buffer states
|
||||
m_writepos = 0;
|
||||
@ -591,7 +608,7 @@ void sound_xaudio2::submit_needed()
|
||||
// submit_buffer
|
||||
//============================================================
|
||||
|
||||
void sound_xaudio2::submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength) const
|
||||
void sound_xaudio2::submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength)
|
||||
{
|
||||
assert(audioLength != 0);
|
||||
|
||||
@ -606,7 +623,7 @@ void sound_xaudio2::submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audio
|
||||
HRESULT result;
|
||||
if (FAILED(result = m_sourceVoice->SubmitSourceBuffer(&buf)))
|
||||
{
|
||||
osd_printf_verbose("Sound: XAudio2 failed to submit source buffer (non-fatal). Error: 0x%X\n", static_cast<unsigned int>(result));
|
||||
osd_printf_verbose("Sound: XAudio2 failed to submit source buffer (non-fatal). Error: 0x%X\n", (unsigned int)result);
|
||||
m_buffer_pool->return_to_pool(audioData.release());
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user