/* * Copyright 2023 jacqueline * * SPDX-License-Identifier: GPL-3.0-only */ #pragma once #include #include #include #include #include #include #include "opus.h" #include "span.hpp" #include "codec.hpp" namespace codecs { class XiphOpusDecoder : public ICodec { public: XiphOpusDecoder(); ~XiphOpusDecoder(); /* * Returns the output format for the next frame in the stream. MP3 streams * may represent multiple distinct tracks, with different bitrates, and so we * handle the stream only on a frame-by-frame basis. */ auto BeginStream(cpp::span) -> Result override; /* * Writes samples for the current frame. */ auto ContinueStream(cpp::span input, cpp::span output) -> Result override; auto SeekStream(cpp::span input, std::size_t target_sample) -> Result override; private: OpusDecoder *opus_; float *sample_buffer_; std::size_t sample_buffer_len_; } // namespace codecs