SDL sends scePadSetVibration rumble as report 0x31 with audio haptics
turned off. Once the rumble stopped, the stream's haptics came back at a
different strength than before it. The stream thread now sends its
configuration report 0x31 again 100 ms after slot 0's rumble stops, which
brought the haptics back to their level before the rumble.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The worker sent a backlog of buffered blocks back to back. It now sends at
most one report 0x32 per 10.67 ms, the length of one 32-frame block at
3 kHz, without a catch-up burst after a pause.
A failed report write cleared the stream-open flag, which sent the vibration
ports to motor rumble. The flag now stays set until the controller
disconnects, so the ports stay silent while the stream is stopped.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The 10.672 ms timer took a block only when it fired, so audio arriving in
blocks smaller than 32 haptic frames (16 from a 256-frame legacy port)
regularly found fewer than 32 frames and the report was skipped; catching
up after falling behind sent two reports back to back and left a ~21 ms
hole. The controller, asked to queue only 16 frames, then ran dry, and
the haptics dropped out about once per second on hardware.
The stream thread now waits on a condition variable until two blocks are
buffered and sends one, so reports follow the audio clock, and report
0x32 asks the controller to queue 64 frames (21 ms) to absorb Bluetooth
jitter and the difference between the title's rate and the controller's
crystal. Closing the stream wakes the waiting thread before the join.
Co-authored-by: seradavid <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A set index outside 0 to 3, a set that is not registered and an option
other than null throw. The new entry says so and what the titles
checked pass for the two arguments.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
#11854 rewrote the HDR output entry next to this PR's line in docs/dev/debt/libSceVideoOut.md. Main's entry is kept; this PR still changes only the mouse capture entry's release clause.
Co-Authored-By: Claude <[email protected]>
Recorder keeps both this branch's LookupStoredBytes and main's UnlandedOwnLabel, with both test groups in --completion-labels-only and the full recorder run.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
main moved the AGC test registrations into tests/cmake; tools/agc_test_split.py resolve moved this branch's lines to their fragments.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
ntamas94 measured sceVideoOutSetFlipRate on a PS4 Pro (firmware
10.71): rate 60 returns VIDEO_OUT_ERROR_INVALID_VALUE, only 0, 1 and
2 are accepted, an unopened handle returns
VIDEO_OUT_ERROR_INVALID_HANDLE, and the range check is in the display
driver the call forwards to. Record it in the entry; the PS5 result
and the effect on queued flips stay unverified.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The 500 ms hold and the rule that keyboard and mouse need a bound controller
in controller mode are AnyPS5 choices; the console's reaction to a removed
pad is not measured.
A label into a port's bufferLabels can be a GPU store in flight, and only
its import is kept with the batch, not the VideoOutConfig that holds the
memory. processFlip releases a request on a closed port without waiting
for the GPU, and Open on the same bus replaces contexts[handle], so a
close and reopen with a flip in flight could free the configuration
before the store ran.
Open now waits for the driver (AgcDriverWaitIdle) before it replaces a
previous configuration. The wait runs without the driver mutex, and Open
checks the port again afterwards, since another Open may have run
meanwhile. video_out_flip_reopen reopens on a second thread with a flip
and a label store gated behind the queue, and checks that Open has not
returned before the gate opens and that the store landed before it did.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
PC5 (PPSA11018) imports the NID and the library did not export it, so the converted executable stopped at load with error 127. The call validates the handle and index like the other cursor calls and returns 0: no cursor image is drawn, so the magnification has no observable effect. The unmeasured behaviour is recorded under Silent stubs.
The entry said a title that stops flipping never gets an answer. A dialog that
was never drawn is now dropped after three seconds with the automatic answer;
the bound is a host choice.
The key, mouse and pad inputs that drive the message dialog are a host choice.
The mouse has no hit test, and Cross confirms whatever the confirm-button
setting of the console.