public async void CheckHistoryErrors(SessionCollection sessions) { bool flag = false; foreach (Session s in sessions.sessions) { if (s.history.Contains("--")) { flag = true; break; } else { flag = false; } } if (flag) { var dialog = new MessageDialog("Session contains time errors. Added empty heatmaps to repair it.") { Title = "Warning" }; dialog.Commands.Add(new UICommand { Label = "OK", Id = 0 }); await dialog.ShowAsync(); } }
private async void GenerateStaticHeatmap(object sender, RoutedEventArgs e) { mediaPlayerElement.Source = null; saveCompositionButton.IsEnabled = false; mediaPlayerElement.AreTransportControlsEnabled = false; mediaPlayerElement.Width = 1200; mediaPlayerElement.Height = 600; ShowHeatmapGenerating(); SessionCollection sessionCollection = new SessionCollection(); sessionCollection.sessions = new List <Session>(); var listItems = heatmapSessionsListView.SelectedItems.ToList(); foreach (Session s in listItems) { sessionCollection.sessions.Add(s); } if (_forceFovFlag) { GetForcedFov(); } HeatmapGenerator generator = new HeatmapGenerator(); var result = await generator.GenerateHeatmap ( _scaleFovFlag, _scaleFovInPercentage, _forceFovFlag, _forcedFov, _horizonFlag, sessionCollection, _rect, videoBackgroundPicker.Color, heatmapOpacity.Value / 100, rangeSelector.RangeMin, rangeSelector.RangeMax, _video ); if (_mediaPlayer == null) { _mediaPlayer = new MediaPlayer(); } _mediaPlayer = mediaPlayerElement.MediaPlayer; mediaPlayerElement.Source = MediaSource.CreateFromMediaStreamSource(result); HideHeatmapGenerating(); }
private async Task AddItemsFromFileAsync(StorageFile file) { SessionCollection sc = await SessionCollection.FromFileAsync(file); if (sc == null) { await new MessageDialog("Could not load file " + file.Name).ShowAsync(); return; } foreach (Session s in sc.sessions) { Items.Add(s); } }
private List <Heatmap.Coord> TrimStaticHeatmap(SessionCollection sessions, double startTime, double stopTime, MediaClip video) { List <Heatmap.Coord> inputList = new List <Heatmap.Coord>(); if (video != null) { foreach (Session x in sessions.sessions) { int fps = x.sample_rate; int start = (int)Math.Floor(startTime / 1000 * fps); int stop = (int)Math.Floor(stopTime / 1000 * fps); var deserial = Heatmap.CoordsDeserialize(x.history); for (int i = start; i < stop; i++) { try { inputList.Add(deserial[i]); } catch { inputList.Add(new Heatmap.Coord { fov = 0, pitch = 0, yaw = 0 }); } } } } else { foreach (Session x in sessions.sessions) { var deserial = Heatmap.CoordsDeserialize(x.history); inputList.AddRange(deserial); } } return(inputList); }
private async void heatmapSessionsListView_Drop(object sender, DragEventArgs e) { ShowHeatmapLoading(); if (e.DataView.Contains(StandardDataFormats.StorageItems)) { var items = await e.DataView.GetStorageItemsAsync(); if (items.Count > 0) { foreach (var item in items) { var file = item as StorageFile; if (SessionCollection.IsSupportedFileExtension(file.FileType)) { await AddItemsFromFileAsync(file); } } } } //await Task.Factory.StartNew(() => System.Threading.Thread.Sleep(2000)); HideHeatmapLoading(); }
public async Task <MediaStreamSource> GenerateHeatmap(bool scaleFovFlag, int scaleInPercentage, bool forceFov, int forcedFov, bool horizonFlag, SessionCollection sessions, Rect overlayPosition, Windows.UI.Color colorPickerColor, double heatmapOpacity, double startTime, double stopTime, MediaClip video) { CheckHistoryErrors(sessions); List <Heatmap.Coord> inputList = await Task.Factory.StartNew(() => TrimStaticHeatmap(sessions, startTime, stopTime, video) ); MediaOverlayLayer mediaOverlayLayer = new MediaOverlayLayer(); WriteableBitmap wb = await GenerateHeatmap(inputList, forceFov, forcedFov, scaleFovFlag, scaleInPercentage); CanvasDevice device = CanvasDevice.GetSharedDevice(); SoftwareBitmap swb = SoftwareBitmap.CreateCopyFromBuffer(wb.PixelBuffer, BitmapPixelFormat.Bgra8, wb.PixelWidth, wb.PixelHeight); swb = SoftwareBitmap.Convert(swb, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore); CanvasBitmap canvasBitmap = CanvasBitmap.CreateFromSoftwareBitmap(device, swb); var clip = MediaClip.CreateFromSurface(canvasBitmap, new TimeSpan(0, 0, 0, 0, 1)); MediaOverlay mediaOverlay = new MediaOverlay(clip) { Position = overlayPosition, Opacity = heatmapOpacity }; mediaOverlayLayer.Overlays.Add(mediaOverlay); if (horizonFlag) { CanvasBitmap cb = await CanvasBitmap.LoadAsync(CanvasDevice.GetSharedDevice(), new Uri("ms-appx:///Assets/horizon3840x2160.png")); MediaOverlay horizonOverlay = new MediaOverlay(MediaClip.CreateFromSurface(cb, new TimeSpan(0, 0, 0, 0, 1))) { Position = overlayPosition, Opacity = 1 }; mediaOverlayLayer.Overlays.Add(horizonOverlay); } MediaComposition mediaComposition = new MediaComposition(); mediaComposition.Clips.Add(MediaClip.CreateFromColor(colorPickerColor, new TimeSpan(0, 0, 0, 0, 1))); mediaComposition.OverlayLayers.Add(mediaOverlayLayer); return(mediaComposition.GeneratePreviewMediaStreamSource ( (int)overlayPosition.Width, (int)overlayPosition.Height )); }
private void FillEffectPropertySet(SessionCollection sessions) { ValuePairs.Clear(); var enc = _video.GetVideoEncodingProperties(); var pitch = new List <int>(); var yaw = new List <int>(); var fov = new List <int>(); if (_forceFovFlag) { GetForcedFov(); } List <Heatmap.Coord []> test = new List <Heatmap.Coord[]>(); foreach (Session s in sessions.sessions) { test.Add(InterpolateSession(s, enc.FrameRate.Numerator, enc.FrameRate.Denominator, _video.OriginalDuration)); } long framesCount = enc.FrameRate.Numerator * _video.OriginalDuration.Ticks / TimeSpan.TicksPerSecond / enc.FrameRate.Denominator; //tu dodać try/catch for (int i = 0; i < framesCount; i++) { for (int j = 0; j < sessions.sessions.Count; j++) { try { pitch.Add(test[j][i].pitch); yaw.Add(test[j][i].yaw); fov.Add(test[j][i].fov); } catch (ArgumentOutOfRangeException) { pitch.Add(0); yaw.Add(0); fov.Add(0); } catch (Exception) { ; } //fov.Insert } } float dotsRadius = (float)mediaPlayerElement.ActualWidth / 4096 * 20; ValuePairs.Add("grayscaleVideoFlag", _grayscaleVideoFlag); ValuePairs.Add("backgroundColor", videoBackgroundPicker.Color); ValuePairs.Add("backgroundOpacity", (float)(1 - videoOpacity.Value / 100)); ValuePairs.Add("dotsRadius", dotsRadius); ValuePairs.Add("count", sessions.sessions.Count); ValuePairs.Add("pitch", pitch); ValuePairs.Add("yaw", yaw); ValuePairs.Add("fov", fov); ValuePairs.Add("generateDots", _dotsFlag); ValuePairs.Add("heatmapOpacity", (float)(heatmapOpacity.Value / 100)); ValuePairs.Add("height", enc.Height); ValuePairs.Add("width", enc.Width); }
private async void VideoGenTest2(object sender, RoutedEventArgs e) { var ep = SetVideoPlayer(); saveCompositionButton.IsEnabled = false; _composition = new MediaComposition(); mediaPlayerElement.Source = null; SessionCollection sessionCollection = new SessionCollection(); sessionCollection.sessions = new List <Session>(); var listItems = heatmapSessionsListView.SelectedItems.ToList(); foreach (Session s in listItems) { sessionCollection.sessions.Add(s); } HeatmapGenerator generator = new HeatmapGenerator(); generator.CheckHistoryErrors(sessionCollection); FillEffectPropertySet(sessionCollection); if (_mediaPlayer == null) { _mediaPlayer = new MediaPlayer(); } var video = await MediaClip.CreateFromFileAsync(_videoFile); MediaOverlayLayer videoOverlayLayer = new MediaOverlayLayer(); TrimVideo(ref video); ValuePairs.Add("offset", video.TrimTimeFromStart.Ticks); var enc = video.GetVideoEncodingProperties(); ValuePairs.Add("frameLength", (1 / ((double)enc.FrameRate.Numerator / enc.FrameRate.Denominator)) * 1000); _composition.Clips.Add(video); if (_horizonFlag) { _composition.OverlayLayers.Add(await GenerateHorizonLayer((int)video.TrimmedDuration.TotalSeconds, ep.Video.Height, ep.Video.Width)); } var videoEffectDefinition = new VideoEffectDefinition("VideoEffectComponent.HeatmapAddVideoEffect", ValuePairs); video.VideoEffectDefinitions.Add(videoEffectDefinition); MediaStreamSource res; try { ValuePairs.Remove("height"); ValuePairs.Remove("width"); ValuePairs.Add("height", ep.Video.Height); ValuePairs.Add("width", ep.Video.Width); res = _composition.GenerateMediaStreamSource(ep); var md = MediaSource.CreateFromMediaStreamSource(res); mediaPlayerElement.Source = md; } catch (Exception f) { Debug.WriteLine(f.Message); } _mediaPlayer = mediaPlayerElement.MediaPlayer; mediaPlayerElement.AreTransportControlsEnabled = true; saveCompositionButton.IsEnabled = true; }