// Thread safe
        internal void UpdateBuffer(long bufferId)
        {
            lock (mutex)
            {
                bool success = VarjoMixedReality.LockDataStreamBuffer(bufferId);
                if (!success)
                {
                    Debug.LogErrorFormat("Failed to lock data stream buffer {0}", bufferId);
                    return;
                }

                success = VarjoMixedReality.GetBufferMetadata(bufferId, out metadata);
                if (!success)
                {
                    Debug.LogErrorFormat("Failed to get buffer metadata {0}", bufferId);
                    return;
                }

                success = VarjoMixedReality.GetBufferCPUData(bufferId, out cpuData);
                if (!success)
                {
                    Debug.LogErrorFormat("Failed to get buffer CPU data {0}", bufferId);
                    return;
                }

                if (data == null || data.Length != metadata.byteSize)
                {
                    data = new byte[metadata.byteSize];
                }

                CopyCpuData(metadata, cpuData, invertRowOrder);
                VarjoMixedReality.UnlockDataStreamBuffer(bufferId);
                changed = true;
            }
        }
        internal override void NewFrameCallback(VarjoStreamFrame streamData, IntPtr userdata)
        {
            lock (mutex)
            {
                Debug.Assert(streamData.type == StreamType);
                data = streamData.metadata.distortedColorData;

                long leftBufferId = 0;
                if (!VarjoMixedReality.GetDataStreamBufferId(streamData.id, streamData.frameNumber, 0 /* varjo_ChannelIndex_Left */, out leftBufferId))
                {
                    Debug.LogErrorFormat("Failed to get distorted color left buffer id {0}", streamData.frameNumber);
                    return;
                }

                long rightBufferId = 0;
                if (!VarjoMixedReality.GetDataStreamBufferId(streamData.id, streamData.frameNumber, 1 /* varjo_ChannelIndex_Right */, out rightBufferId))
                {
                    Debug.LogErrorFormat("Failed to get distorted color right buffer id {0}", streamData.frameNumber);
                    return;
                }

                leftBuffer.UpdateBuffer(leftBufferId);
                rightBuffer.UpdateBuffer(rightBufferId);
            }
        }
 /// <summary>
 /// Starts the frame stream.
 /// </summary>
 /// <returns>True, if frame stream supported and successfully started.</returns>
 public bool Start()
 {
     if (callback != null)
     {
         return(true);
     }
     callback = new VarjoStreamCallback(NewFrameCallback);
     return(VarjoMixedReality.StartDataStream(StreamType, callback));
 }
Esempio n. 4
0
        internal override void NewFrameCallback(VarjoStreamFrame streamData, IntPtr userdata)
        {
            lock (mutex)
            {
                Debug.Assert(streamData.type == StreamType);
                data = streamData.metadata.environmentCubemapData;

                long bufferId = 0;
                if (!VarjoMixedReality.GetDataStreamBufferId(streamData.id, streamData.frameNumber, 0 /* varjo_ChannelIndex_First */, out bufferId))
                {
                    Debug.LogErrorFormat("Failed to get cubemap buffer id {0}", streamData.frameNumber);
                    return;
                }
                buffer.UpdateBuffer(bufferId);
            }
        }
 /// <summary>
 /// Stops the frame stream.
 /// </summary>
 public void Stop()
 {
     VarjoMixedReality.StopDataStream(StreamType);
     callback = null;
 }
 /// <summary>
 /// Check if device supports the frame stream.
 /// </summary>
 /// <returns>True, if device supports this type of frame stream.</returns>
 public bool IsSupported()
 {
     return(VarjoMixedReality.SupportsDataStream(StreamType));
 }