cubeb_sink: Protect queue with a mutex
This commit is contained in:
parent
68c44ca0ee
commit
fcc5ffdfdd
1 changed files with 6 additions and 0 deletions
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
#include "audio_core/cubeb_sink.h"
|
#include "audio_core/cubeb_sink.h"
|
||||||
#include "audio_core/stream.h"
|
#include "audio_core/stream.h"
|
||||||
|
@ -66,6 +67,8 @@ public:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::lock_guard lock{queue_mutex};
|
||||||
|
|
||||||
queue.reserve(queue.size() + samples.size() * GetNumChannels());
|
queue.reserve(queue.size() + samples.size() * GetNumChannels());
|
||||||
|
|
||||||
if (is_6_channel) {
|
if (is_6_channel) {
|
||||||
|
@ -94,6 +97,7 @@ private:
|
||||||
u32 num_channels{};
|
u32 num_channels{};
|
||||||
bool is_6_channel{};
|
bool is_6_channel{};
|
||||||
|
|
||||||
|
std::mutex queue_mutex;
|
||||||
std::vector<s16> queue;
|
std::vector<s16> queue;
|
||||||
|
|
||||||
static long DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer,
|
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
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::lock_guard lock{impl->queue_mutex};
|
||||||
|
|
||||||
const size_t frames_to_write{
|
const size_t frames_to_write{
|
||||||
std::min(impl->queue.size() / impl->GetNumChannels(), static_cast<size_t>(num_frames))};
|
std::min(impl->queue.size() / impl->GetNumChannels(), static_cast<size_t>(num_frames))};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue