AudioCodecPluginAgnostic.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. * Copyright (c) 2023, Gregory Bertilson <zaggy1024@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibAudio/PlaybackStream.h>
  8. #include <LibWeb/Platform/AudioCodecPlugin.h>
  9. namespace Web::Platform {
  10. class AudioCodecPluginAgnostic final : public AudioCodecPlugin {
  11. public:
  12. static ErrorOr<NonnullOwnPtr<AudioCodecPluginAgnostic>> create(NonnullRefPtr<Audio::Loader> const&);
  13. virtual void resume_playback() override;
  14. virtual void pause_playback() override;
  15. virtual void set_volume(double) override;
  16. virtual void seek(double) override;
  17. virtual Duration duration() override;
  18. private:
  19. explicit AudioCodecPluginAgnostic(NonnullRefPtr<Audio::Loader> loader, Duration, NonnullRefPtr<Core::Timer> update_timer);
  20. void update_timestamp();
  21. NonnullRefPtr<Audio::Loader> m_loader;
  22. RefPtr<Audio::PlaybackStream> m_output { nullptr };
  23. Duration m_duration { Duration::zero() };
  24. Duration m_last_resume_in_media_time { Duration::zero() };
  25. Duration m_last_resume_in_device_time { Duration::zero() };
  26. Duration m_last_good_device_time { Duration::zero() };
  27. Core::EventLoop& m_main_thread_event_loop;
  28. NonnullRefPtr<Core::Timer> m_update_timer;
  29. bool m_paused { true };
  30. };
  31. }