mirror of
https://github.com/Rulez777/FramePicoTracker.git
synced 2026-10-19 09:01:23 +02:00
45 lines
2.6 KiB
C++
45 lines
2.6 KiB
C++
/* SPDX-License-Identifier: GPL-3.0-or-later
|
|
* Copyright (C) 2026 L8OLOOE and contributors. See CREDITS.md and NOTICE.md.
|
|
*/
|
|
#include "openvr.h"
|
|
#include <cstdio>
|
|
#include <vector>
|
|
#include <thread>
|
|
#include <chrono>
|
|
int main() {
|
|
vr::EVRInitError error=vr::VRInitError_None;
|
|
auto system=vr::VR_Init(&error,vr::VRApplication_Background);
|
|
if(error!=vr::VRInitError_None) { std::printf("{\"init_error\":%d}\n",error); return 1; }
|
|
auto camera=vr::VRTrackedCamera();
|
|
if(!camera) { std::puts("{\"interface_available\":false}"); vr::VR_Shutdown(); return 0; }
|
|
bool has=false; auto e=camera->HasCamera(0,&has);
|
|
vr::ETrackedPropertyError pe=vr::TrackedProp_Success;
|
|
auto count=system->GetInt32TrackedDeviceProperty(0,vr::Prop_NumCameras_Int32,&pe);
|
|
vr::EVRSettingsError settings_error=vr::VRSettingsError_None;
|
|
bool enabled=vr::VRSettings()->GetBool("camera","enableCamera",&settings_error);
|
|
std::printf("{\"camera_count\":%d,\"count_error\":%d,\"enableCamera\":%s,\"setting_error\":%d}\n",count,pe,enabled?"true":"false",settings_error);
|
|
for(const char* key:{"allowTrackingCameraRecording","allowTrackingScreenRecording","allowTrackingAudioRecording"}) {
|
|
bool value=vr::VRSettings()->GetBool("steamvr",key,&settings_error);
|
|
std::printf("{\"setting\":\"%s\",\"value\":%s,\"error\":%d}\n",key,value?"true":"false",settings_error);
|
|
}
|
|
uint32_t width=0,height=0,size=0;
|
|
auto se=camera->GetCameraFrameSize(0,vr::VRTrackedCameraFrameType_Distorted,&width,&height,&size);
|
|
std::printf("{\"has_camera\":%s,\"has_error\":%d,\"size_error\":%d,\"width\":%u,\"height\":%u,\"bytes\":%u}",has?"true":"false",e,se,width,height,size);
|
|
if(has && se==vr::VRTrackedCameraError_None && size>0 && size<64*1024*1024) {
|
|
vr::TrackedCameraHandle_t handle=0;
|
|
auto ae=camera->AcquireVideoStreamingService(0,&handle);
|
|
std::printf("\n{\"acquire_error\":%d}",ae);
|
|
if(ae==vr::VRTrackedCameraError_None) {
|
|
std::vector<unsigned char> buffer(size); vr::CameraVideoStreamFrameHeader_t header{};
|
|
for(int n=0;n<20;n++) {
|
|
auto fe=camera->GetVideoStreamFrameBuffer(handle,vr::VRTrackedCameraFrameType_Distorted,buffer.data(),size,&header,sizeof(header));
|
|
if(fe==vr::VRTrackedCameraError_None) { std::printf("\n{\"frame_received\":true,\"sequence\":%u}",header.nFrameSequence); break; }
|
|
if(n==19) std::printf("\n{\"frame_received\":false,\"frame_error\":%d}",fe);
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
|
}
|
|
camera->ReleaseVideoStreamingService(handle);
|
|
}
|
|
}
|
|
std::puts(""); vr::VR_Shutdown();
|
|
}
|