private async void FrameCollection_CollectionProgressed(ExampleMediaFrameCollection sender, ExampleMediaFrameCollectionProgressedEventArgs args) { if (IsCollectionCompleted) { // Discard extraneous frames args.Frame.Dispose(); return; } if (args.Frame.SourceKind == MediaFrameSourceKind.Color) { CollectedColorFrames.Add(args.Frame); } else if (args.Frame.SourceKind == MediaFrameSourceKind.Infrared) { if (args.Frame.IsIlluminated == true) { CollectedIlluminatedInfraredFrames.Add(args.Frame); } else { CollectedNonIlluminatedInfraredFrames.Add(args.Frame); } } else { // Don't know how to handle, discard args.Frame.Dispose(); } if (IsCollectionCompleted) { FrameCollection.CollectionProgressed -= FrameCollection_CollectionProgressed; await WriteToDiskAsync(); await StopOperationAsync(); } }
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(); }