Make audio thread control flags safe
(cherry picked from commit c92ceca5ce)
This commit is contained in:
committed by
Rémi Verschelde
parent
a957b4fb8c
commit
519bc3a1e8
@ -38,9 +38,8 @@ const char *AudioDriverXAudio2::get_name() const {
|
||||
}
|
||||
|
||||
Error AudioDriverXAudio2::init() {
|
||||
active = false;
|
||||
thread_exited = false;
|
||||
exit_thread = false;
|
||||
active.clear();
|
||||
exit_thread.clear();
|
||||
pcm_open = false;
|
||||
samples_in = NULL;
|
||||
|
||||
@ -86,17 +85,19 @@ Error AudioDriverXAudio2::init() {
|
||||
void AudioDriverXAudio2::thread_func(void *p_udata) {
|
||||
AudioDriverXAudio2 *ad = (AudioDriverXAudio2 *)p_udata;
|
||||
|
||||
while (!ad->exit_thread) {
|
||||
if (!ad->active) {
|
||||
while (!ad->exit_thread.is_set()) {
|
||||
if (!ad->active.is_set()) {
|
||||
for (int i = 0; i < AUDIO_BUFFERS; i++) {
|
||||
ad->xaudio_buffer[i].Flags = XAUDIO2_END_OF_STREAM;
|
||||
}
|
||||
|
||||
} else {
|
||||
ad->lock();
|
||||
ad->start_counting_ticks();
|
||||
|
||||
ad->audio_server_process(ad->buffer_size, ad->samples_in);
|
||||
|
||||
ad->stop_counting_ticks();
|
||||
ad->unlock();
|
||||
|
||||
for (unsigned int i = 0; i < ad->buffer_size * ad->channels; i++) {
|
||||
@ -117,12 +118,10 @@ void AudioDriverXAudio2::thread_func(void *p_udata) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ad->thread_exited = true;
|
||||
}
|
||||
|
||||
void AudioDriverXAudio2::start() {
|
||||
active = true;
|
||||
active.set();
|
||||
HRESULT hr = source_voice->Start(0);
|
||||
ERR_FAIL_COND_MSG(hr != S_OK, "Error starting XAudio2 driver. Error code: " + itos(hr) + ".");
|
||||
}
|
||||
@ -156,7 +155,7 @@ void AudioDriverXAudio2::finish() {
|
||||
if (!thread.is_started())
|
||||
return;
|
||||
|
||||
exit_thread = true;
|
||||
exit_thread.set();
|
||||
thread.wait_to_finish();
|
||||
|
||||
if (source_voice) {
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
|
||||
#include "core/os/mutex.h"
|
||||
#include "core/os/thread.h"
|
||||
#include "core/safe_refcount.h"
|
||||
#include "servers/audio_server.h"
|
||||
|
||||
#include <mmsystem.h>
|
||||
@ -77,9 +78,8 @@ class AudioDriverXAudio2 : public AudioDriver {
|
||||
|
||||
int channels;
|
||||
|
||||
bool active;
|
||||
bool thread_exited;
|
||||
mutable bool exit_thread;
|
||||
SafeFlag active;
|
||||
SafeFlag exit_thread;
|
||||
bool pcm_open;
|
||||
|
||||
WAVEFORMATEX wave_format;
|
||||
|
||||
Reference in New Issue
Block a user