Files
AnyPS5/core/libs/tests/GuestCamera.cpp
T
Savvanis SpyrosandClaude Opus 5.5 b236ea557b feat(libSceCamera): report that no camera is attached
Add libSceCamera with sceCameraIsAttached, which reports camera 0 as not
attached and rejects other indexes, and declare the ten camera functions
PS4 titles import without an implementation.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 01:05:09 +03:00

62 lines
2.3 KiB
C++

#include "prx/libc/include/general/VabiMacros.hpp"
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <stdexcept>
#include <string>
extern "C" {
int APS5_VABI sceCameraIsAttached(std::int32_t index);
int APS5_VABI sceCameraOpen(void);
int APS5_VABI sceCameraClose(void);
int APS5_VABI sceCameraStart(void);
int APS5_VABI sceCameraStop(void);
int APS5_VABI sceCameraGetConfig(void);
int APS5_VABI sceCameraSetConfig(void);
int APS5_VABI sceCameraSetAttribute(void);
int APS5_VABI sceCameraGetDeviceInfo(void);
int APS5_VABI sceCameraGetFrameData(void);
int APS5_VABI sceCameraIsValidFrameData(void);
}
namespace {
constexpr int ErrorParam = static_cast<int>(0x802E0000u);
void Require(bool condition, const char* message) {
if (!condition) {
std::fprintf(stderr, "Camera: %s\n", message);
std::abort();
}
}
template <typename TCall>
void RequireNotImplemented(TCall call, const std::string& name) {
try {
call();
} catch (const std::runtime_error& error) {
Require(std::string(error.what()) == name + " not implemented", "a declared camera function threw another error");
return;
}
Require(false, "a declared camera function returned");
}
}
int main() {
Require(sceCameraIsAttached(0) == 0, "camera 0 must be reported as not attached");
Require(sceCameraIsAttached(1) == ErrorParam, "camera index 1 must be rejected");
Require(sceCameraIsAttached(-1) == ErrorParam, "a negative camera index must be rejected");
RequireNotImplemented([] { sceCameraOpen(); }, "sceCameraOpen");
RequireNotImplemented([] { sceCameraClose(); }, "sceCameraClose");
RequireNotImplemented([] { sceCameraStart(); }, "sceCameraStart");
RequireNotImplemented([] { sceCameraStop(); }, "sceCameraStop");
RequireNotImplemented([] { sceCameraGetConfig(); }, "sceCameraGetConfig");
RequireNotImplemented([] { sceCameraSetConfig(); }, "sceCameraSetConfig");
RequireNotImplemented([] { sceCameraSetAttribute(); }, "sceCameraSetAttribute");
RequireNotImplemented([] { sceCameraGetDeviceInfo(); }, "sceCameraGetDeviceInfo");
RequireNotImplemented([] { sceCameraGetFrameData(); }, "sceCameraGetFrameData");
RequireNotImplemented([] { sceCameraIsValidFrameData(); }, "sceCameraIsValidFrameData");
return 0;
}