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."); } } }