mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 08:33:12 -05:00
fix(videorecording): restore parameter layouts and handle widths
This commit is contained in:
1 parent
b688c4044b
commit
340429d151
2 files changed
+51
-17
No files matched your search
@@ -9,6 +9,43 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
struct VideoRecordingContext;
|
||||
|
||||
struct VideoRecordingSupportInfo {
|
||||
std::uint8_t data[18];
|
||||
};
|
||||
|
||||
static_assert(sizeof(VideoRecordingSupportInfo) == 18);
|
||||
|
||||
struct VideoRecordingParam {
|
||||
std::uint64_t size;
|
||||
std::int32_t threadPriority;
|
||||
std::uint32_t duration;
|
||||
std::uint32_t mode;
|
||||
std::int32_t outputMode;
|
||||
std::uint32_t option;
|
||||
std::uint32_t format;
|
||||
};
|
||||
|
||||
struct VideoRecordingParam2 {
|
||||
std::uint64_t size;
|
||||
std::uint64_t affinityMask;
|
||||
std::int32_t threadPriority;
|
||||
std::uint32_t duration;
|
||||
std::uint32_t mode;
|
||||
std::int32_t outputMode;
|
||||
std::uint32_t option;
|
||||
std::uint32_t format;
|
||||
};
|
||||
|
||||
static_assert(sizeof(VideoRecordingParam) == 32);
|
||||
static_assert(offsetof(VideoRecordingParam, duration) == 12);
|
||||
static_assert(offsetof(VideoRecordingParam, format) == 28);
|
||||
static_assert(sizeof(VideoRecordingParam2) == 40);
|
||||
static_assert(offsetof(VideoRecordingParam2, threadPriority) == 16);
|
||||
static_assert(offsetof(VideoRecordingParam2, duration) == 20);
|
||||
static_assert(offsetof(VideoRecordingParam2, format) == 36);
|
||||
|
||||
namespace {
|
||||
std::mutex g_infoMutex;
|
||||
std::map<int32_t, std::vector<unsigned char>> g_info;
|
||||
@@ -28,7 +65,7 @@ int APS5_VABI sceVideoRecordingClose(int discard) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceVideoRecordingCloseByHandle(int handle, int discard) {
|
||||
int APS5_VABI sceVideoRecordingCloseByHandle(VideoRecordingContext* handle, int discard) {
|
||||
(void)handle;
|
||||
(void)discard;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
@@ -54,7 +91,7 @@ int APS5_VABI sceVideoRecordingGetInfo(int32_t info, void* data, size_t size) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceVideoRecordingGetInfoByHandle(int handle, int32_t info, void* data, size_t size) {
|
||||
int APS5_VABI sceVideoRecordingGetInfoByHandle(VideoRecordingContext* handle, int32_t info, void* data, size_t size) {
|
||||
(void)handle;
|
||||
(void)info;
|
||||
(void)data;
|
||||
@@ -67,7 +104,7 @@ int APS5_VABI sceVideoRecordingGetStatus(void) {
|
||||
return SceVideoRecordingStatusNone;
|
||||
}
|
||||
|
||||
int APS5_VABI sceVideoRecordingGetSupportInfo(void* info) {
|
||||
int APS5_VABI sceVideoRecordingGetSupportInfo(VideoRecordingSupportInfo* info) {
|
||||
(void)info;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
@@ -89,7 +126,7 @@ int APS5_VABI sceVideoRecordingInitialize(void* param) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceVideoRecordingOpen(const char* path, const void* param, void* heap, int heapSize) {
|
||||
int APS5_VABI sceVideoRecordingOpen(const char* path, const VideoRecordingParam* param, void* heap, int heapSize) {
|
||||
(void)path;
|
||||
(void)param;
|
||||
(void)heap;
|
||||
@@ -98,7 +135,7 @@ int APS5_VABI sceVideoRecordingOpen(const char* path, const void* param, void* h
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceVideoRecordingOpen2(const char* path, const void* param, void* heap, int heapSize) {
|
||||
int APS5_VABI sceVideoRecordingOpen2(const char* path, const VideoRecordingParam2* param, void* heap, int heapSize) {
|
||||
(void)path;
|
||||
(void)param;
|
||||
(void)heap;
|
||||
@@ -107,19 +144,19 @@ int APS5_VABI sceVideoRecordingOpen2(const char* path, const void* param, void*
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceVideoRecordingQueryHddSize2(const void* param) {
|
||||
std::int64_t APS5_VABI sceVideoRecordingQueryHddSize2(const VideoRecordingParam2* param) {
|
||||
(void)param;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceVideoRecordingQueryMemSize(const void* param) {
|
||||
int APS5_VABI sceVideoRecordingQueryMemSize(const VideoRecordingParam* param) {
|
||||
(void)param;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceVideoRecordingQueryMemSize2(const void* param) {
|
||||
int APS5_VABI sceVideoRecordingQueryMemSize2(const VideoRecordingParam2* param) {
|
||||
(void)param;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
|
||||
@@ -3,17 +3,14 @@
|
||||
### Unknown function info
|
||||
|
||||
- [_sceVideoRecordingQueryParam_nid_postfix](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - declared with `void(void* param)` signature following [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/5dfdb4b0b166e83dc9ae275001afb695f12c7174/src/SharpProspero/Interop/Video/VideoRecording.cs#L67-L69); unimplemented and throws `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingCloseByHandle, sceVideoRecordingGetInfoByHandle](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - inferred handle-based recording control signatures taking an integer recording handle; unimplemented and throw `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingCopyBGRAtoNV12](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - inferred pixel buffer conversion signature `(void* dst, const void* src, uint32_t width, uint32_t height)`; unimplemented and throws `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingGetSupportInfo, sceVideoRecordingGetVideoOutMode](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - query signatures taking an output pointer; exact structure layouts and return values are unverified and throw `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingCloseByHandle, sceVideoRecordingGetInfoByHandle](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) - native handles are context pointers. Recording state and per-handle queries remain unimplemented.
|
||||
- [sceVideoRecordingCopyBGRAtoNV12](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) - the destination, source, 32-bit width and height arguments are confirmed. Pixel conversion remains unimplemented.
|
||||
- [sceVideoRecordingGetSupportInfo, sceVideoRecordingGetVideoOutMode](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) - GetSupportInfo writes an 18-byte payload whose fields remain unresolved. GetVideoOutMode is absent from the supplied recording modules, so its signature remains unverified. Both exports remain unimplemented.
|
||||
- [sceVideoRecordingInit, sceVideoRecordingTerm](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - parameterless initialization and termination stubs; unimplemented and throw `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingInitialize](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - initialization stub taking an optional parameter structure pointer; unverified and throws `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingOpen2](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - extended recording open signature; parameters inferred from `sceVideoRecordingOpen` and [fpPS4](https://github.com/red-prig/fpPS4); unimplemented and throws `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingQueryHddSize2, sceVideoRecordingQueryMemSize2](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - memory and disk size query signatures taking parameter pointer; unverified and throw `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingQueryMemSize](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - signature `int(const SceVideoRecordingParam*)` from [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/5dfdb4b0b166e83dc9ae275001afb695f12c7174/src/SharpProspero/Interop/Video/VideoRecording.cs#L75-L77), which says only that it reports the heap bytes needed for the settings in the parameter; how the size follows from `ringSec` and the format is not documented. [`MaxMemSize` (4096)](https://github.com/SvenGDK/SharpProspero/blob/5dfdb4b0b166e83dc9ae275001afb695f12c7174/src/SharpProspero/Interop/Video/VideoRecording.cs#L64-L65) is the largest heap the recorder needs, an upper bound and not the size for given settings, so returning it would be invented. Throws `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingOpen, sceVideoRecordingStart, sceVideoRecordingStop, sceVideoRecordingClose](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - signatures from [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/5dfdb4b0b166e83dc9ae275001afb695f12c7174/src/SharpProspero/Interop/Video/VideoRecording.cs#L79-L101). The recorder is not modelled, so these throw `NotImplemented_nid_no_patch` instead of pretending to record. SharpProspero documents no error code for an unavailable recorder; [shadPS4](https://github.com/shadps4-emu/shadPS4/blob/15abf68c9b52c4b04d094f2837719fdb871021f3/src/core/libraries/video_recording/video_recording_error.h#L9-L18) lists codes such as `0x80A80008` (UNSUPPORTED), but nothing shows the console returns one here
|
||||
- [sceVideoRecordingRestModeProcessGetStatus, sceVideoRecordingRestModeProcessStart](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - rest mode recording interfaces; unverified and throw `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingSendCommand](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) (libSceVideoRecordingP) - command dispatch signature taking integer command ID and parameter pointer; unverified and throws `NotImplemented_nid_no_patch`
|
||||
- [sceVideoRecordingOpen, sceVideoRecordingOpen2](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) - the 32-byte and 40-byte parameter variants, 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](../../../core/libs/prx/libSceVideoRecordingP/Export.cpp) - 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
|
||||
|
||||
|
||||
Reference in new issue
Block a user