forked from Bananymous/banan-os
AudioServer: Don't allow client to fully halt audio
This commit is contained in:
parent
74af4e9150
commit
b334259a07
|
@ -116,11 +116,14 @@ uint64_t AudioServer::update()
|
||||||
if (!anyone_playing)
|
if (!anyone_playing)
|
||||||
return 60'000;
|
return 60'000;
|
||||||
|
|
||||||
// FIXME: this works but if any client stops producing audio samples
|
const uint32_t sample_frames_per_10ms = m_sample_rate / 100;
|
||||||
// the whole audio server halts
|
if (max_sample_frames_to_queue < sample_frames_per_10ms)
|
||||||
const uint32_t samples_per_10ms = m_sample_rate / 100;
|
{
|
||||||
if (max_sample_frames_to_queue < samples_per_10ms)
|
const uint32_t sample_frames_sent = m_samples_sent / m_channels;
|
||||||
return 1;
|
if (sample_frames_sent >= sample_frames_per_10ms)
|
||||||
|
return 1;
|
||||||
|
max_sample_frames_to_queue = sample_frames_per_10ms;
|
||||||
|
}
|
||||||
|
|
||||||
for (auto& [_, buffer] : m_audio_buffers)
|
for (auto& [_, buffer] : m_audio_buffers)
|
||||||
{
|
{
|
||||||
|
@ -135,7 +138,7 @@ uint64_t AudioServer::update()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const size_t sample_frames_to_queue = BAN::Math::min<size_t>(max_sample_frames_to_queue, buffer_sample_frames_available);
|
const size_t sample_frames_to_queue = BAN::Math::min<size_t>(max_sample_frames_to_queue, buffer_sample_frames_available);
|
||||||
if (sample_frames_to_queue < samples_per_10ms)
|
if (sample_frames_to_queue < sample_frames_per_10ms)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
while (m_samples.size() < queued_samples_end + sample_frames_to_queue * m_channels)
|
while (m_samples.size() < queued_samples_end + sample_frames_to_queue * m_channels)
|
||||||
|
|
Loading…
Reference in New Issue