/* * Copyright (c) 2025, Ryszard Goc * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "PlaybackStream.h" #include #include namespace Audio { class PlaybackStreamWASAPI final : public PlaybackStream { public: static ErrorOr> create(OutputState initial_output_state, u32 target_latency_ms, SampleSpecificationCallback&&, AudioDataRequestCallback&&); // The overrun callback must be realtime safe. The buffer size might be small. 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 AK::Duration total_time_played() const override; virtual NonnullRefPtr> set_volume(double) override; private: struct AudioState; explicit PlaybackStreamWASAPI(NonnullRefPtr); static ALWAYS_INLINE AK::Duration total_time_played_with_com_initialized(AudioState& state); ~PlaybackStreamWASAPI(); NonnullRefPtr m_state; }; }