Exemplo n.º 1
0
        public override void HandleDepthData(ushort sr, ushort er, ulong timestamp, ref byte[] data, int dataOffset)
        {
            if (timestamp < _lastSequenceRendered)
            {
                return;
            }

            lock (_frameBufferLock)
                lock (_unusedQueueLock) {
                    if (_frameBuffer.ContainsKey(timestamp))
                    {
                        _frameBuffer[timestamp].LoadDepthData(sr, er, ref data, dataOffset);
                        _frameBuffer[timestamp].MarkAsLoaded(sr, er);
                        //Debug.Log("Using old frame: "+seq);
                    }
                    else if (_unusedQueue.Count > 0)
                    {
                        _frameBuffer[timestamp] = _unusedQueue.Dequeue();
                        _frameBuffer[timestamp].Reset();
                        _frameBuffer[timestamp].LoadDepthData(sr, er, ref data, dataOffset);
                        _frameBuffer[timestamp].MarkAsLoaded(sr, er);
                        //Debug.Log("Dequeued for: "+seq);
                    }
                    else if (_frameBuffer.Count > 0)
                    {
                        ulong          oldest = _frameBuffer.Keys.Min();
                        SequencedFrame old    = _frameBuffer[oldest];
                        _frameBuffer.Remove(oldest);
                        Debug.LogWarning("Dropping frame with seq: " + oldest + ", missing: " +
                                         old.CountMissing() + " of " + TotalHeight);
                        old.Reset();
                        _frameBuffer[timestamp] = old;
                        _frameBuffer[timestamp].LoadDepthData(sr, er, ref data, dataOffset);
                        _frameBuffer[timestamp].MarkAsLoaded(sr, er);
                    }
                    else
                    {
                        Debug.LogWarning("Not enough (unused) framebuffers.");
                    }
                }
        }