private void FillBuffer() { // load the indices from the database indexCount = 0; currentIndex = 0; bool continuousData; bool streamOutOfData = DatabaseUtility.LoadIndices(indices, endingTick + 1, streamID, frame.Buffer.Length, out indexCount, out minOffset, out maxOffset, out continuousData); //Debug.WriteLine("FillBuffer for StreamID=" + streamID.ToString() + "; starting tick=" + (endingTick + 1).ToString()); // load the associated buffer from the database if we're not empty.... if (indexCount > 0) { /// Note on data quirks: Sometimes the raw data from the archive service is out of order. /// I think this is a bug in Archive Service. The indices are in order by timestamp, but the start/end fields may not /// align one after another. In this case there are also corresponding discontinuities in the raw data. /// To work around this we have LoadIndices keep track of the minimum start and the maximum end in the /// indices we've just fetched. They are not necessarily the first and last items in the array. /// We also add a check to make sure we don't try to fetch more data than the frame buffer can /// hold. if (!continuousData) { DateTime dt = new DateTime(this.endingTick + 1); Console.WriteLine("DBStreamPlayer.FillBuffer: A data discontinuity was found for streamID=" + streamID.ToString() + ";near time=" + dt.ToString()); } this.startingTick = indices[0].timestamp; this.endingTick = indices[indexCount - 1].timestamp; DatabaseUtility.LoadBuffer(streamID, minOffset, maxOffset, ref frame); } else { streamEndReached = true; } }