mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-04 13:07:32 +00:00
3.7 KiB
3.7 KiB
libSceOpusDec technical debt
Additional callable exports
- sceOpusDecGetAjmContext hashes to
OyDFNZOLrp0; the public 3.20 catalogue does not list it. Two version-labelled images contain function recordsOyDFNZOLrp0#D#AandOyDFNZOLrp0#E#A, respectively. Dynamic metadata maps those library IDs and module ID 0 tolibSceOpusDec. Older module words:0x08540001,0x03200004; later:0x13590001,0x13600007. Their 15 and 30 function NIDs have sorted-LF SHA-256 valuesf4a21bfa5759129658496cfc706b1aa43d45e5c38f04838e964b09dc97e37cbfand323309a804d747d76ac694770153c20644f7d30b210ca7eaaf6c15f949e05837, using the static ELF membership procedure. Labels do not authenticate retail provenance; the digests identify NID sets only. Independent verification requires matching images. The signature and behavior are unverified; this declaration throws.
Unknown function info
- sceOpusDecCancel and sceOpusDecCreate (libSceOpusDec) - names and NIDs are present in the PS5 3.20 export inventory, but no credible prototypes were found. They are declared without parameters solely to resolve known imports; this is not an ABI claim.
- sceOpusDecDecodeWithPriorityAndTimeout and sceOpusDecDecodeFloatWithPriorityAndTimeout (libSceOpusDec) decode synchronously only for the infinite timeout 0xFFFFFFFF, the value sceOpusDecDecode passes, so the batch ID output is never written. libSceOpusDec.sprx (firmware 13.60, read from disassembly, not measured on a console) passes the timeout to its AJM batch wait; when the wait does not finish it stores the batch ID and returns 0x81740015. Whether a finite timeout finishes depends on the console's decode time, so any other timeout returns the argument errors and then throws. The priority (20 to 100) is validated but does not schedule anything
Functional
- libSceOpusDec uses bundled libopus 1.6.1 for mono/stereo signed-16 decoding at the creation rates the research lists: 8000, 12000, 16000, 24000 and 48000 Hz. The supplied module confirms the exported arguments, read-only context inputs, 640-byte state size and creation rates. Validation errors and their precedence are recovered. Console PCM equivalence, AJM failures, context ownership and termination with live decoders remain unimplemented. Packet loss concealment still throws; decoder state is kept in host registries instead of the native guest state layout.
- sceOpusDecCtl (libSceOpusDec, also sceOpusCeltDecCtl): the effect of requests 4012/4013, 4028, 4029, 4031, 4034/4045, 4046/4047 and 4050/4051 on decoding is not measured; their numbers match libopus's CTLs. Their argument checks, error codes, initial values, stored values and reset follow libSceOpusDec.sprx and libSceOpusCeltDec.sprx (firmware 13.42, run on a PC with AJM stubbed, not measured on a console). Gain and phase inversion go to libopus, and the final range is libopus's; that the AJM decoder scales and reports them the same way is not measured. Reset checks the AJM result words, which the host decoder has none of. Request -1 returns those words: it writes 0 to both before the first decode and throws after one. 4050 set to 1 is stored until reset, but its effect is unknown, so decoding with it set throws. In-band FEC is stored but only matters for packet loss concealment, which still throws.