Files
AnyPS5/docs/dev/debt/libSceVideoRecordingP.md
T
Dean 984af259bf Merge pull request #11478 from frankea/fix/videorecording-console-checks
fix(libSceVideoRecordingP): answer parameter checks and calls without a recorder as a PS5 does
2026-11-02 23:28:26 +13:00

4.9 KiB

libSceVideoRecordingP technical debt

Unknown function info

  • sceVideoRecordingGetInfo, sceVideoRecordingSetInfo support native validation and errors before a recording context exists. Opening a recorder and initialization remain unimplemented; live recording queries, control and volume changes are unavailable.

  • 13.60 remaining inventory exports - sceVideoRecordingGetCopyrightImageMemory (PAKwtO6i9d8), sceVideoRecordingCloseWithTruncationByHandle (oryBI-2iyxw) have unknown signatures and behavior. Parameterless int declarations are import-resolution placeholders, not verified ABI prototypes; every call throws through NotImplemented_nid_no_patch. These defined name/NID bindings come from the 13.60 export inventory.

  • _sceVideoRecordingQueryParam_nid_postfix: the supplied module reads a 64-bit size and writes a 32-bit mode at offset 12 for sizes at least 16, plus a 32-bit option at offset 28 for sizes at least 64. Mode/option meanings remain unresolved; the protected implementation is unchanged.

  • sceVideoRecordingCloseByHandle, sceVideoRecordingGetInfoByHandle - native handles are context pointers. Recording state and per-handle queries remain unimplemented.

  • sceVideoRecordingCopyBGRAtoNV12 - the destination, source, 32-bit width and height arguments are confirmed. Pixel conversion remains unimplemented.

  • sceVideoRecordingGetSupportInfo, sceVideoRecordingGetVideoOutMode - GetSupportInfo writes an 18-byte payload whose fields remain unresolved. GetVideoOutMode takes a four-byte output confirmed by the native recording assembly and Avcap2 IPC descriptor; the mode values remain unresolved. Both exports remain unimplemented.

  • sceVideoRecordingInitialize: the native initializer consumes no caller arguments; the former optional parameter is not read by the Avcap2 initializer or recording setup. Its unused parameter slot is retained because the protected body references it.

  • sceVideoRecordingOpen2 - the 40-byte parameter variant, four argument registers and 32-bit heap size are recovered. Mode, output mode, option and format semantics remain incomplete. QueryHddSize2 returns a signed 64-bit size or error; recording and sizing exports remain unimplemented.

  • Handle and support queries - native recording handles are context pointers, and GetSupportInfo writes 18 bytes. Support payload field semantics remain incomplete. RestModeProcessStart, RestModeProcessGetStatus and SendCommand consume no caller arguments in the supplied native module; their existing unused parameter slots remain because the protected bodies reference those parameter names.

Functional

  • sceVideoRecordingGetStatus, sceVideoRecordingStart, sceVideoRecordingStop, sceVideoRecordingClose (libSceVideoRecordingP) answer as a PS5 does with no recorder open: GetStatus 0, None ("The recorder is not open") in SharpProspero's VideoRecordingStatus, also listed in shadPS4, and 0x80A80006 from the other three, measured on firmware 13.40 inside PPSA01317 without sceVideoRecordingInit. It is true here because sceVideoRecordingOpen never opens one. Unverified: when GetStatus reports Running (1) or Paused (2)

  • sceVideoRecordingOpen, sceVideoRecordingQueryMemSize (libSceVideoRecordingP) never open a recorder: both throw for a block with a video format, and Open throws for any block it accepts, because neither the heap size nor the recording session is implemented. The checks before that follow a PS5 (firmware 13.40, measured inside PPSA01317): QueryMemSize returns 0x80A80003 for a block shorter than 16 bytes, a duration outside 1 to 3600 seconds, a mode or option above 1 and an unknown format, 0x80A80008 for the option without a format and 0x1000 for neither, and Open refuses null arguments and a negative or too small heap with 0x80A80003. Read and not measured: Open checks the affinity mask, thread priority and output mode after the heap size