diff options
Diffstat (limited to 'src/audio_core/cubeb_sink.cpp')
| -rw-r--r-- | src/audio_core/cubeb_sink.cpp | 6 |
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 | ||