// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "audio_core/opus/decoder.h" #include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Service::Audio { class IHardwareOpusDecoder final : public ServiceFramework { public: explicit IHardwareOpusDecoder(Core::System& system_, AudioCore::OpusDecoder::HardwareOpus& hardware_opus); ~IHardwareOpusDecoder() override; Result Initialize(const AudioCore::OpusDecoder::OpusParametersEx& params, Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size); Result Initialize(const AudioCore::OpusDecoder::OpusMultiStreamParametersEx& params, Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size); private: Result DecodeInterleavedOld(OutBuffer out_pcm_data, Out out_data_size, Out out_sample_count, InBuffer opus_data); Result SetContext(InBuffer decoder_context); Result DecodeInterleavedForMultiStreamOld(OutBuffer out_pcm_data, Out out_data_size, Out out_sample_count, InBuffer opus_data); Result SetContextForMultiStream(InBuffer decoder_context); Result DecodeInterleavedWithPerfOld( OutBuffer out_pcm_data, Out out_data_size, Out out_sample_count, Out out_time_taken, InBuffer opus_data); Result DecodeInterleavedForMultiStreamWithPerfOld( OutBuffer out_pcm_data, Out out_data_size, Out out_sample_count, Out out_time_taken, InBuffer opus_data); Result DecodeInterleavedWithPerfAndResetOld( OutBuffer out_pcm_data, Out out_data_size, Out out_sample_count, Out out_time_taken, InBuffer opus_data, bool reset); Result DecodeInterleavedForMultiStreamWithPerfAndResetOld( OutBuffer out_pcm_data, Out out_data_size, Out out_sample_count, Out out_time_taken, InBuffer opus_data, bool reset); Result DecodeInterleaved( OutBuffer out_pcm_data, Out out_data_size, Out out_sample_count, Out out_time_taken, InBuffer opus_data, bool reset); Result DecodeInterleavedForMultiStream( OutBuffer out_pcm_data, Out out_data_size, Out out_sample_count, Out out_time_taken, InBuffer opus_data, bool reset); std::unique_ptr impl; Common::ScratchBuffer output_data; }; } // namespace Service::Audio