From dfa727a4d435f3bfb6731dc562f7323fedd86617 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 23 Dec 2024 13:32:27 -0500 Subject: [PATCH] LibMedia: Remove preprocessor chain when initializing audio streams Instead of having to duplicate the audio stream backend conditions, just define PlaybackStream::create in each audio backend implementation file. We provide a weak definition in PlaybackStream.cpp as the fallback. --- Libraries/LibMedia/Audio/PlaybackStream.cpp | 23 +------------------ .../Audio/PlaybackStreamAudioUnit.cpp | 5 ++++ .../LibMedia/Audio/PlaybackStreamOboe.cpp | 9 ++++++-- .../Audio/PlaybackStreamPulseAudio.cpp | 5 ++++ 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/Libraries/LibMedia/Audio/PlaybackStream.cpp b/Libraries/LibMedia/Audio/PlaybackStream.cpp index 42c60e73d7d..0db0557f3bb 100644 --- a/Libraries/LibMedia/Audio/PlaybackStream.cpp +++ b/Libraries/LibMedia/Audio/PlaybackStream.cpp @@ -6,32 +6,11 @@ #include "PlaybackStream.h" -#include - -#if defined(HAVE_PULSEAUDIO) -# include "PlaybackStreamPulseAudio.h" -#elif defined(AK_OS_MACOS) -# include "PlaybackStreamAudioUnit.h" -#elif defined(AK_OS_ANDROID) -# include "PlaybackStreamOboe.h" -#endif - namespace Audio { -ErrorOr> PlaybackStream::create(OutputState initial_output_state, u32 sample_rate, u8 channels, u32 target_latency_ms, AudioDataRequestCallback&& data_request_callback) +ErrorOr> __attribute__((weak)) PlaybackStream::create(OutputState, u32, u8, u32, AudioDataRequestCallback&&) { - VERIFY(data_request_callback); - // Create the platform-specific implementation for this stream. -#if defined(HAVE_PULSEAUDIO) - return PlaybackStreamPulseAudio::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback)); -#elif defined(AK_OS_MACOS) - return PlaybackStreamAudioUnit::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback)); -#elif defined(AK_OS_ANDROID) - return PlaybackStreamOboe::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback)); -#else - (void)initial_output_state, (void)sample_rate, (void)channels, (void)target_latency_ms; return Error::from_string_literal("Audio output is not available for this platform"); -#endif } } diff --git a/Libraries/LibMedia/Audio/PlaybackStreamAudioUnit.cpp b/Libraries/LibMedia/Audio/PlaybackStreamAudioUnit.cpp index f6e6d946c03..146b1162c5d 100644 --- a/Libraries/LibMedia/Audio/PlaybackStreamAudioUnit.cpp +++ b/Libraries/LibMedia/Audio/PlaybackStreamAudioUnit.cpp @@ -215,6 +215,11 @@ private: Atomic m_last_sample_time { 0 }; }; +ErrorOr> PlaybackStream::create(OutputState initial_output_state, u32 sample_rate, u8 channels, u32 target_latency_ms, AudioDataRequestCallback&& data_request_callback) +{ + return PlaybackStreamAudioUnit::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback)); +} + ErrorOr> PlaybackStreamAudioUnit::create(OutputState initial_output_state, u32 sample_rate, u8 channels, u32, AudioDataRequestCallback&& data_request_callback) { AudioStreamBasicDescription description {}; diff --git a/Libraries/LibMedia/Audio/PlaybackStreamOboe.cpp b/Libraries/LibMedia/Audio/PlaybackStreamOboe.cpp index 34ff8e19e02..aa119c51174 100644 --- a/Libraries/LibMedia/Audio/PlaybackStreamOboe.cpp +++ b/Libraries/LibMedia/Audio/PlaybackStreamOboe.cpp @@ -80,9 +80,9 @@ private: std::shared_ptr m_oboe_callback; }; -PlaybackStreamOboe::PlaybackStreamOboe(NonnullRefPtr storage) - : m_storage(move(storage)) +ErrorOr> PlaybackStream::create(OutputState initial_output_state, u32 sample_rate, u8 channels, u32 target_latency_ms, AudioDataRequestCallback&& data_request_callback) { + return PlaybackStreamOboe::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback)); } ErrorOr> PlaybackStreamOboe::create(OutputState initial_output_state, u32 sample_rate, u8 channels, u32, AudioDataRequestCallback&& data_request_callback) @@ -108,6 +108,11 @@ ErrorOr> PlaybackStreamOboe::create(OutputState in return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) PlaybackStreamOboe(move(storage)))); } +PlaybackStreamOboe::PlaybackStreamOboe(NonnullRefPtr storage) + : m_storage(move(storage)) +{ +} + PlaybackStreamOboe::~PlaybackStreamOboe() = default; void PlaybackStreamOboe::set_underrun_callback(Function) diff --git a/Libraries/LibMedia/Audio/PlaybackStreamPulseAudio.cpp b/Libraries/LibMedia/Audio/PlaybackStreamPulseAudio.cpp index 4cb440751d3..987eaa8cce6 100644 --- a/Libraries/LibMedia/Audio/PlaybackStreamPulseAudio.cpp +++ b/Libraries/LibMedia/Audio/PlaybackStreamPulseAudio.cpp @@ -21,6 +21,11 @@ namespace Audio { __temporary_result.release_value(); \ }) +ErrorOr> PlaybackStream::create(OutputState initial_output_state, u32 sample_rate, u8 channels, u32 target_latency_ms, AudioDataRequestCallback&& data_request_callback) +{ + return PlaybackStreamPulseAudio::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback)); +} + ErrorOr> PlaybackStreamPulseAudio::create(OutputState initial_state, u32 sample_rate, u8 channels, u32 target_latency_ms, AudioDataRequestCallback&& data_request_callback) { VERIFY(data_request_callback);