From c71722641228c6b78f15c006aec0a8ae6e1b0cf9 Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Sat, 19 Jul 2025 11:54:10 +0200 Subject: [PATCH] Implement sceAudioOutGetLastOutputTime --- src/core/libraries/audio/audioout.cpp | 8 ++++++-- src/core/libraries/audio/audioout.h | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/libraries/audio/audioout.cpp b/src/core/libraries/audio/audioout.cpp index 2ec44e80f..4d02bb2bf 100644 --- a/src/core/libraries/audio/audioout.cpp +++ b/src/core/libraries/audio/audioout.cpp @@ -14,6 +14,7 @@ #include "core/libraries/audio/audioout.h" #include "core/libraries/audio/audioout_backend.h" #include "core/libraries/audio/audioout_error.h" +#include "core/libraries/kernel/time.h" #include "core/libraries/libs.h" namespace Libraries::AudioOut { @@ -168,8 +169,10 @@ int PS4_SYSV_ABI sceAudioOutGetInfoOpenNum() { return ORBIS_OK; } -int PS4_SYSV_ABI sceAudioOutGetLastOutputTime() { - LOG_ERROR(Lib_AudioOut, "(STUBBED) called"); +int PS4_SYSV_ABI sceAudioOutGetLastOutputTime(s32 handle, u64* output_time) { + LOG_DEBUG(Lib_AudioOut, "called"); + auto& port = ports_out.at(handle - 1); + *output_time = port.last_output_time; return ORBIS_OK; } @@ -396,6 +399,7 @@ s32 PS4_SYSV_ABI sceAudioOutOutput(s32 handle, void* ptr) { if (ptr != nullptr && port.IsOpen()) { std::memcpy(port.output_buffer, ptr, port.BufferSize()); port.output_ready = true; + port.last_output_time = Kernel::sceKernelGetProcessTime(); } } port.output_cv.notify_one(); diff --git a/src/core/libraries/audio/audioout.h b/src/core/libraries/audio/audioout.h index 5247561ee..6d3a6399b 100644 --- a/src/core/libraries/audio/audioout.h +++ b/src/core/libraries/audio/audioout.h @@ -96,6 +96,7 @@ struct PortOut { AudioFormatInfo format_info; u32 sample_rate; u32 buffer_frames; + u64 last_output_time; std::array volume; [[nodiscard]] bool IsOpen() const { @@ -127,7 +128,7 @@ int PS4_SYSV_ABI sceAudioOutGetFocusEnablePid(); int PS4_SYSV_ABI sceAudioOutGetHandleStatusInfo(); int PS4_SYSV_ABI sceAudioOutGetInfo(); int PS4_SYSV_ABI sceAudioOutGetInfoOpenNum(); -int PS4_SYSV_ABI sceAudioOutGetLastOutputTime(); +int PS4_SYSV_ABI sceAudioOutGetLastOutputTime(s32 handle, u64* output_time); int PS4_SYSV_ABI sceAudioOutGetPortState(s32 handle, OrbisAudioOutPortState* state); int PS4_SYSV_ABI sceAudioOutGetSimulatedBusUsableStatusByBusType(); int PS4_SYSV_ABI sceAudioOutGetSimulatedHandleStatusInfo();