/* * Copyright (c) 2023, Gregory Bertilson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Audio { class PlaybackStreamSerenity final : public PlaybackStream { public: static ErrorOr> create(OutputState initial_state, u32 sample_rate, u8 channels, u32 target_latency_ms, AudioDataRequestCallback&& data_request_callback); virtual void set_underrun_callback(Function) override; virtual NonnullRefPtr> resume() override; virtual NonnullRefPtr> drain_buffer_and_suspend() override; virtual NonnullRefPtr> discard_buffer_and_suspend() override; virtual ErrorOr total_time_played() override; virtual NonnullRefPtr> set_volume(double) override; private: PlaybackStreamSerenity(NonnullRefPtr, NonnullRefPtr polling_timer, AudioDataRequestCallback&& data_request_callback); void fill_buffers(); NonnullRefPtr m_connection; size_t m_number_of_samples_enqueued { 0 }; NonnullRefPtr m_polling_timer; AudioDataRequestCallback m_data_request_callback; bool m_paused { false }; }; }