From 37b5bfa06864596a2603e284cc57023f2c633ce5 Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Sun, 7 May 2023 21:35:02 +0200 Subject: [PATCH] AudioServer: Migrate from DeprecatedFile to File Advances #17129. --- Userland/Services/AudioServer/Mixer.cpp | 16 +++++----------- Userland/Services/AudioServer/Mixer.h | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Userland/Services/AudioServer/Mixer.cpp b/Userland/Services/AudioServer/Mixer.cpp index ff5abf9a97..2047a59de8 100644 --- a/Userland/Services/AudioServer/Mixer.cpp +++ b/Userland/Services/AudioServer/Mixer.cpp @@ -13,16 +13,14 @@ #include #include #include -#include #include #include #include namespace AudioServer { -Mixer::Mixer(NonnullRefPtr config) - // FIXME: Allow AudioServer to use other audio channels as well - : m_device(Core::DeprecatedFile::construct("/dev/audio/0", this)) +Mixer::Mixer(NonnullRefPtr config, NonnullOwnPtr device) + : m_device(move(device)) , m_sound_thread(Threading::Thread::construct( [this] { mix(); @@ -31,11 +29,6 @@ Mixer::Mixer(NonnullRefPtr config) "AudioServer[mixer]"sv)) , m_config(move(config)) { - if (!m_device->open(Core::OpenMode::WriteOnly)) { - dbgln("Can't open audio device: {}", m_device->error_string()); - return; - } - m_muted = m_config->read_bool_entry("Master", "Mute", false); m_main_volume = static_cast(m_config->read_num_entry("Master", "Volume", 100)) / 100.0; @@ -98,7 +91,7 @@ void Mixer::mix() // Even though it's not realistic, the user expects no sound at 0%. if (m_muted || m_main_volume < 0.01) { - m_device->write(m_zero_filled_buffer.data(), static_cast(m_zero_filled_buffer.size())); + m_device->write_until_depleted(m_zero_filled_buffer).release_value_but_fixme_should_propagate_errors(); } else { FixedMemoryStream stream { m_stream_buffer.span() }; @@ -116,7 +109,8 @@ void Mixer::mix() auto buffered_bytes = MUST(stream.tell()); VERIFY(buffered_bytes == m_stream_buffer.size()); - m_device->write(m_stream_buffer.data(), static_cast(buffered_bytes)); + m_device->write_until_depleted({ m_stream_buffer.data(), buffered_bytes }) + .release_value_but_fixme_should_propagate_errors(); } } } diff --git a/Userland/Services/AudioServer/Mixer.h b/Userland/Services/AudioServer/Mixer.h index f80608f6c1..0d5ec8b65d 100644 --- a/Userland/Services/AudioServer/Mixer.h +++ b/Userland/Services/AudioServer/Mixer.h @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include #include @@ -102,8 +104,15 @@ private: }; class Mixer : public Core::Object { - C_OBJECT(Mixer) + C_OBJECT_ABSTRACT(Mixer) public: + static ErrorOr> try_create(NonnullRefPtr config) + { + // FIXME: Allow AudioServer to use other audio channels as well + auto device = TRY(Core::File::open("/dev/audio/0"sv, Core::File::OpenMode::Write)); + return adopt_nonnull_ref_or_enomem(new (nothrow) Mixer(move(config), move(device))); + } + virtual ~Mixer() override = default; NonnullRefPtr create_queue(ConnectionFromClient&); @@ -119,7 +128,7 @@ public: u32 audiodevice_get_sample_rate() const; private: - Mixer(NonnullRefPtr config); + Mixer(NonnullRefPtr config, NonnullOwnPtr device); void request_setting_sync(); @@ -127,7 +136,7 @@ private: Threading::Mutex m_pending_mutex; Threading::ConditionVariable m_mixing_necessary { m_pending_mutex }; - RefPtr m_device; + NonnullOwnPtr m_device; NonnullRefPtr m_sound_thread;