Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }