mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-10 08:09:26 +01:00
AlsaSoundStream: Use an enum class for signifying ALSA thread state
This commit is contained in:
parent
353205132c
commit
f907e5cace
@ -10,7 +10,11 @@
|
||||
#define BUFFER_SIZE_MAX 8192
|
||||
#define BUFFER_SIZE_BYTES (BUFFER_SIZE_MAX*2*2)
|
||||
|
||||
AlsaSound::AlsaSound(CMixer *mixer) : SoundStream(mixer), thread_data(0), handle(nullptr), frames_to_deliver(FRAME_COUNT_MIN)
|
||||
AlsaSound::AlsaSound(CMixer *mixer)
|
||||
: SoundStream(mixer)
|
||||
, m_thread_status(ALSAThreadStatus::STOPPED)
|
||||
, handle(nullptr)
|
||||
, frames_to_deliver(FRAME_COUNT_MIN)
|
||||
{
|
||||
mix_buffer = new u8[BUFFER_SIZE_BYTES];
|
||||
}
|
||||
@ -22,14 +26,14 @@ AlsaSound::~AlsaSound()
|
||||
|
||||
bool AlsaSound::Start()
|
||||
{
|
||||
m_thread_status.store(ALSAThreadStatus::RUNNING);
|
||||
thread = std::thread(&AlsaSound::SoundLoop, this);
|
||||
thread_data.store(0);
|
||||
return true;
|
||||
}
|
||||
|
||||
void AlsaSound::Stop()
|
||||
{
|
||||
thread_data.store(1);
|
||||
m_thread_status.store(ALSAThreadStatus::STOPPING);
|
||||
thread.join();
|
||||
}
|
||||
|
||||
@ -42,11 +46,11 @@ void AlsaSound::Update()
|
||||
void AlsaSound::SoundLoop()
|
||||
{
|
||||
if (!AlsaInit()) {
|
||||
thread_data.store(2);
|
||||
m_thread_status.store(ALSAThreadStatus::STOPPED);
|
||||
return;
|
||||
}
|
||||
Common::SetCurrentThreadName("Audio thread - alsa");
|
||||
while (thread_data.load() == 0)
|
||||
while (m_thread_status.load() == ALSAThreadStatus::RUNNING)
|
||||
{
|
||||
m_mixer->Mix(reinterpret_cast<short *>(mix_buffer), frames_to_deliver);
|
||||
int rc = m_muted ? 1337 : snd_pcm_writei(handle, mix_buffer, frames_to_deliver);
|
||||
@ -61,7 +65,7 @@ void AlsaSound::SoundLoop()
|
||||
}
|
||||
}
|
||||
AlsaShutdown();
|
||||
thread_data.store(2);
|
||||
m_thread_status.store(ALSAThreadStatus::STOPPED);
|
||||
}
|
||||
|
||||
bool AlsaSound::AlsaInit()
|
||||
|
@ -33,15 +33,19 @@ public:
|
||||
virtual void Update() override;
|
||||
|
||||
private:
|
||||
enum class ALSAThreadStatus
|
||||
{
|
||||
RUNNING,
|
||||
STOPPING,
|
||||
STOPPED,
|
||||
};
|
||||
|
||||
bool AlsaInit();
|
||||
void AlsaShutdown();
|
||||
|
||||
u8 *mix_buffer;
|
||||
std::thread thread;
|
||||
// 0 = continue
|
||||
// 1 = shutdown
|
||||
// 2 = done shutting down.
|
||||
std::atomic<int> thread_data;
|
||||
std::atomic<ALSAThreadStatus> m_thread_status;
|
||||
|
||||
snd_pcm_t *handle;
|
||||
int frames_to_deliver;
|
||||
|
Loading…
x
Reference in New Issue
Block a user