public unsafe void tick() { if (myHandle == 0) { return; } if (TimeSource.now() > myVideoSignalTime + 2.0) { Warn.print("No video frames arriving"); //stopStream(); } CameraVideoStreamFrameHeader_t frameHeader = new CameraVideoStreamFrameHeader_t(); EVRTrackedCameraError error = OpenVR.TrackedCamera.GetVideoStreamFrameBuffer(myHandle, myFrameType, IntPtr.Zero, 0, ref frameHeader, (uint)Marshal.SizeOf(frameHeader)); if (error != EVRTrackedCameraError.None) { Warn.print("Failed to get frame header"); return; } if (frameHeader.nFrameSequence == myLastFrameSequence) { //frame hasn't changed yet return; } myVideoSignalTime = TimeSource.now(); // Frame has changed, do the more expensive frame buffer copy fixed(byte *ptr = myFrameBuffer) { error = OpenVR.TrackedCamera.GetVideoStreamFrameBuffer(myHandle, myFrameType, (IntPtr)ptr, myFrameBufferSize, ref frameHeader, (uint)Marshal.SizeOf(frameHeader)); if (error != EVRTrackedCameraError.None) { Warn.print("Failed to get frame buffer"); return; } } if (frameHeader.standingTrackedDevicePose.bPoseIsValid == true) { Matrix4 standingView = VR.convertToMatrix4(frameHeader.standingTrackedDevicePose.mDeviceToAbsoluteTracking); Matrix4 seated2Standing = VR.convertToMatrix4(VR.vrSystem.GetSeatedZeroPoseToStandingAbsoluteTrackingPose()); myView = standingView * seated2Standing.Inverted(); } invertBuffer(); //invert buffer from first pixel being top left to bottom left myTexture.paste(myFrameFlipBuffer, Vector2.Zero, new Vector2(myFrameWidth, myFrameHeight), PixelFormat.Rgba); }
public bool startStream() { myVideoSignalTime = TimeSource.now(); OpenVR.TrackedCamera.AcquireVideoStreamingService(OpenVR.k_unTrackedDeviceIndex_Hmd, ref myHandle); if (myHandle == 0) { Warn.print("AcquireVideoStreamingService() failed"); return(false); } HmdMatrix44_t proj = new HmdMatrix44_t(); EVRTrackedCameraError error = OpenVR.TrackedCamera.GetCameraProjection(OpenVR.k_unTrackedDeviceIndex_Hmd, myFrameType, 0.01f, 10.0f, ref proj); if (error != EVRTrackedCameraError.None) { Warn.print("Error getting camera projection"); } myProjection = VR.convertToMatrix4(proj); Info.print("Started VR Camera stream"); myIsStreaming = true; return(true); }