ArtofKinect.Common.PointCloudPlayerSource.PlayFrames C# (CSharp) Method

PlayFrames() private method

private PlayFrames ( ) : void
return void
        private void PlayFrames()
        {
            if (Status != PointCloudPlayerStatus.Playing)
            {
                return;
            }

            if (CurrentFrameIndex >= MaxFrameIndex)
            {
                Status = PointCloudPlayerStatus.Stopped;
                Seek(0);
                _soundPlayer.Stop();
                OnPlaybackEnded();
            }

            var timeOffset = DateTime.Now - _playbackStartUTC;

            var targetPlayerTime = MinTimeUTC + timeOffset;

            MotionFrame playFrame = null;

            int lastFrameIndex = CurrentFrameIndex;
            lock (_bufferedFrames)
            {
                while (_bufferedFrames.Count > 0)
                {
                    var frame = _bufferedFrames.OrderBy(f => f.Id).First();

                    if (frame.TimeUTC <= targetPlayerTime)
                    {
                        playFrame = frame;
                        _bufferedFrames.Remove(frame);
                        CurrentFrameIndex++;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            if (CurrentFrameIndex - lastFrameIndex > 1)
            {
                Trace.WriteLine("Skipped a frame from " + lastFrameIndex + " to " + CurrentFrameIndex);
            }

            if (playFrame != null)
            {
                CurrentTimeUTC = playFrame.TimeUTC;

                var offsetMS = (playFrame.TimeUTC - targetPlayerTime).TotalMilliseconds;

                Debug.WriteLine("Playing frame " + CurrentFrameIndex + " id: " + playFrame.Id + " time offset: " + offsetMS.ToString("F4"));

                //_soundPlayer.Stop();
                if (Math.Abs(offsetMS) > 100)
                {
                    var span = CurrentTimeUTC - MinTimeUTC;
                    if (CurrentFrameIndex % 30 == 0)
                        Trace.WriteLine("Reseeking audio to " + span.ToString());
                    _soundPlayer.Seek(span);
                }
                //_soundPlayer.Play();
                OnMotionFrameAvailable(playFrame);
            }
        }