|
|
|
@ -35,10 +35,11 @@ public:
|
|
|
|
|
explicit IAudioRenderer(Core::System& system_, Manager& manager_,
|
|
|
|
|
AudioCore::AudioRendererParameterInternal& params,
|
|
|
|
|
Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size,
|
|
|
|
|
u32 process_handle, u64 applet_resource_user_id, s32 session_id)
|
|
|
|
|
u32 process_handle, Kernel::KProcess& process_,
|
|
|
|
|
u64 applet_resource_user_id, s32 session_id)
|
|
|
|
|
: ServiceFramework{system_, "IAudioRenderer"}, service_context{system_, "IAudioRenderer"},
|
|
|
|
|
rendered_event{service_context.CreateEvent("IAudioRendererEvent")}, manager{manager_},
|
|
|
|
|
impl{std::make_unique<Renderer>(system_, manager, rendered_event)} {
|
|
|
|
|
impl{std::make_unique<Renderer>(system_, manager, rendered_event)}, process{process_} {
|
|
|
|
|
// clang-format off
|
|
|
|
|
static const FunctionInfo functions[] = {
|
|
|
|
|
{0, &IAudioRenderer::GetSampleRate, "GetSampleRate"},
|
|
|
|
@ -59,13 +60,15 @@ public:
|
|
|
|
|
// clang-format on
|
|
|
|
|
RegisterHandlers(functions);
|
|
|
|
|
|
|
|
|
|
impl->Initialize(params, transfer_memory, transfer_memory_size, process_handle,
|
|
|
|
|
process.Open();
|
|
|
|
|
impl->Initialize(params, transfer_memory, transfer_memory_size, process_handle, process,
|
|
|
|
|
applet_resource_user_id, session_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
~IAudioRenderer() override {
|
|
|
|
|
impl->Finalize();
|
|
|
|
|
service_context.CloseEvent(rendered_event);
|
|
|
|
|
process.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
@ -235,6 +238,7 @@ private:
|
|
|
|
|
Kernel::KEvent* rendered_event;
|
|
|
|
|
Manager& manager;
|
|
|
|
|
std::unique_ptr<Renderer> impl;
|
|
|
|
|
Kernel::KProcess& process;
|
|
|
|
|
Common::ScratchBuffer<u8> output_buffer;
|
|
|
|
|
Common::ScratchBuffer<u8> performance_buffer;
|
|
|
|
|
};
|
|
|
|
@ -455,7 +459,7 @@ void AudRenU::OpenAudioRenderer(HLERequestContext& ctx) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto process{ctx.GetObjectFromHandle<Kernel::KProcess>(process_handle)};
|
|
|
|
|
auto process{ctx.GetObjectFromHandle<Kernel::KProcess>(process_handle).GetPointerUnsafe()};
|
|
|
|
|
auto transfer_memory{ctx.GetObjectFromHandle<Kernel::KTransferMemory>(transfer_memory_handle)};
|
|
|
|
|
|
|
|
|
|
const auto session_id{impl->GetSessionId()};
|
|
|
|
@ -472,7 +476,7 @@ void AudRenU::OpenAudioRenderer(HLERequestContext& ctx) {
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
|
|
|
|
rb.Push(ResultSuccess);
|
|
|
|
|
rb.PushIpcInterface<IAudioRenderer>(system, *impl, params, transfer_memory.GetPointerUnsafe(),
|
|
|
|
|
transfer_memory_size, process_handle,
|
|
|
|
|
transfer_memory_size, process_handle, *process,
|
|
|
|
|
applet_resource_user_id, session_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -522,7 +526,7 @@ void AudRenU::GetAudioDeviceService(HLERequestContext& ctx) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AudRenU::OpenAudioRendererForManualExecution(HLERequestContext& ctx) {
|
|
|
|
|
LOG_DEBUG(Service_Audio, "called");
|
|
|
|
|
LOG_ERROR(Service_Audio, "called. Implement me!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AudRenU::GetAudioDeviceServiceWithRevisionInfo(HLERequestContext& ctx) {
|
|
|
|
|