/* * Copyright 2023 Daniel * * SPDX-License-Identifier: GPL-3.0-only */ #pragma once #include #include #include #include #include #include #include "sample.hpp" #include "source_buffer.hpp" #include "codec.hpp" namespace codecs { static const uint16_t kWaveFormatPCM = 0x0001; static const uint16_t kWaveFormatIEEEFloat = 0x0003; static const uint16_t kWaveFormatAlaw = 0x0006; static const uint16_t kWaveFormatMulaw = 0x0007; static const uint16_t kWaveFormatExtensible = 0xFFFE; class WavDecoder : public ICodec { public: WavDecoder(); ~WavDecoder(); auto OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result override; auto DecodeTo(cpp::span destination) -> cpp::result override; WavDecoder(const WavDecoder&) = delete; WavDecoder& operator=(const WavDecoder&) = delete; private: std::shared_ptr input_; SourceBuffer buffer_; uint16_t wave_format_; uint16_t subformat_; OutputFormat output_format_; uint16_t bytes_per_sample_; uint16_t num_channels_; auto GetFormat() const -> uint16_t; }; } // namespace codecs