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();
            }
        }
Exemple #2
0
        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();
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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
                   ));
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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;
        }