/* * Copyright (c) 2025, Gregory Bertilson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Media::FFmpeg { class MEDIA_API FFmpegAudioDecoder final : public AudioDecoder { public: static DecoderErrorOr> try_create(CodecID, Audio::SampleSpecification const&, ReadonlyBytes codec_initialization_data); FFmpegAudioDecoder(AVCodecContext* codec_context, AVPacket* packet, AVFrame* frame); virtual ~FFmpegAudioDecoder() override; virtual DecoderErrorOr receive_coded_data(AK::Duration timestamp, ReadonlyBytes coded_data) override; virtual void signal_end_of_stream() override; // Writes all buffered audio samples to the provided block. virtual DecoderErrorOr write_next_block(AudioBlock&) override; virtual void flush() override; private: AVCodecContext* m_codec_context; AVPacket* m_packet; AVFrame* m_frame; }; }