summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-08-02 02:34:03 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2023-08-02 02:34:03 -0400
commit60a8c8660654734a33a752899b056c88670099f9 (patch)
tree96c226435885aaad89199de3d591a0d2a07ed358
parent9e4382aa7740bf309aa55ff07819b097684122ba (diff)
downloadabaddon-portaudio-60a8c8660654734a33a752899b056c88670099f9.tar.gz
abaddon-portaudio-60a8c8660654734a33a752899b056c88670099f9.zip
add mutex for rnnoise
-rw-r--r--src/audio/manager.cpp3
-rw-r--r--src/audio/manager.hpp4
2 files changed, 7 insertions, 0 deletions
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp
index 53eff54..4f3555b 100644
--- a/src/audio/manager.cpp
+++ b/src/audio/manager.cpp
@@ -487,6 +487,7 @@ bool AudioManager::CheckVADRNNoise(const int16_t *pcm) {
for (size_t i = 0; i < 480; i++) {
rnnoise_input[i] = static_cast<float>(pcm[i * 2]);
}
+ std::unique_lock<std::mutex> _(m_rnn_mutex);
m_vad_prob = rnnoise_process_frame(m_rnnoise, denoised, rnnoise_input);
return m_vad_prob > m_prob_threshold;
}
@@ -494,6 +495,7 @@ bool AudioManager::CheckVADRNNoise(const int16_t *pcm) {
void AudioManager::RNNoiseInitialize() {
spdlog::get("audio")->debug("Initializing RNNoise");
RNNoiseUninitialize();
+ std::unique_lock<std::mutex> _(m_rnn_mutex);
m_rnnoise = rnnoise_create(nullptr);
const auto expected = rnnoise_get_frame_size();
if (expected != 480) {
@@ -504,6 +506,7 @@ void AudioManager::RNNoiseInitialize() {
void AudioManager::RNNoiseUninitialize() {
if (m_rnnoise != nullptr) {
spdlog::get("audio")->debug("Uninitializing RNNoise");
+ std::unique_lock<std::mutex> _(m_rnn_mutex);
rnnoise_destroy(m_rnnoise);
m_rnnoise = nullptr;
}
diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp
index dac9738..6b67719 100644
--- a/src/audio/manager.hpp
+++ b/src/audio/manager.hpp
@@ -121,6 +121,10 @@ private:
mutable std::mutex m_mutex;
mutable std::mutex m_enc_mutex;
+#ifdef WITH_RNNOISE
+ mutable std::mutex m_rnn_mutex;
+#endif
+
std::unordered_map<uint32_t, std::pair<std::deque<int16_t>, OpusDecoder *>> m_sources;
OpusEncoder *m_encoder;