forked from Bananymous/banan-os
AudioServer: Queue more than 4k bytes per write
Before this I was writing audio data to kernel in ~20 ms chuncks. This feels like way too many syscalls, so now we allow sending upto 1 second per syscall :D
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include "AudioServer.h"
|
||||
|
||||
#include <alloca.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/shm.h>
|
||||
#include <sys/socket.h>
|
||||
@@ -306,9 +307,10 @@ void AudioServer::send_samples()
|
||||
|
||||
while (m_samples_sent < m_samples.size())
|
||||
{
|
||||
const size_t samples_to_send = BAN::Math::min(m_send_buffer.size() / sizeof(kernel_sample_t), m_samples.size() - m_samples_sent);
|
||||
const auto channels = device().channels;
|
||||
const size_t samples_to_send = BAN::Math::min<size_t>(device().sample_rate * channels, m_samples.size() - m_samples_sent) / channels * channels;
|
||||
|
||||
auto buffer = BAN::ByteSpan(m_send_buffer.data(), samples_to_send * sizeof(kernel_sample_t));
|
||||
auto buffer = BAN::ByteSpan(static_cast<uint8_t*>(alloca(samples_to_send * sizeof(kernel_sample_t))), samples_to_send * sizeof(kernel_sample_t));
|
||||
|
||||
{
|
||||
auto sample_buffer = buffer.as_span<kernel_sample_t>();
|
||||
|
||||
@@ -68,7 +68,6 @@ private:
|
||||
size_t m_current_audio_device { 0 };
|
||||
|
||||
size_t m_samples_sent { 0 };
|
||||
BAN::Array<uint8_t, 4 * 1024> m_send_buffer;
|
||||
BAN::CircularQueue<sample_t, 64 * 1024> m_samples;
|
||||
|
||||
BAN::HashMap<int, ClientInfo> m_audio_buffers;
|
||||
|
||||
Reference in New Issue
Block a user