Beispiel #1
0
        public void Seek(TimeSpan when)
        {
            lock ( LoadPacketBuffer ) {
                while (LoadPacketBuffer.Count > 0)
                {
                    var apr = LoadPacketBuffer.Dequeue();
                    Keyframes += apr.Count(ap => ap.IsKeyframe);
                    Packets.AddRange(apr);
                }
            }
            if (Packets.Count <= 0)
            {
                return;
            }

            DumpChunksAround(when);
            var i = BinarySearchIndexBefore(Packets, ap => ap.SinceStart >= when);

            if (i == -1)
            {
                i = 0;
            }
            Debug.Assert(Packets[i].DecodedCache != null);
            CurrentFrame.SinceStart = Packets[i].SinceStart;
            CurrentFrame.Data       = Packets[i].DecodedCache;
        }
Beispiel #2
0
        public void Dispose()
        {
            // n.b. Resize uses this -- we may need to refactor if we need to do something permanent

            LoadCancel = true;
            LoadThread.Join();
            foreach (var ap in Packets)
            {
                using (ap.RestartPosition) {}
            }
            Packets.Clear();

            Debug.Assert(!LoadThread.IsAlive);    // We assert this...
            LoadPacketBuffer.Clear();             // ... because we're not locking this.
        }