feat(libs): implement sceGameLiveStreamingGetCurrentStatus2
The status layout is shadPS4's OrbisGameLiveStreamingStatus2 (72 bytes). Live streaming is not supported, so the call reports that no stream is on air, with an invalid user id; a null status throws. Uncharted: Legacy of Thieves Collection (PPSA05684) stopped at sceGameLiveStreamingGetCurrentStatus2.
This commit is contained in:
parent
7331a123e9
commit
c642428e82
|
|
@ -2,6 +2,20 @@
|
|||
#include <cstddef>
|
||||
#include "SceTypes.hpp"
|
||||
#include "prx/libc/include/General.hpp"
|
||||
#include "prx/libSceUserService/UserService.hpp"
|
||||
#include <cstring>
|
||||
|
||||
struct GameLiveStreamingStatus2 {
|
||||
std::int32_t userId;
|
||||
bool isOnAir;
|
||||
std::uint8_t align[3];
|
||||
std::uint32_t spectatorCounts;
|
||||
std::uint32_t textMessageCounts;
|
||||
std::uint32_t commandMessageCounts;
|
||||
std::uint32_t broadcastVideoResolution;
|
||||
std::uint8_t reserved[48];
|
||||
};
|
||||
static_assert(sizeof(GameLiveStreamingStatus2) == 72);
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
|
@ -14,8 +28,10 @@ int APS5_VABI sceGameLiveStreamingTerminate(void) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceGameLiveStreamingGetCurrentStatus2() {
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
int APS5_VABI sceGameLiveStreamingGetCurrentStatus2(GameLiveStreamingStatus2* status) {
|
||||
if (status == nullptr) APS5_INVALID_ARG_EX;
|
||||
std::memset(status, 0, sizeof(*status));
|
||||
status->userId = USER_SERVICE_USER_ID_INVALID;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ Throughout the project, every function at every stage either **does exactly what
|
|||
- [sceUserServiceGetNpAccountId](../../core/libs/prx/libSceUserService/Export.cpp) (libSceUserService) - the account id for a user with no linked PSN account is assumed to be 0 with success; libSceNpManager's `sceNpGetAccountIdA` answers the same question with `SCE_NP_ERROR_SIGNED_OUT`
|
||||
- [sceUserServiceGetUserColor](../../core/libs/prx/libSceUserService/Export.cpp) (libSceUserService) - the default profile colour is assumed to be blue (0)
|
||||
- [libSceVdecsw](../../core/libs/prx/libSceVdecsw/Export.cpp) (libSceVdecsw) - structure layouts follow shadPS4's `vdecsw.h` and were checked against PPSA05684's movie decoder (`movie-decoder-vdecsw.cpp`), which asserts `pictureCount == 1` at offset 0xb of `OutputInfo` and reads `InputResult` offset 0x10 as the number of frames an access unit produced. The compute, decoder memory and decode input structures and the first 0x28 bytes of the 0x50-byte decoder config are those of libSceVideodec2, and decoding goes through it. The 0x78-byte AVC picture info is filled with Videodec2's leading fields and the cropping fields only. OUTPUT_PENDING (0x81510115), INPUT_QUEUE_EMPTY (0x81510116) and DECODE_PENDING (0x81510117) follow from the codes each call's assert accepts. At most four decoded pictures are queued and the last one is held until `sceVdecswFinalizeDecodeSequence`; the console's queue depth is unknown
|
||||
- [sceGameLiveStreamingGetCurrentStatus2](../../core/libs/prx/libSceGameLiveStreaming/Export.cpp) (libSceGameLiveStreaming) - the status layout (user id, on-air flag, spectator, text and command message counts, broadcast resolution, 48 reserved bytes) is taken from shadPS4's `OrbisGameLiveStreamingStatus2`; the call reports that no stream is on air, with an invalid user id
|
||||
- [sceAgcDriverGetEqContextId](../../core/libs/prx/libSceAgcDriver/Eq/src/Query.cpp) (libSceAgcDriver) - returns `ident`: an end-of-pipe interrupt is delivered only to the registration whose id equals the raising queue, so `ident` is that context's id (titles register 0 or 1 for graphics and `0x20 + 8 * pipe + queue` for compute). The console's value is not known; KytyPS5 returns the event's `data`, which it fills with the interrupt's context id, whereas `data` here is the EV_CLEAR trigger count. Other event filters throw
|
||||
- [sceAgcSetSubmitMode](../../core/libs/prx/libSceAgc/Misc/src/Suspend.cpp) (libSceAgc) - mode values unknown; only 0 is accepted
|
||||
- [User data registers](../../core/libs/prx/libSceAgcDriver/Execution/src/Driver/Diagnostics.cpp) (AGC driver) - a `SPI_SHADER_USER_DATA_*` or `COMPUTE_USER_DATA_*` register the title never wrote reads as 0 when a stage's RSRC2 count covers it, as Kyty (zeroed `UserSgprInfo`) and SharpEmu (missing registers read 0) do, and as AMD PAL and Mesa initialize them; the console's value is not confirmed
|
||||
|
|
|
|||
Loading…
Reference in New Issue