From 252b6bf9f87dca98d87eb5d420389f71b830b499 Mon Sep 17 00:00:00 2001 From: vsonnier Date: Fri, 1 Sep 2017 06:18:35 +0200 Subject: [PATCH] AudioThread polishing --- src/audio/AudioThread.cpp | 19 ++++---------- src/audio/AudioThread.h | 55 ++++++++++++++++++++++----------------- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/src/audio/AudioThread.cpp b/src/audio/AudioThread.cpp index 0cb09a5..67fdafe 100644 --- a/src/audio/AudioThread.cpp +++ b/src/audio/AudioThread.cpp @@ -508,21 +508,12 @@ AudioThreadCommandQueue *AudioThread::getCommandQueue() { } void AudioThread::setGain(float gain_in) { - - std::lock_guard lock(m_mutex); - - if (gain < 0.0) { - gain = 0.0; + + if (gain_in < 0.0) { + gain_in = 0.0; } - if (gain > 2.0) { - gain = 2.0; + if (gain_in > 2.0) { + gain_in = 2.0; } gain = gain_in; } - -float AudioThread::getGain() { - - std::lock_guard lock(m_mutex); - - return gain; -} diff --git a/src/audio/AudioThread.h b/src/audio/AudioThread.h index c8c13ac..2919637 100644 --- a/src/audio/AudioThread.h +++ b/src/audio/AudioThread.h @@ -60,26 +60,19 @@ typedef std::shared_ptr AudioThreadInputQueuePtr; typedef std::shared_ptr AudioThreadCommandQueuePtr; class AudioThread : public IOThread { -public: - AudioThreadInputPtr currentInput; - AudioThreadInputQueuePtr inputQueue; - std::atomic_uint audioQueuePtr; - std::atomic_uint underflowCount; - std::atomic_bool initialized; - std::atomic_bool active; - std::atomic_int outputDevice; - float gain; +public: + AudioThread(); - ~AudioThread(); + virtual ~AudioThread(); static void enumerateDevices(std::vector &devs); - void setupDevice(int deviceId); void setInitOutputDevice(int deviceId, int sampleRate=-1); int getOutputDevice(); - void setSampleRate(int sampleRate); + int getSampleRate(); + virtual void run(); virtual void terminate(); @@ -87,11 +80,31 @@ public: void setActive(bool state); void setGain(float gain_in); - float getGain(); + + static std::map deviceSampleRate; AudioThreadCommandQueue *getCommandQueue(); + //give access to the this AudioThread lock + std::recursive_mutex& getMutex(); + + static void deviceCleanup(); + static void setDeviceSampleRate(int deviceId, int sampleRate); + + //fields below, only to be used by other AudioThreads ! + std::atomic_uint underflowCount; + //protected by m_mutex + std::vector boundThreads; + AudioThreadInputQueuePtr inputQueue; + AudioThreadInputPtr currentInput; + std::atomic_uint audioQueuePtr; + std::atomic gain; + private: + + std::atomic_bool active; + std::atomic_int outputDevice; + RtAudio dac; unsigned int nBufferFrames; RtAudio::StreamOptions opts; @@ -102,20 +115,14 @@ private: //The own m_mutex protecting this AudioThread, in particular boundThreads std::recursive_mutex m_mutex; -public: - //give access to the this AudioThread lock - std::recursive_mutex& getMutex(); + void setupDevice(int deviceId); + void setSampleRate(int sampleRate); void bindThread(AudioThread *other); void removeThread(AudioThread *other); - static std::map deviceController; - static std::map deviceSampleRate; - static std::map deviceThread; - static void deviceCleanup(); - static void setDeviceSampleRate(int deviceId, int sampleRate); - - //protected by m_mutex - std::vector boundThreads; + static std::map deviceController; + + static std::map deviceThread; };