diff options
| author | 2024-01-28 15:02:22 -0500 | |
|---|---|---|
| committer | 2024-01-28 15:02:22 -0500 | |
| commit | 5561a08d59f816b61ed6fab2131ee5d40cc51db7 (patch) | |
| tree | b518bb8b995747b83508eeb0f74acd5a1a5c287a /src/core/hle/service/audio | |
| parent | Merge pull request #12833 from merryhime/vsync-crash (diff) | |
| parent | Use the input process handle to get the correct application's memory (diff) | |
| download | yuzu-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.cpp | 16 |
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 | ||
| 71 | private: | 74 | private: |
| @@ -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 | ||
| 524 | void AudRenU::OpenAudioRendererForManualExecution(HLERequestContext& ctx) { | 528 | void AudRenU::OpenAudioRendererForManualExecution(HLERequestContext& ctx) { |
| 525 | LOG_DEBUG(Service_Audio, "called"); | 529 | LOG_ERROR(Service_Audio, "called. Implement me!"); |
| 526 | } | 530 | } |
| 527 | 531 | ||
| 528 | void AudRenU::GetAudioDeviceServiceWithRevisionInfo(HLERequestContext& ctx) { | 532 | void AudRenU::GetAudioDeviceServiceWithRevisionInfo(HLERequestContext& ctx) { |