pineapple-src/src/core/hle/service/audio/audio_out.h

59 lines
2.2 KiB
C++
Executable File

// 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<IAudioOut> {
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<AudioCore::AudioOut::Out> GetImpl() {
return impl;
}
Result GetAudioOutState(Out<u32> out_state);
Result Start();
Result Stop();
Result AppendAudioOutBuffer(
InArray<AudioCore::AudioOut::AudioOutBuffer, BufferAttr_HipcMapAlias> audio_out_buffer,
u64 buffer_client_ptr);
Result AppendAudioOutBufferAuto(
InArray<AudioCore::AudioOut::AudioOutBuffer, BufferAttr_HipcAutoSelect> audio_out_buffer,
u64 buffer_client_ptr);
Result RegisterBufferEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
Result GetReleasedAudioOutBuffers(OutArray<u64, BufferAttr_HipcMapAlias> out_audio_buffer,
Out<u32> out_count);
Result GetReleasedAudioOutBuffersAuto(OutArray<u64, BufferAttr_HipcAutoSelect> out_audio_buffer,
Out<u32> out_count);
Result ContainsAudioOutBuffer(Out<bool> out_contains_buffer, u64 buffer_client_ptr);
Result GetAudioOutBufferCount(Out<u32> out_buffer_count);
Result GetAudioOutPlayedSampleCount(Out<u64> out_played_sample_count);
Result FlushAudioOutBuffers(Out<bool> out_flushed);
Result SetAudioOutVolume(f32 volume);
Result GetAudioOutVolume(Out<f32> out_volume);
private:
KernelHelpers::ServiceContext service_context;
Kernel::KEvent* event;
Kernel::KProcess* process;
std::shared_ptr<AudioCore::AudioOut::Out> impl;
};
} // namespace Service::Audio