AudioCommon: Migrate threadData to OpenALStream and AOSoundStream

This is only ever used in these two sound streams. Seems silly to have it as a class member. Converted it to an atomic as well.
This commit is contained in:
Lioncash 2015-05-09 23:48:22 -04:00
parent 78e59d08fe
commit 4920dbed13
5 changed files with 12 additions and 9 deletions

View File

@ -32,7 +32,7 @@ void AOSound::SoundLoop()
buf_size = format.bits/8 * format.channels * format.rate; buf_size = format.bits/8 * format.channels * format.rate;
while (!threadData) while (m_run_thread.load())
{ {
m_mixer->Mix(realtimeBuffer, numBytesToRender >> 2); m_mixer->Mix(realtimeBuffer, numBytesToRender >> 2);
@ -47,6 +47,7 @@ void AOSound::SoundLoop()
bool AOSound::Start() bool AOSound::Start()
{ {
m_run_thread.store(true);
memset(realtimeBuffer, 0, sizeof(realtimeBuffer)); memset(realtimeBuffer, 0, sizeof(realtimeBuffer));
thread = std::thread(&AOSound::SoundLoop, this); thread = std::thread(&AOSound::SoundLoop, this);
@ -60,7 +61,7 @@ void AOSound::Update()
void AOSound::Stop() void AOSound::Stop()
{ {
threadData = 1; m_run_thread.store(false);
soundSyncEvent.Set(); soundSyncEvent.Set();
{ {

View File

@ -4,6 +4,7 @@
#pragma once #pragma once
#include <atomic>
#include <mutex> #include <mutex>
#include <thread> #include <thread>
@ -19,6 +20,7 @@ class AOSound final : public SoundStream
{ {
#if defined(HAVE_AO) && HAVE_AO #if defined(HAVE_AO) && HAVE_AO
std::thread thread; std::thread thread;
std::atomic<bool> m_run_thread;
std::mutex soundCriticalSection; std::mutex soundCriticalSection;
Common::Event soundSyncEvent; Common::Event soundSyncEvent;

View File

@ -23,6 +23,7 @@ static soundtouch::SoundTouch soundTouch;
// //
bool OpenALStream::Start() bool OpenALStream::Start()
{ {
m_run_thread.store(true);
bool bReturn = false; bool bReturn = false;
ALDeviceList pDeviceList; ALDeviceList pDeviceList;
@ -72,7 +73,7 @@ bool OpenALStream::Start()
void OpenALStream::Stop() void OpenALStream::Stop()
{ {
threadData = 1; m_run_thread.store(false);
// kick the thread if it's waiting // kick the thread if it's waiting
soundSyncEvent.Set(); soundSyncEvent.Set();
@ -183,7 +184,7 @@ void OpenALStream::SoundLoop()
soundTouch.setSetting(SETTING_SEEKWINDOW_MS, 28); soundTouch.setSetting(SETTING_SEEKWINDOW_MS, 28);
soundTouch.setSetting(SETTING_OVERLAP_MS, 12); soundTouch.setSetting(SETTING_OVERLAP_MS, 12);
while (!threadData) while (m_run_thread.load())
{ {
// num_samples_to_render in this update - depends on SystemTimers::AUDIO_DMA_PERIOD. // num_samples_to_render in this update - depends on SystemTimers::AUDIO_DMA_PERIOD.
const u32 stereo_16_bit_size = 4; const u32 stereo_16_bit_size = 4;

View File

@ -4,6 +4,7 @@
#pragma once #pragma once
#include <atomic>
#include <thread> #include <thread>
#include "AudioCommon/SoundStream.h" #include "AudioCommon/SoundStream.h"
@ -72,6 +73,8 @@ public:
private: private:
std::thread thread; std::thread thread;
std::atomic<bool> m_run_thread;
Common::Event soundSyncEvent; Common::Event soundSyncEvent;
short realtimeBuffer[OAL_MAX_SAMPLES * STEREO_CHANNELS]; short realtimeBuffer[OAL_MAX_SAMPLES * STEREO_CHANNELS];

View File

@ -11,17 +11,13 @@
class SoundStream class SoundStream
{ {
protected: protected:
CMixer* m_mixer; CMixer* m_mixer;
// We set this to shut down the sound thread.
// 0=keep playing, 1=stop playing NOW.
volatile int threadData;
bool m_logAudio; bool m_logAudio;
WaveFileWriter g_wave_writer; WaveFileWriter g_wave_writer;
bool m_muted; bool m_muted;
public: public:
SoundStream(CMixer* mixer) : m_mixer(mixer), threadData(0), m_logAudio(false), m_muted(false) {} SoundStream(CMixer* mixer) : m_mixer(mixer), m_logAudio(false), m_muted(false) {}
virtual ~SoundStream() { delete m_mixer; } virtual ~SoundStream() { delete m_mixer; }
static bool isValid() { return false; } static bool isValid() { return false; }