summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audio_core/cubeb_sink.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/audio_core/cubeb_sink.cpp b/src/audio_core/cubeb_sink.cpp
index 1501ef1f4..5a1177d0c 100644
--- a/src/audio_core/cubeb_sink.cpp
+++ b/src/audio_core/cubeb_sink.cpp
@@ -4,6 +4,7 @@
4 4
5#include <algorithm> 5#include <algorithm>
6#include <cstring> 6#include <cstring>
7#include <mutex>
7 8
8#include "audio_core/cubeb_sink.h" 9#include "audio_core/cubeb_sink.h"
9#include "audio_core/stream.h" 10#include "audio_core/stream.h"
@@ -66,6 +67,8 @@ public:
66 return; 67 return;
67 } 68 }
68 69
70 std::lock_guard lock{queue_mutex};
71
69 queue.reserve(queue.size() + samples.size() * GetNumChannels()); 72 queue.reserve(queue.size() + samples.size() * GetNumChannels());
70 73
71 if (is_6_channel) { 74 if (is_6_channel) {
@@ -94,6 +97,7 @@ private:
94 u32 num_channels{}; 97 u32 num_channels{};
95 bool is_6_channel{}; 98 bool is_6_channel{};
96 99
100 std::mutex queue_mutex;
97 std::vector<s16> queue; 101 std::vector<s16> queue;
98 102
99 static long DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, 103 static long DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer,
@@ -153,6 +157,8 @@ long SinkStreamImpl::DataCallback(cubeb_stream* stream, void* user_data, const v
153 return {}; 157 return {};
154 } 158 }
155 159
160 std::lock_guard lock{impl->queue_mutex};
161
156 const size_t frames_to_write{ 162 const size_t frames_to_write{
157 std::min(impl->queue.size() / impl->GetNumChannels(), static_cast<size_t>(num_frames))}; 163 std::min(impl->queue.size() / impl->GetNumChannels(), static_cast<size_t>(num_frames))};
158 164