}
if (audio_level_callback != nullptr) {
+ unique_lock<mutex> lock(r128_mutex);
double loudness_s = r128.loudness_S();
double loudness_i = r128.integrated();
double loudness_range_low = r128.range_min();
vector<float> left, right;
deinterleave_samples(samples_out, &left, &right);
float *ptrs[] = { left.data(), right.data() };
- r128.process(left.size(), ptrs);
+ {
+ unique_lock<mutex> lock(r128_mutex);
+ r128.process(left.size(), ptrs);
+ }
// Send the samples to the sound card.
if (alsa) {
std::atomic<bool> should_quit{false};
audio_level_callback_t audio_level_callback = nullptr;
- Ebu_r128_proc r128;
+ std::mutex r128_mutex;
+ Ebu_r128_proc r128; // Under r128_mutex.
Resampler peak_resampler;
std::atomic<float> peak{0.0f};