summaryrefslogtreecommitdiff
path: root/src/core/hle/service/audio
diff options
context:
space:
mode:
authorGravatar liamwhite2024-01-28 15:02:22 -0500
committerGravatar GitHub2024-01-28 15:02:22 -0500
commit5561a08d59f816b61ed6fab2131ee5d40cc51db7 (patch)
treeb518bb8b995747b83508eeb0f74acd5a1a5c287a /src/core/hle/service/audio
parentMerge pull request #12833 from merryhime/vsync-crash (diff)
parentUse the input process handle to get the correct application's memory (diff)
downloadyuzu-5561a08d59f816b61ed6fab2131ee5d40cc51db7.tar.gz
yuzu-5561a08d59f816b61ed6fab2131ee5d40cc51db7.tar.xz
yuzu-5561a08d59f816b61ed6fab2131ee5d40cc51db7.zip
Merge pull request #12831 from Kelebek1/audren_multi
Use the input process handle to get the correct application's memory
Diffstat (limited to 'src/core/hle/service/audio')
-rw-r--r--src/core/hle/service/audio/audren_u.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index 05581e6e0..10108abc0 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -35,10 +35,11 @@ public:
35 explicit IAudioRenderer(Core::System& system_, Manager& manager_, 35 explicit IAudioRenderer(Core::System& system_, Manager& manager_,
36 AudioCore::AudioRendererParameterInternal& params, 36 AudioCore::AudioRendererParameterInternal& params,
37 Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size, 37 Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size,
38 u32 process_handle, u64 applet_resource_user_id, s32 session_id) 38 u32 process_handle, Kernel::KProcess& process_,
39 u64 applet_resource_user_id, s32 session_id)
39 : ServiceFramework{system_, "IAudioRenderer"}, service_context{system_, "IAudioRenderer"}, 40 : ServiceFramework{system_, "IAudioRenderer"}, service_context{system_, "IAudioRenderer"},
40 rendered_event{service_context.CreateEvent("IAudioRendererEvent")}, manager{manager_}, 41 rendered_event{service_context.CreateEvent("IAudioRendererEvent")}, manager{manager_},
41 impl{std::make_unique<Renderer>(system_, manager, rendered_event)} { 42 impl{std::make_unique<Renderer>(system_, manager, rendered_event)}, process{process_} {
42 // clang-format off 43 // clang-format off
43 static const FunctionInfo functions[] = { 44 static const FunctionInfo functions[] = {
44 {0, &IAudioRenderer::GetSampleRate, "GetSampleRate"}, 45 {0, &IAudioRenderer::GetSampleRate, "GetSampleRate"},
@@ -59,13 +60,15 @@ public:
59 // clang-format on 60 // clang-format on
60 RegisterHandlers(functions); 61 RegisterHandlers(functions);
61 62
62 impl->Initialize(params, transfer_memory, transfer_memory_size, process_handle, 63 process.Open();
64 impl->Initialize(params, transfer_memory, transfer_memory_size, process_handle, process,
63 applet_resource_user_id, session_id); 65 applet_resource_user_id, session_id);
64 } 66 }
65 67
66 ~IAudioRenderer() override { 68 ~IAudioRenderer() override {
67 impl->Finalize(); 69 impl->Finalize();
68 service_context.CloseEvent(rendered_event); 70 service_context.CloseEvent(rendered_event);
71 process.Close();
69 } 72 }
70 73
71private: 74private:
@@ -235,6 +238,7 @@ private:
235 Kernel::KEvent* rendered_event; 238 Kernel::KEvent* rendered_event;
236 Manager& manager; 239 Manager& manager;
237 std::unique_ptr<Renderer> impl; 240 std::unique_ptr<Renderer> impl;
241 Kernel::KProcess& process;
238 Common::ScratchBuffer<u8> output_buffer; 242 Common::ScratchBuffer<u8> output_buffer;
239 Common::ScratchBuffer<u8> performance_buffer; 243 Common::ScratchBuffer<u8> performance_buffer;
240}; 244};
@@ -455,7 +459,7 @@ void AudRenU::OpenAudioRenderer(HLERequestContext& ctx) {
455 return; 459 return;
456 } 460 }
457 461
458 auto process{ctx.GetObjectFromHandle<Kernel::KProcess>(process_handle)}; 462 auto process{ctx.GetObjectFromHandle<Kernel::KProcess>(process_handle).GetPointerUnsafe()};
459 auto transfer_memory{ctx.GetObjectFromHandle<Kernel::KTransferMemory>(transfer_memory_handle)}; 463 auto transfer_memory{ctx.GetObjectFromHandle<Kernel::KTransferMemory>(transfer_memory_handle)};
460 464
461 const auto session_id{impl->GetSessionId()}; 465 const auto session_id{impl->GetSessionId()};
@@ -472,7 +476,7 @@ void AudRenU::OpenAudioRenderer(HLERequestContext& ctx) {
472 IPC::ResponseBuilder rb{ctx, 2, 0, 1}; 476 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
473 rb.Push(ResultSuccess); 477 rb.Push(ResultSuccess);
474 rb.PushIpcInterface<IAudioRenderer>(system, *impl, params, transfer_memory.GetPointerUnsafe(), 478 rb.PushIpcInterface<IAudioRenderer>(system, *impl, params, transfer_memory.GetPointerUnsafe(),
475 transfer_memory_size, process_handle, 479 transfer_memory_size, process_handle, *process,
476 applet_resource_user_id, session_id); 480 applet_resource_user_id, session_id);
477} 481}
478 482
@@ -522,7 +526,7 @@ void AudRenU::GetAudioDeviceService(HLERequestContext& ctx) {
522} 526}
523 527
524void AudRenU::OpenAudioRendererForManualExecution(HLERequestContext& ctx) { 528void AudRenU::OpenAudioRendererForManualExecution(HLERequestContext& ctx) {
525 LOG_DEBUG(Service_Audio, "called"); 529 LOG_ERROR(Service_Audio, "called. Implement me!");
526} 530}
527 531
528void AudRenU::GetAudioDeviceServiceWithRevisionInfo(HLERequestContext& ctx) { 532void AudRenU::GetAudioDeviceServiceWithRevisionInfo(HLERequestContext& ctx) {