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:
parent
78e59d08fe
commit
4920dbed13
|
@ -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();
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
Loading…
Reference in New Issue