Commit Graph
69 Commits
Author SHA1 Message Date
Dean 18b9b17664 Merge pull request #9838 from JAB-dev/fix/audioout2-system-debug-state-validation
fix(libSceAudioOut): validate the debug state id and size in sceAudioOut2SetSystemDebugState
2026-10-23 15:36:06 +13:00
Dean 9f64d9203f Merge pull request #9351 from thuanquang/test/audio-out-buffer-size-overflow
test(libSceAudioOut): check that an audio port whose buffer size overflows throws
2026-10-23 13:04:47 +13:00
Dean bacd18e63a Merge pull request #9349 from MarcZX10/codex/audioout2-initex-console-flag31
feat(libSceAudioOut): support mastering InitEx flags
2026-10-23 12:57:51 +13:00
JAB-devandClaude Sonnet 5.5 7281c9b68b Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into fix/audioout2-system-debug-state-validation
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 00:28:54 +02:00
Dean 5f83572bfb Merge pull request #9032 from hypermoist/fix/audioout2-lo-terminate
fix(libSceAudioOut): return 0 from sceAudioOut2LoTerminate and forward sceAudioOut2InitializeEx
2026-10-23 09:43:36 +13:00
JAB-devandClaude Sonnet 5.5 611db84ca5 fix(libSceAudioOut): validate the debug state id and size in sceAudioOut2SetSystemDebugState
sceAudioOut2SetSystemDebugState accepts only the loudness debug state (id 1, 8-byte param); other ids and sizes return the invalid param error and a null pointer returns the invalid pointer error. The one debug state the console also accepts, id 0x20 with a 4-byte param, throws.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-22 18:09:35 +02:00
thuanquangandClaude ca8b3da6fb test(libSceAudioOut): check that an audio port whose buffer size overflows throws
Co-Authored-By: Claude <[email protected]>
2026-10-22 02:07:26 +07:00
MarcZX10 023139d12c feat(libSceAudioOut): support mastering InitEx flags 2026-10-21 19:05:18 +00:00
boykopovar b5d626bc21 fix(audioout): enforce native monitor buffer validation 2026-10-21 21:51:55 +03:00
boykopovar f7a7be1a27 fix(audioout2): restore optional attribute outputs and errors 2026-10-21 21:51:54 +03:00
boykopovar 11c5d585e6 fix(audio): correct mix level and 3d latency validation 2026-10-21 21:48:01 +03:00
hypermistandClaude Opus 5.5 f347e96e38 fix(libSceAudioOut): return 0 from sceAudioOut2LoTerminate and forward sceAudioOut2InitializeEx
The PS5 module's sceAudioOut2LoTerminate stops the low-latency service
and returns 0 whether or not it runs; sceAudioOut2LoInit starts no
service here. sceAudioOut2InitializeEx stores its argument and runs
sceAudioOut2Initialize.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 23:10:16 +13:00
Federico Marras 0d6ba22d9f feat(libSceAudioOut): serve the low-latency AudioOut2 calls through their standard counterparts 2026-10-20 17:16:40 +02:00
Adrià c0607cc4bc Merge pull request #6871 from hugodearaujo/fix/audioout2-speaker-angles
fix(libSceAudioOut): report the front left speaker at +30 degrees, as the console does
2026-10-19 14:19:16 +02:00
Romans Pokrovskis 166e84bed1 test(audio): cover repeated legacy vibration grains 2026-10-19 01:44:21 +03:00
Romans Pokrovskis 4b7f46d79c Merge remote-tracking branch 'origin/main' into codex/review6860-cadence-maineb1 2026-10-19 01:42:35 +03:00
Adrià FranchandClaude Sonnet 5.5 827df2d907 fix(libSceAudioOut): lock the per-port output mutex in sceAudioOutSysClose
main replaced g_outputMutex with g_outputMutexes[], so the Sys close no longer compiled. Mirror sceAudioOutExClose: range-check the handle, lock its mutex.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-18 18:52:46 +02:00
primesoul-web 5dd106ef20 test(libs): assert the GameUpdate null-label error and pin the mastering states layout
guest_gameupdate still asserted the throw that sceGameUpdateGetAddcontLatestVersion
no longer raises for a null entitlement label since it answers 0x80412803, so the
test aborts; it now asserts the error, the same change #5919 makes. The mastering
states layout is pinned with compile-time size checks for the descriptors, the
compressor and limiter states and both states structs, as #6380 suggested.
2026-10-18 18:52:36 +02:00
primesoul-web 3f03bc0e24 feat(libs): finish the CesCs conversions and the AudioOut, AudioIn and GameUpdate exports
libSceCesCs goes to 17 of 17: three-byte EUC-JP JIS X 0212 (0x8F)
characters convert through a table read from the Unicode consortium's
JIS0212.TXT, both directions, so sceCesEucJpToUcs2, the MbcsStrTo*
and *Get*Len forms and the context conversions accept them, and a
character with cells in both JIS X 0208 and JIS X 0212 still encodes
to the two-byte form. sceCesRefersUcsProfileCp1250 returns a profile
with the Windows-1250 table of Microsoft's bestfit1250.txt, accepted
by the SBC and context conversions.

The AudioOut HDMI bitstream Sys family follows the Ex ports: SysOpen
opens a port only for mode 5, the TrueHD MAT route EVO-PLAYER-PS5
reads from the firmware 12.70 mode tables, paced at 192 kHz with no
host device; SysConfigureOutput accepts the observed HDMI MAT switch;
SysClose closes a Sys port. sceAudioOut2MasteringGetState fills the
states by states id with the descriptors KytyPS5 declares, SetParam
answers a null parameter with the mastering invalid-API-parameter
error, Set3DLatency follows KytyPS5's output validation (0x80268001
above 2, any user), SetSystemDebugState records the debug state id,
and GetSpeakerArrayCoefficients returns the front pair KytyPS5 and
prosper both return.

sceAudioInOpen accepts param 0x10 as float mono like KytyPS5; HqOpen
answers a longer grain or a lower rate with the invalid-size and
invalid-frequency errors; AsyncOpen also accepts the 384-sample grain
SharpProspero documents. sceGameUpdateGetAddcontLatestVersion answers
a null entitlement label with 0x80412803, as prosper does.
2026-10-18 18:52:36 +02:00
Romans Pokrovskis a2d6c16bcd fix(audio): route legacy vibration PCM with per-port timing 2026-10-18 10:07:29 +03:00
Dean 532f3e7b89 Merge pull request #6216 from eljackjoestar-cmd/fix/audioout2-completed-grain-backlog
fix(audio): retain completed AudioOut2 grains until pushed
2026-10-18 02:06:50 +13:00
Dean f7d51cb885 Merge pull request #6474 from fdfawef324/claude/audioout2-grain-backlog
fix(libSceAudioOut): count completed AudioOut2 grains in the queue level
2026-10-18 02:05:38 +13:00
Leonardo Baldazzi 742aeb4211 fix(avplayer): preserve caller-paced delivery in no-sync mode 2026-10-16 22:35:36 +02:00
Leonardo Baldazzi bd9d10b4ce fix: correct audio-video playback timing and sync 2026-10-16 22:35:30 +02:00
hugodearaujo 7b55176fa5 fix(libSceAudioOut): report the front left speaker at +30 degrees, as the console does
A PS5 (firmware 13.60) reports the front left speaker of its speaker info at +30 degrees and the front right one at -30, and -360 for the azimuth and elevation of every empty slot, in every HDMI device type and channel setting it offered. sceAudioOut2GetSpeakerInfo reported the front pair the other way round and empty slots as 0, the front centre direction. The type stays 0: the console's type followed the HDMI device type, and it reported 0 with the device set to TV.
2026-10-16 12:06:44 -03:00
fdfawef324andClaude Opus 5.5 2321f1ac7f fix(libSceAudioOut): count completed AudioOut2 grains in the queue level
sceAudioOut2ContextGetQueueLevel left out the grains that
sceAudioOut2ContextAdvance completed and no push had consumed yet. While
pushes filled the 40 ms cushion the level stayed at 0, so a title that
renders as many grains as the level leaves room for and pushes them on
another thread rendered a full queue again after each push. PPSA23226's
Wwise sink does that and stopped once more than 16 completed grains
awaited a push.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 12:36:14 -04:00
Adrià ab808e9d88 Merge pull request #5558 from JJenkx/fix/audio-output-conversion-state
fix(audioout): preserve conversion state across output blocks
2026-10-15 13:38:36 +02:00
eljackjoestar-cmd 6575aa217d fix(audio): retain completed AudioOut2 grains until pushed 2026-10-15 13:06:45 +04:00
toxinexx e7219e4bc4 fix(libSceAudioOut): park guest audio calls at exit before the port tables are destroyed
The library registered no shutdown callback, so a guest mixer thread kept calling sceAudioOut2ContextPush while exit ran the static destructors and mixed from the freed port table (#5864). Exports that read the port tables or output audio now hold a guard: once exit starts they park the thread with LibcAwaitExit_nid_postfix, and the shutdown callback waits for the calls already inside. A push waiting for a grain from sceAudioOut2ContextAdvance also wakes on the shutdown token, so the callback does not wait for an advance that is parked.
2026-10-14 20:43:01 +02:00
Adrià 706ad6c20c Merge pull request #5198 from eljackjoestar-cmd/codex/audioout2-advance-grains
fix(audio): preserve completed AudioOut2 grains across threads
2026-10-14 20:22:51 +02:00
Adrià fe1ccd79b7 Merge pull request #4778 from xXPBSXx/fix/audioout2-port-state-channels-v2
fix(libSceAudioOut): report the port's channel count from sceAudioOut2PortGetState
2026-10-14 19:32:58 +02:00
eljackjoestar-cmd bb4ec482d2 fix(audio): preserve completed AudioOut2 grains across threads 2026-10-14 19:18:32 +04:00
p3nicillinandClaude Opus 5.5 a08310bdc4 feat(libSceAudioOut): open HDMI bitstream ports with sceAudioOutExOpen
Surround Sound Studio (PPSA99051) opens an Ex port for IEC 61937 bursts
when a clip is played. Follow the disassembly and console log in
sainsaji/PS5-Audio-Passthrough-Research: ExOpen refuses modes outside
mask 0x61F with 0x80260015 and opens an S16 stereo port of 256 frames at
48 kHz or 1024 frames at 192 kHz; ExConfigureOutput refuses a nonzero
first argument with 0x80268009 and returns 0 for the documented modes
and targets; ExClose returns 0. The host has no HDMI bitstream output,
so an Ex port has no device and drops its bursts at its own rate.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 14:28:48 +01:00
Joel Fernandes dcfabcc579 feat(pad): bridge controller audio haptics to motor rumble 2026-10-14 13:45:00 +02:00
Dean 21da4061be Merge pull request #5413 from mariusyo07/feat/audioout2-disable-chat
feat(libSceAudioOut): implement sceAudioOut2DisableChat
2026-10-14 22:38:41 +13:00
JJenkx 079164e84c chore: resolve current upstream integration conflicts 2026-10-13 23:13:50 -04:00
Dean 6d032559c3 Merge pull request #4789 from PrintOrb/fix/audioout-shared-sdl-init
fix(audioout): serialize SDL audio initialization for Dark Forces
2026-10-14 15:35:56 +13:00
JJenkx b9beb1fb1a Merge commit '30f961266ade83b41d5c9de7dec1393e7fcecfb7' into fix/audio-output-conversion-state 2026-10-13 18:59:57 -04:00
mrfelek af33c8a1e5 feat(libSceAudioOut): implement sceAudioOut2DisableChat 2026-10-13 21:19:10 +02:00
Adrià FranchandClaude 76075edd38 test(libSceAudioOut): define TestEnableChat; drop stale EnableChat unknown-signature line
Co-Authored-By: Claude <[email protected]>
2026-10-13 15:06:32 +02:00
screammandClaude Fable 5.1 50cd318bb8 feat(libSceAudioOut): implement sceAudioOut2EnableChat
Palworld (PPSA23126, #2648) stops at start-up on the export, imported by
its bundled libdiscord_partner_sdk.prx:

    FAIL: unresolved ELF import oiOi7vgPfAY from libSceAudioOut.prx

PPSA28416 imports it from its bundled party-ps5-shipping.prx as well. The
call itself has not been observed yet.

SharpProspero (5dfdb4b0, Interop/Audio/AudioOut2.cs:460-464) declares
`int sceAudioOut2EnableChat()`, "Allows chat audio alongside the
application's own", and the ps5-payload-dev SDK stub (f5d40f02,
sce_stubs/libSceAudioOut.c:62) exports it as well. There is no context or
handle to validate. The host mixes no chat audio and AudioOut2 has no chat
port, so the call records that chat audio is allowed (traced once with
APS5_TRACE_AUDIOOUT2) and returns 0. Whether the console fails it without
a chat session or when repeated is recorded in technical debt, and the
PPSA28416 "signature unknown" entry is dropped.

NID oiOi7vgPfAY matches tools/nid_names.py and the shadPS4 aerolib list.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-13 15:06:27 +02:00
lorkydey 87ee82410b feat(audioout2): report supported user attributes 2026-10-13 10:24:04 +02:00
xXPBSXxandClaude Sonnet 5.5 72fae20877 fix(libSceAudioOut): report the port's channel count from sceAudioOut2PortGetState
sceAudioOut2PortGetState returned the two channels of the host output for
every port. It now reports the channel count of the port's data format and
clears the rest of the state, so the reserved fields no longer keep the
caller's stack contents. The speaker info and system state calls are
unchanged; a new test covers all three, since none had one.

The channel count follows SharpEmu, another emulator; no console
measurement exists, recorded in TechnicalDebt.md. ASTRO BOT and ASTRO's
PLAYROOM reportedly stop on an assertion that depends on the reported
state (#4317); which field matters is not isolated.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 09:38:48 +02:00
JJenkx 41112152dc fix(audioout): preserve conversion state across output blocks 2026-10-12 20:56:44 -04:00
Adrià FranchandClaude 91bad2fce5 test(libSceAudioOut): drop sceAudioOutExGetMonitorInfo from the not-implemented test
Co-Authored-By: Claude <[email protected]>
2026-10-12 23:19:02 +02:00
p3nicillinandClaude Opus 5.5 e284717ebe feat(libSceAudioOut): list no audio descriptors in sceAudioOutExGetMonitorInfo
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-12 23:19:02 +02:00
PrintOrb 5031432db0 test(audioout): detect overlapping backend initialization 2026-10-12 16:04:06 -05:00
screammandClaude Fable 5.1 f51180973e feat(libSceAudioOut): implement sceAudioOutSysGetHdmiMonitorInfo
Surround Sound Studio (PPSA99051), catalog build on main a11c8f7f with
the flat-interpolation fix, stops 16 s in, before its first frame
(orishamir, #3581 comment 6109839314):

    sceAudioOutSysGetHdmiMonitorInfo not implemented

The call takes (type, out, size); out must be non-null, size exactly
0x180 and type 1 (HDMI) or 0x10 (sainsaji/PS5-Audio-Passthrough-Research
c3be9c2a, docs/FINDINGS.md section 3 and AGENTS.md:25, firmware 12.70).
Titles read the monitor name at +0x0B, the descriptor count at +0x94 and
8-byte descriptors from +0x98 (same, FINDINGS.md hardware log item 1 and
sample-app/src/platform/ps5/bitstream_out.cpp:92-128).

Audio reaches the host through SDL as PCM and there is no EDID, so type 1
with a 0x180-byte buffer reports a sink without a name or descriptors:
the buffer is zeroed and 0 is returned. Surround Sound Studio's
Passthrough page then lists no formats; EVO Player's code treats an empty
list like a negative return. A null buffer returns 0x80260004, as the
other AudioOut calls do. Type 0x10, other types and other sizes throw:
their results and error codes are not known.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-11 19:45:00 +03:00
Get-fix f2b4bf3b5b fix(audio): export the sceAudioOutEx bitstream port functions
Jelly5 (PPSA99505) imports sceAudioOutExGetMonitorInfo (PhnNN0UEV6Y),
sceAudioOutExConfigureOutput (VcE+gXSwFXI), sceAudioOutExOpen
(6X6dp+07h4U) and sceAudioOutExClose (0TfjSulCV2A) from libSceAudioOut
and fails to load because no library exports them. It calls them only
for its optional HDMI bitstream output, and their signatures are
unconfirmed, so they are exported without an implementation and throw
if they are called, like sceSaveDataCancel.
2026-10-10 16:12:11 +03:00
Adrià 95fe14235a Merge pull request #2536 from orbz22/fix/audioout2-queue-port-buffers
fix(audioout): play every AudioOut2 port buffer set between pushes, one per grain
2026-10-10 11:17:19 +02:00