示例#1
0
        private void FrameCollection_CollectionProgressed(ExampleMediaFrameCollection sender, ExampleMediaFrameCollectionProgressedEventArgs args)
        {
            if (args.Frame.SourceKind == MediaFrameSourceKind.Color)
            {
                ColorFrameEpochs.Enqueue(args.Frame.SystemRelativeTime.Value);
                if (ColorFrameEpochs.Count > 10)
                {
                    ColorFrameEpochs.TryDequeue(out _);
                }
            }
            else if (args.Frame.SourceKind == MediaFrameSourceKind.Infrared)
            {
                if (args.Frame.IsIlluminated == true)
                {
                    IlluminatedInfraredFrameEpochs.Enqueue(args.Frame.SystemRelativeTime.Value);
                    if (IlluminatedInfraredFrameEpochs.Count > 10)
                    {
                        IlluminatedInfraredFrameEpochs.TryDequeue(out _);
                    }
                }
                else
                {
                    NonIlluminatedInfraredFrameEpochs.Enqueue(args.Frame.SystemRelativeTime.Value);
                    if (NonIlluminatedInfraredFrameEpochs.Count > 10)
                    {
                        NonIlluminatedInfraredFrameEpochs.TryDequeue(out _);
                    }
                }
            }

            // Must either dispose or take ownership of the frame
            args.Frame.Dispose();
        }
示例#2
0
        private void RawStats(MediaFrameReference frame)
        {
            if (frame == null)
            {
                return;
            }
            if (frame.SystemRelativeTime == null)
            {
                return;
            }

            if (frame.SourceKind == MediaFrameSourceKind.Color)
            {
                ColorFrameEpochs.Enqueue(frame.SystemRelativeTime.Value);
                if (ColorFrameEpochs.Count > 10)
                {
                    ColorFrameEpochs.TryDequeue(out _);
                }
            }
            else if (frame.SourceKind == MediaFrameSourceKind.Infrared &&
                     frame.VideoMediaFrame != null &&
                     frame.VideoMediaFrame.InfraredMediaFrame != null)
            {
                if (frame.VideoMediaFrame.InfraredMediaFrame.IsIlluminated == true)
                {
                    IlluminatedInfraredFrameEpochs.Enqueue(frame.SystemRelativeTime.Value);
                    if (IlluminatedInfraredFrameEpochs.Count > 10)
                    {
                        IlluminatedInfraredFrameEpochs.TryDequeue(out _);
                    }
                }
                else
                {
                    NonIlluminatedInfraredFrameEpochs.Enqueue(frame.SystemRelativeTime.Value);
                    if (NonIlluminatedInfraredFrameEpochs.Count > 10)
                    {
                        NonIlluminatedInfraredFrameEpochs.TryDequeue(out _);
                    }
                }
            }
        }
示例#3
0
        private async Task StopOperationAsync()
        {
            MediaCapture.FaceDetected -= MediaCapture_FaceDetected;
            FrameReader.FrameArrived  -= FrameReader_FrameArrived;

            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                CaptureElement.Source = null;
            });

            await MediaCapture.StopPreviewAsync();

            await FrameReader.StopAsync();

            FrameCollection.Dispose();
            ColorFrameEpochs.Clear();
            IlluminatedInfraredFrameEpochs.Clear();
            NonIlluminatedInfraredFrameEpochs.Clear();

            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, DispatcherTimer.Stop);

            FrameReaderStopTrigger.Stop();
        }