/* * Copyright (c) 2023, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::Platform { class AudioCodecPlugin { public: using AudioCodecPluginCreator = Function>(NonnullRefPtr)>; static void install_creation_hook(AudioCodecPluginCreator); static ErrorOr> create(NonnullRefPtr); virtual ~AudioCodecPlugin(); static ErrorOr> read_samples_from_loader(Audio::Loader&, size_t samples_to_load); static Duration set_loader_position(Audio::Loader&, double position, Duration duration); static Duration current_loader_position(Audio::Loader const&); virtual void resume_playback() = 0; virtual void pause_playback() = 0; virtual void set_volume(double) = 0; virtual void seek(double) = 0; virtual Duration duration() = 0; Function on_playback_position_updated; protected: AudioCodecPlugin(); }; }