The firmware 13.42 module writes 0 to the 4050 flag on reset, so reset
clears it again. Restore main's wording of the
sceOpusDecDecodeWithPriorityAndTimeout debt entry, which names the
module it was read from.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Match the firmware 13.42 modules run natively with AJM stubbed: setting
4050 to 1 is stored and read back through 4051 and survives reset, and
request -1 with two valid pointers writes 0 to both on a state that has
not decoded. Decoding with 4050 set, and request -1 after a decode, still
throw because their behaviour is not measured.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Resolution: kept main's merged float/priority/timeout variants and this PR's Ctl implementation, declarations and debt entries; reworded one debt line to state behaviour only.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The host decodes synchronously, so only the infinite timeout that
sceOpusDecDecode itself passes can be honoured. Other timeouts still
return the argument errors and then report the path as unimplemented,
because on the console the result depends on whether the AJM batch
finishes within the timeout.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01SNqSvnFwRBz3D76n476yw6
Handles reset, sample rate, final range, gain, phase inversion and, for OpusDec, inband FEC and request 4050/4051 with the module's error codes, applying gain and phase inversion to libopus.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01SNqSvnFwRBz3D76n476yw6
Keeps main's recovered decode argument errors (+0, +6 to +9, unknown
state +1) on top of the libopus backend, and drops the FFmpeg packet
size bound, which no longer applies. The debt entries keep main's
recovered facts with the backend named as libopus; the two FFmpeg delay
entries go, since libopus decodes at the requested rate.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01SNqSvnFwRBz3D76n476yw6
Both modules route every decode export through one worker. Its checks
run in this order: state, packet, size, PCM pointer, capacity, then a
priority outside 20..100 (+0xA), then the state check (+1). Decode passes
priority 40.
The float exports decode 16-bit PCM into capacity / 4 * 2 bytes of the
caller's buffer and widen each sample in place, dividing positive
samples by 32767 and the rest by 32768. They return the float byte count.
The OpusDec *AndTimeout exports take a timeout for the AJM batch wait and
a pointer that receives the batch ID only when that wait fails. The host
decode is synchronous, so neither is used; the debt entry records this.
Read from libSceOpusDec.sprx and libSceOpusCeltDec.sprx, firmware 12.00,
not measured on a console.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01SNqSvnFwRBz3D76n476yw6
Accept every creation rate listed by the public decoder research in
libSceOpusDec and libSceOpusCeltDec, resampling FFmpeg's 48 kHz output.
Co-Authored-By: Claude Opus 5.5 <[email protected]>