File diff r25654:e264fd698eb2 → r25655:1030dcb7eb52
src/sound/xaudio2_s.cpp
Show inline comments
 
@@ -127,60 +127,60 @@ static StreamingVoiceContext* _voice_con
 
const char *SoundDriver_XAudio2::Start(const StringList &parm)
 
{
 
	HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
 

	
 
	if (FAILED(hr))
 
	{
 
		DEBUG(driver, 0, "xaudio2_s: CoInitializeEx failed (%08x)", (uint)hr);
 
		Debug(driver, 0, "xaudio2_s: CoInitializeEx failed ({:08x})", (uint)hr);
 
		return "Failed to initialise COM";
 
	}
 

	
 
	_xaudio_dll_handle = LoadLibraryA(XAUDIO2_DLL_A);
 

	
 
	if (_xaudio_dll_handle == nullptr)
 
	{
 
		CoUninitialize();
 

	
 
		DEBUG(driver, 0, "xaudio2_s: Unable to load " XAUDIO2_DLL_A);
 
		Debug(driver, 0, "xaudio2_s: Unable to load " XAUDIO2_DLL_A);
 
		return "Failed to load XAudio2 DLL";
 
	}
 

	
 
	API_XAudio2Create xAudio2Create = (API_XAudio2Create) GetProcAddress(_xaudio_dll_handle, "XAudio2Create");
 

	
 
	if (xAudio2Create == nullptr)
 
	{
 
		FreeLibrary(_xaudio_dll_handle);
 
		CoUninitialize();
 

	
 
		DEBUG(driver, 0, "xaudio2_s: Unable to find XAudio2Create function in DLL");
 
		Debug(driver, 0, "xaudio2_s: Unable to find XAudio2Create function in DLL");
 
		return "Failed to load XAudio2 DLL";
 
	}
 

	
 
	// Create the XAudio engine
 
	UINT32 flags = 0;
 
	hr = xAudio2Create(_xaudio2.GetAddressOf(), flags, XAUDIO2_DEFAULT_PROCESSOR);
 

	
 
	if (FAILED(hr))
 
	{
 
		FreeLibrary(_xaudio_dll_handle);
 
		CoUninitialize();
 

	
 
		DEBUG(driver, 0, "xaudio2_s: XAudio2Create failed (%08x)", (uint)hr);
 
		Debug(driver, 0, "xaudio2_s: XAudio2Create failed ({:08x})", (uint)hr);
 
		return "Failed to inititialise the XAudio2 engine";
 
	}
 

	
 
	// Create a mastering voice
 
	hr = _xaudio2->CreateMasteringVoice(&_mastering_voice);
 

	
 
	if (FAILED(hr))
 
	{
 
		_xaudio2.Reset();
 
		FreeLibrary(_xaudio_dll_handle);
 
		CoUninitialize();
 

	
 
		DEBUG(driver, 0, "xaudio2_s: CreateMasteringVoice failed (%08x)", (uint)hr);
 
		Debug(driver, 0, "xaudio2_s: CreateMasteringVoice failed ({:08x})", (uint)hr);
 
		return "Failed to create a mastering voice";
 
	}
 

	
 
	// Create a source voice to stream our audio
 
	WAVEFORMATEX wfex;
 

	
 
@@ -213,35 +213,35 @@ const char *SoundDriver_XAudio2::Start(c
 
	{
 
		_mastering_voice->DestroyVoice();
 
		_xaudio2.Reset();
 
		FreeLibrary(_xaudio_dll_handle);
 
		CoUninitialize();
 

	
 
		DEBUG(driver, 0, "xaudio2_s: CreateSourceVoice failed (%08x)", (uint)hr);
 
		Debug(driver, 0, "xaudio2_s: CreateSourceVoice failed ({:08x})", (uint)hr);
 
		return "Failed to create a source voice";
 
	}
 

	
 
	_voice_context->SourceVoice = _source_voice;
 
	hr = _source_voice->Start(0, 0);
 

	
 
	if (FAILED(hr))
 
	{
 
		DEBUG(driver, 0, "xaudio2_s: _source_voice->Start failed (%08x)", (uint)hr);
 
		Debug(driver, 0, "xaudio2_s: _source_voice->Start failed ({:08x})", (uint)hr);
 

	
 
		Stop();
 
		return "Failed to start the source voice";
 
	}
 

	
 
	MxInitialize(wfex.nSamplesPerSec);
 

	
 
	// Submit the first buffer
 
	hr = _voice_context->SubmitBuffer();
 

	
 
	if (FAILED(hr))
 
	{
 
		DEBUG(driver, 0, "xaudio2_s: _voice_context->SubmitBuffer failed (%08x)", (uint)hr);
 
		Debug(driver, 0, "xaudio2_s: _voice_context->SubmitBuffer failed ({:08x})", (uint)hr);
 

	
 
		Stop();
 
		return "Failed to submit the first audio buffer";
 
	}
 

	
 
	return nullptr;