/* * Copyright (c) 2024, Gregory Bertilson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include "FFmpegForward.h" namespace Media::FFmpeg { class MEDIA_API FFmpegVideoDecoder final : public VideoDecoder { public: static DecoderErrorOr> try_create(CodecID, ReadonlyBytes codec_initialization_data); FFmpegVideoDecoder(AVCodecContext* codec_context, AVPacket* packet, AVFrame* frame); virtual ~FFmpegVideoDecoder() override; virtual DecoderErrorOr receive_coded_data(AK::Duration timestamp, AK::Duration duration, ReadonlyBytes coded_data) override; virtual void signal_end_of_stream() override; virtual DecoderErrorOr> get_decoded_frame(CodingIndependentCodePoints const& container_cicp) override; virtual void flush() override; private: AVCodecContext* m_codec_context; AVPacket* m_packet; AVFrame* m_frame; }; }