Skip to content

feat(libSceAudioOut): declare later AudioOut2 callable exports - #15445

Open
B-Howell wants to merge 1 commit into
boykopovar:mainfrom
B-Howell:feat/audioout2-1360-exports
Open

B-Howell wants to merge 1 commit into
boykopovar:mainfrom
B-Howell:feat/audioout2-1360-exports

Conversation

@B-Howell

@B-Howell B-Howell commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

What

Declare the 27 function exports of logical library libSceAudioOut2 (module libSceAudioOut) in the PS5 13.60 export inventory that are not yet exported, as throwing placeholders. The inventory has 138 records for this logical library; main (4f41f4c375) already exports the other 111, by name or by literal NID. 8 of the 27 are declared by name and 19 by literal NID alias:

Name NID
sceAudioOut2CustomHrtfIsExist Fxe9sj++wAc
sceAudioOut2Enable3DAudioForUserForCronos WbivTaBo+Do
sceAudioOut2EnableCinematicVrRotation 9Vtt4RU9-YA
sceAudioOut2EnableMonoHpOutput gUg2q4DIW7g
sceAudioOut2EnableTVCorrection vmgNwWTCPYc
sceAudioOut2SetHearingAssist y8CNZsOqKTc
sceAudioOut2SetSparkEQ 5tnxDLdHpOM
sceAudioOut2SetSpeakerInfoForCronos L9eGzD0FuEg
  • The 8 names are not in the pinned NID database. Each was verified by computing its NID with tools/nid_names.py --name; all 8 hash exactly to the exported NID. sceAudioOut2SetSparkEQ and sceAudioOut2EnableTVCorrection were proposed in feat(libSceAudioOut): declare 19 AudioOut2 exports by their hash-verified names #5119 (closed unmerged) and in the open ps5: add 65 hash-verified names zecoxao/sce_symbols#23. sceAudioOut2CustomHrtfIsExist, sceAudioOut2EnableCinematicVrRotation and sceAudioOut2EnableMonoHpOutput are the sceAudioOut2 forms of libSceAudioOut exports already declared on main; sceAudioOut2Enable3DAudioForUserForCronos is the same for sceAudioOutEnable3DAudioForUser with the ForCronos suffix of sceAudioOut2SetHrtfIdForCronos, and sceAudioOut2SetSpeakerInfoForCronos is that suffix on sceAudioOut2SetSpeakerInfo. sceAudioOut2SetHearingAssist is Set with the HearingAssist of the sceUserService*HearingAssist* settings. They are declared as feat(libSceAudioOut): declare 11 additional exports #11918 declared this library's named exports: parameterless int functions in InventoryExports.cpp.
  • The other 19 (0E-UkHm+hZI, 0rE3t9ZgyXE, 7uryG3ZsXQU, 9rWEssK8GMk, BDnwsIqujuQ, EeEaULhU2-g, ElgxuhkuY-k, GKzVK6pYgTk, NuGwMXbT8RU, QEcXEGqvnb4, aFxSMCVm5mQ, cRISiyyeyps, cYDvFPDrl6g, dDyfkQG1MPc, fcv6kkqIs1Y, g-JTbmmuf7M, mWypJWwaLcc, tylNHKM16GA, yd-81WQGSTw) have no known name. tools/nid_names.py resolves none of them, and none matched when hashing these candidates: every whole token of the pinned and the latest aerolib.csv, its ps5_names.txt and unique.txt, the ps5rs catalog, the inventory's verified name map and the pinned public 3.20 catalogue; every SCE name in those sources and on main re-prefixed as sceAudioOut2, sceAudioOut2Lo, sceAudioOut2Sys or sceAudioOut2Ipmi; every audio name there, on main and in feat(libSceAudioOut): declare 19 AudioOut2 exports by their hash-verified names #5119 with its Get/Set/Is/Reset/Enable/Disable and about 65 other verb counterparts and with Ex, ForCronos, ForDiag, _ and other suffixes; and the library's subsystem prefixes (Context, Port, LoContext, LoPort, User, Mbus, Mastering, SpeakerArray and others) combined with those verbs, suffixes and every segment of those names (about 1.4 billion names in all). They use literal NID aliases (libSceAudioOutUnknown_<NID>_nid_no_patch) as in feat(libSceAudioOut): declare 33 callable exports #13223.

Signatures and behavior are unverified; the parameterless int declarations only resolve imports, and every body calls NotImplemented_nid_no_patch(__func__). None of the 27 is in the pinned public 3.20 catalogue. The firmware label is the inventory's, not an independent console measurement. No game unblock is claimed. The declarations follow #15347: a separate header (LaterExports.hpp) included from libSceAudioOut.hpp, separate extern "C" blocks in InventoryExports.cpp, and a debt entry listing every name and NID.

Not changed here: nine of the Unknown aliases #13223 added on main hash to names proposed in #5119 (for example 4Ac+2ezx1lY is sceAudioOut2GetLoContextParam); renaming them is a separate change.

Tested

  • Windows 11 x86-64, WinLibs GCC 15.2.0 r7: built libs and the libSceAudioOut test executables at this commit (on top of main 4f41f4c375), then ran the 59 tests registered there by libSceAudioOut's CMake (audio_out_*, audio_out2_*, guest_audio_out) plus public_headers three times: all passed on every run, none skipped or failed.
  • Ubuntu 22.04 (WSL2) x86-64, GCC 11.4: the same build and set, 63 tests registered there (the Linux-only audio_out_independent_*, audio_out_same_port_close and audio_out_resampling included) plus public_headers, three times: all passed on every run, none skipped or failed.
  • The 27 NIDs are each exported once by the patched libSceAudioOut.prx on both systems (objdump -p on Windows, nm -D on Linux).
  • python3 tools/check_conventions.py --base origin/main with this title and description passed, and git diff --check is clean. The conventions_unknown_nids, conventions_debt_length, conventions_doc_links and debt_split ctest entries, which test the checker itself, also passed in the runs above on both systems.
  • tools/pr_overlap.py --branch found no open pull request that changes the same exports, and failed closed on 4 older PRs that share a file with this branch and do not merge cleanly with main: feat(aot): consolidate native ARM64 compiler, runtime and consumers #5021, feat(libSceVideoOut): opt-in host pause with a key or on focus loss #12863, fix(relinker): match AppContent utility import to provider #13486 and docs(debt): separate entries with blank lines and drop derived export totals #14212, which all change docs/dev/debt/libSceAudioOut.md. By hand: none of their diffs contains any of the 27 NIDs, their alias spellings or the 8 names, and a merge preview of each with this branch gives the same conflicting files as with main alone. A scan of the diffs of the open pull requests (1677 at review time, the newest 30 re-checked before opening) found none of them either.
  • Not tested: console behavior and any title. Nothing calls these exports in the tests; they only resolve imports.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: n/a
  • AI-assisted: yes

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown

Progress report (4f41f4c → 359051f)

📉 System libraries: 26.62% (-0.02%, +27 declared functions)

🆕 27 declared as stubs
Library Name
libSceAudioOut libSceAudioOutUnknown_0E_minus_UkHm_plus_hZI_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_0rE3t9ZgyXE_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_7uryG3ZsXQU_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_9rWEssK8GMk_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_BDnwsIqujuQ_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_EeEaULhU2_minus_g_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_ElgxuhkuY_minus_k_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_GKzVK6pYgTk_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_NuGwMXbT8RU_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_QEcXEGqvnb4_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_aFxSMCVm5mQ_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_cRISiyyeyps_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_cYDvFPDrl6g_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_dDyfkQG1MPc_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_fcv6kkqIs1Y_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_g_minus_JTbmmuf7M_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_mWypJWwaLcc_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_tylNHKM16GA_nid_no_patch
libSceAudioOut libSceAudioOutUnknown_yd_minus_81WQGSTw_nid_no_patch
libSceAudioOut sceAudioOut2CustomHrtfIsExist
libSceAudioOut sceAudioOut2Enable3DAudioForUserForCronos
libSceAudioOut sceAudioOut2EnableCinematicVrRotation
libSceAudioOut sceAudioOut2EnableMonoHpOutput
libSceAudioOut sceAudioOut2EnableTVCorrection
libSceAudioOut sceAudioOut2SetHearingAssist
libSceAudioOut sceAudioOut2SetSparkEQ
libSceAudioOut sceAudioOut2SetSpeakerInfoForCronos

Changed libraries (implemented exports)

Library Before After Change
libSceAudioOut 68/192 (35.42%) 68/219 (31.05%) -4.37%

@B-Howell

B-Howell commented Nov 6, 2026

Copy link
Copy Markdown
Contributor Author

This is ready for review at 359051f952. The AudioOut test matrix and public headers passed three times on Windows and WSL, and the patched library exported all 27 NIDs exactly once on both hosts. Could a reviewer check the AudioOut2 NID mapping and placement?

AI-assisted: yes (Codex).

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant