/* * Copyright (c) 2023, Gregory Bertilson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::Platform { class AudioCodecPluginAgnostic final : public AudioCodecPlugin { public: static ErrorOr> create(NonnullRefPtr const&); virtual void resume_playback() override; virtual void pause_playback() override; virtual void set_volume(double) override; virtual void seek(double) override; virtual Duration duration() override; private: explicit AudioCodecPluginAgnostic(NonnullRefPtr loader, Duration, NonnullRefPtr update_timer); void update_timestamp(); NonnullRefPtr m_loader; RefPtr m_output { nullptr }; Duration m_duration { Duration::zero() }; Duration m_last_resume_in_media_time { Duration::zero() }; Duration m_last_resume_in_device_time { Duration::zero() }; Duration m_last_good_device_time { Duration::zero() }; Core::EventLoop& m_main_thread_event_loop; NonnullRefPtr m_update_timer; bool m_paused { true }; }; }