Check on the quad and pulse layouts that 100 and above write the same bytes as the call without a percentage, that 0 silences exactly the actuator channels, that 50 halves them, and that the speaker and unmapped channels are never touched.
#9838 read sceAudioOut2SetSystemDebugState in PS5 firmware 3.20 and 4.03:
it returns 0x80268006 (not initialized) before sceAudioOut2Initialize,
ahead of its pointer, id and size checks. The debt entry for
sceAudioOut2EnableChat and sceAudioOut2DisableChat records the same
0x80268006 before AudioOut2 initialization. Both were left out while
AudioOut2 initialization was not tracked; AudioOut2IsInitialized_nid_no_patch
now tracks it, so all three return 0x80268006 first and change no state.
The two debt entries drop the closed gap.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The PS5 module read for #9027 returns 0x80268006 from sceAudioOut2MasteringInit,
sceAudioOut2MasteringInitEx, sceAudioOut2MasteringTerm,
sceAudioOut2MasteringGetState and sceAudioOut2MasteringSetParam before
sceAudioOut2Initialize. #9027 left the check out because AudioOut2
initialization was not tracked; AudioOut2IsInitialized_nid_no_patch now
tracks it, so each of these returns 0x80268006 first, before its own
mastering-state and argument checks, and changes no state. The debt entry
drops the closed gap.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
On PS5 firmware 13.60 a second sceAudioOut2Initialize returns 0x80268004,
also after sceAudioOutInit, and a second sceAudioOutInit returns
0x8026000e. sceAudioOutInit after sceAudioOut2Initialize still returns 0.
sceAudioOut2InitializeEx and sceAudioOut2LoInit keep returning 0; their
repeats were not measured.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
SDL's WASAPI enumeration drops failures silently: EnumAudioEndpoints or
GetCount errors leave the list empty, and a device whose metadata lookup
fails is left out, so an empty list does not prove there is no default
endpoint. The skip now also requires IMMDeviceEnumerator's
GetDefaultAudioEndpoint(eRender, eConsole), the call SDL's default open
makes, to return ERROR_NOT_FOUND. The probe runs only when the wasapi list
is empty.
audio_out_default_open gains wasapi_zero_default (empty WASAPI list, the
probe finds an endpoint, the default is opened) and checks that the probe
runs only for an empty WASAPI list.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
SDL documents that a default open can succeed when SDL_GetNumAudioDevices
returns zero, for instance ALSA whose default PCM works without device
hints. The shortcut now applies only to the wasapi driver, which
enumerates active render endpoints synchronously when the subsystem
starts; with none, its default open has no endpoint to use and fails after
SDL's 8 s retry.
audio_out_default_open runs AudioOut.cpp against a stubbed SDL in four
modes: zero devices on alsa with a working default, zero on wasapi, a
positive count and an unknown count.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
`sceAudioOutInit` now initializes AudioOut2, so the extra `sceAudioOut2Initialize()` in the speaker-info test after a legacy init pinned a repeated direct-init result that no run on the console covered; the test keeps the legacy-init to speaker-info success check. The debt file records that a repeated `sceAudioOutInit` returns 0 here against `0x8026000e` on the firmware and that a repeated `sceAudioOut2Initialize` is unmeasured, describes the flag-1 selector as the unidentified per-process libkernel value with BunnyFl's `0x14FFFFF` boundary, and splits the speaker-info entry so no entry passes the length limit.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
In PS5 firmware 3.20 and 4.03 sceAudioOutInit calls sceAudioOut2Initialize, which sets the flag that sceAudioOut2GetSpeakerInfo tests before anything else. A title that only calls sceAudioOutInit got 0x80268006 here. The flag moves next to sceAudioOutInit so the test targets that build only AudioOut.cpp still link.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
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]>
sceAudioOutSetMainOutput threw "not implemented". In firmware 12.70
the export is `xor eax,eax; ret` (PS5-Audio-Passthrough-Research,
docs/FINDINGS.md line 25 at cf3c921): it reads no argument, changes
nothing and returns 0. It now does the same, defined in AudioOut.cpp
next to the Sys output calls.
Its parameters stay unknown and other firmware versions are
unverified. The debt file records this under Silent stubs, which
check_conventions requires for an export that returns a constant,
in place of the function's unknown-signature line.
The audio_out_sys test checks that the call does not throw and
returns 0; on main both checks fail.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
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