// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "audio_core/audio_out_manager.h" #include "audio_core/out/audio_out_system.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 IAudioOut : public ServiceFramework { public: explicit IAudioOut(Core::System& system_, AudioCore::AudioOut::Manager& manager, size_t session_id, const std::string& device_name, const AudioCore::AudioOut::AudioOutParameter& in_params, Kernel::KProcess* handle, u64 applet_resource_user_id); ~IAudioOut() override; std::shared_ptr GetImpl() { return impl; } Result GetAudioOutState(Out out_state); Result Start(); Result Stop(); Result AppendAudioOutBuffer( InArray audio_out_buffer, u64 buffer_client_ptr); Result AppendAudioOutBufferAuto( InArray audio_out_buffer, u64 buffer_client_ptr); Result RegisterBufferEvent(OutCopyHandle out_event); Result GetReleasedAudioOutBuffers(OutArray out_audio_buffer, Out out_count); Result GetReleasedAudioOutBuffersAuto(OutArray out_audio_buffer, Out out_count); Result ContainsAudioOutBuffer(Out out_contains_buffer, u64 buffer_client_ptr); Result GetAudioOutBufferCount(Out out_buffer_count); Result GetAudioOutPlayedSampleCount(Out out_played_sample_count); Result FlushAudioOutBuffers(Out out_flushed); Result SetAudioOutVolume(f32 volume); Result GetAudioOutVolume(Out out_volume); private: KernelHelpers::ServiceContext service_context; Kernel::KEvent* event; Kernel::KProcess* process; std::shared_ptr impl; }; } // namespace Service::Audio