// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "audio_core/renderer/audio_renderer.h" #include "core/hle/service/cmif_types.h" #include "core/hle/service/kernel_helpers.h" #include "core/hle/service/service.h" namespace Kernel { class KReadableEvent; } namespace Service::Audio { class IAudioRenderer final : public ServiceFramework { public: explicit IAudioRenderer(Core::System& system_, AudioCore::Renderer::Manager& manager_, AudioCore::AudioRendererParameterInternal& params, Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size, Kernel::KProcess* process_handle_, u64 applet_resource_user_id, s32 session_id); ~IAudioRenderer() override; private: Result GetSampleRate(Out out_sample_rate); Result GetSampleCount(Out out_sample_count); Result GetState(Out out_state); Result GetMixBufferCount(Out out_mix_buffer_count); Result RequestUpdate(OutBuffer out_buffer, OutBuffer out_performance_buffer, InBuffer input); Result RequestUpdateAuto(OutBuffer out_buffer, OutBuffer out_performance_buffer, InBuffer input); Result Start(); Result Stop(); Result QuerySystemEvent(OutCopyHandle out_event); Result SetRenderingTimeLimit(u32 rendering_time_limit); Result GetRenderingTimeLimit(Out out_rendering_time_limit); Result SetVoiceDropParameter(f32 voice_drop_parameter); Result GetVoiceDropParameter(Out out_voice_drop_parameter); KernelHelpers::ServiceContext service_context; Kernel::KEvent* rendered_event; AudioCore::Renderer::Manager& manager; std::unique_ptr impl; Kernel::KProcess* process_handle; Common::ScratchBuffer output_buffer; Common::ScratchBuffer performance_buffer; }; } // namespace Service::Audio