From afc98937157262e32c8abf2ce372c3112fd44da9 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sun, 8 Feb 2026 22:39:36 +0200 Subject: [PATCH] Added sceAudioOutGetSystemState (#4011) --- src/core/libraries/audio/audioout.cpp | 30 +++++++++++++++++---------- src/core/libraries/audio/audioout.h | 8 ++++++- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/core/libraries/audio/audioout.cpp b/src/core/libraries/audio/audioout.cpp index 6c58df94f..100ddd51c 100644 --- a/src/core/libraries/audio/audioout.cpp +++ b/src/core/libraries/audio/audioout.cpp @@ -496,11 +496,11 @@ s32 PS4_SYSV_ABI sceAudioOutGetPortState(s32 handle, OrbisAudioOutPortState* sta state->rerouteCounter = 0; state->flag = 0; - LOG_INFO(Lib_AudioOut, - "called, handle={:#x}, state={}, output={}, channel={}, volume={}, " - "rerouteCounter={}, flag={}", - handle, fmt::ptr(state), state->output, state->channel, state->volume, - state->rerouteCounter, state->flag); + LOG_DEBUG(Lib_AudioOut, + "called, handle={:#x}, state={}, output={}, channel={}, volume={}, " + "rerouteCounter={}, flag={}", + handle, fmt::ptr(state), state->output, state->channel, state->volume, + state->rerouteCounter, state->flag); return ORBIS_OK; } @@ -729,7 +729,7 @@ s32 PS4_SYSV_ABI sceAudioOutSetVolume(s32 handle, s32 flag, s32* vol) { } s32 PS4_SYSV_ABI sceAudioOutSetMixLevelPadSpk(s32 handle, s32 mixLevel) { - LOG_ERROR(Lib_AudioOut, "(STUBBED) called"); + LOG_INFO(Lib_AudioOut, "(STUBBED) called"); if (lazy_init.load(std::memory_order_relaxed) == 0 || audio == nullptr) { LOG_ERROR(Lib_AudioOut, "audio is not init"); return ORBIS_AUDIO_OUT_ERROR_NOT_INIT; @@ -769,6 +769,19 @@ s32 PS4_SYSV_ABI sceAudioOutSetMixLevelPadSpk(s32 handle, s32 mixLevel) { return ORBIS_OK; } +s32 PS4_SYSV_ABI sceAudioOutGetSystemState(OrbisAudioOutSystemState* state) { + if (lazy_init.load(std::memory_order_relaxed) == 0 || audio == nullptr) { + LOG_ERROR(Lib_AudioOut, "audio is not init"); + return ORBIS_AUDIO_OUT_ERROR_NOT_INIT; + } + if (state == nullptr) { + return ORBIS_AUDIO_OUT_ERROR_INVALID_POINTER; + } + memset(state, 0, sizeof(*state)); + LOG_DEBUG(Lib_AudioOut, "called"); + return ORBIS_OK; +} + /* * Stubbed functions **/ @@ -892,11 +905,6 @@ s32 PS4_SYSV_ABI sceAudioOutGetSparkVss() { return ORBIS_OK; } -s32 PS4_SYSV_ABI sceAudioOutGetSystemState() { - LOG_ERROR(Lib_AudioOut, "(STUBBED) called"); - return ORBIS_OK; -} - s32 PS4_SYSV_ABI sceAudioOutInitIpmiGetSession() { LOG_ERROR(Lib_AudioOut, "(STUBBED) called"); return ORBIS_OK; diff --git a/src/core/libraries/audio/audioout.h b/src/core/libraries/audio/audioout.h index 93db8150f..ffc1f9eb1 100644 --- a/src/core/libraries/audio/audioout.h +++ b/src/core/libraries/audio/audioout.h @@ -97,6 +97,12 @@ struct OrbisAudioOutPortState { u64 reserved64[2]; }; +struct OrbisAudioOutSystemState { + float loudness; + u8 reserved8[4]; + u64 reserved64[3]; +}; + struct AudioFormatInfo { bool is_float; u8 sample_size; @@ -162,7 +168,7 @@ s32 PS4_SYSV_ABI sceAudioOutGetSimulatedBusUsableStatusByBusType(); s32 PS4_SYSV_ABI sceAudioOutGetSimulatedHandleStatusInfo(); s32 PS4_SYSV_ABI sceAudioOutGetSimulatedHandleStatusInfo2(); s32 PS4_SYSV_ABI sceAudioOutGetSparkVss(); -s32 PS4_SYSV_ABI sceAudioOutGetSystemState(); +s32 PS4_SYSV_ABI sceAudioOutGetSystemState(OrbisAudioOutSystemState* state); s32 PS4_SYSV_ABI sceAudioOutInit(); s32 PS4_SYSV_ABI sceAudioOutInitIpmiGetSession(); s32 PS4_SYSV_ABI sceAudioOutMasteringGetState();