/* * Copyright (c) 2024, Gregory Bertilson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include "FFmpegForward.h" namespace Media::FFmpeg { class FFmpegVideoDecoder final : public VideoDecoder { public: static DecoderErrorOr> try_create(CodecID, ReadonlyBytes codec_initialization_data); FFmpegVideoDecoder(AVCodecContext* codec_context, AVPacket* packet, AVFrame* frame); ~FFmpegVideoDecoder(); DecoderErrorOr receive_sample(AK::Duration timestamp, ReadonlyBytes sample) override; DecoderErrorOr> get_decoded_frame() override; void flush() override; private: DecoderErrorOr decode_single_sample(AK::Duration timestamp, u8* data, int size); AVCodecContext* m_codec_context; AVPacket* m_packet; AVFrame* m_frame; }; }