Esempio n. 1
0
        public void TestGetElementAtTime()
        {
            Playlist pl     = new Playlist();
            var      event1 = new TimelineEvent();

            event1.Start = new Time(10);
            event1.Stop  = new Time(20);
            var event2 = new TimelineEvent();

            event2.Start = new Time(20);
            event2.Stop  = new Time(40);
            var playlistPlayElement  = new PlaylistPlayElement(event1);
            var playlistPlayElement2 = new PlaylistPlayElement(event2);

            pl.Elements.Add(playlistPlayElement);
            pl.Elements.Add(playlistPlayElement2);

            PlaylistVM vm = new PlaylistVM {
                Model = pl
            };

            var elementTuple = vm.GetElementAtTime(new Time(0));

            Assert.AreEqual(playlistPlayElement, elementTuple.Item1.Model);
            Assert.AreEqual(new Time(0), elementTuple.Item2);

            elementTuple = vm.GetElementAtTime(new Time(10));
            Assert.AreEqual(playlistPlayElement2, elementTuple.Item1.Model);
            Assert.AreEqual(new Time(10), elementTuple.Item2);

            elementTuple = vm.GetElementAtTime(new Time(15));
            Assert.AreEqual(playlistPlayElement2, elementTuple.Item1.Model);
            Assert.AreEqual(new Time(10), elementTuple.Item2);
        }
Esempio n. 2
0
        public void TestSerialization()
        {
            TimelineEvent evt = new TimelineEvent();

            evt.Start         = new Time(1000);
            evt.Stop          = new Time(2000);
            evt.CamerasLayout = 1;
            evt.CamerasConfig.Add(new CameraConfig(0));

            PlaylistPlayElement element = new PlaylistPlayElement(evt);

            Utils.CheckSerialization(element);

            PlaylistPlayElement element2 = Utils.SerializeDeserialize(element);

            Assert.AreEqual(element.Description, element2.Description);
            Assert.AreEqual(element.Duration, element2.Duration);
            Assert.AreEqual(element.Rate, element2.Rate);
            Assert.AreEqual(element.RateString, element2.RateString);
            Assert.AreEqual(element.Title, element2.Title);
            Assert.AreEqual(new List <CameraConfig> {
                new CameraConfig(0)
            }, element2.CamerasConfig);
            Assert.AreEqual(element.CamerasLayout, element2.CamerasLayout);
        }
Esempio n. 3
0
        public void LoadPlaylistEvent(Playlist playlist, IPlaylistElement element)
        {
            Log.Debug(string.Format("Loading playlist element \"{0}\"", element.Description));

            loadedEvent           = null;
            loadedPlaylist        = playlist;
            loadedPlaylistElement = element;

            if (element is PlaylistPlayElement)
            {
                PlaylistPlayElement ple = element as PlaylistPlayElement;
                LoadSegment(ple.FileSet, ple.Play.Start, ple.Play.Stop,
                            ple.Play.Start, ple.Rate, ple.CamerasConfig,
                            ple.CamerasLayout, true);
            }
            else if (element is PlaylistVideo)
            {
                LoadVideo(element as PlaylistVideo);
            }
            else if (element is PlaylistImage)
            {
                LoadStillImage(element as PlaylistImage);
            }
            else if (element is PlaylistDrawing)
            {
                LoadFrameDrawing(element as PlaylistDrawing);
            }
            EmitElementLoaded(element, playlist.HasNext());
        }
Esempio n. 4
0
        public void ProjectStoreAndRetrieve_DrawingsNotDuplicated()
        {
            Project project = Utils.CreateProject(true);
            //Add a Drawing to one Event
            var          ev      = project.Timeline [0];
            FrameDrawing drawing = new FrameDrawing();

            drawing.CameraConfig     = ev.CamerasConfig[0];
            drawing.RegionOfInterest = ev.CamerasConfig [0].RegionOfInterest;
            drawing.Render           = ev.EventTime;
            ev.Drawings.Add(drawing);
            //Add Playlist
            var playlist = new Playlist();

            playlist.Name = "testDrawings";
            var playlistElement = new PlaylistPlayElement(ev);

            playlistElement.Rate = 3;
            playlist.Elements.Add(playlistElement);
            project.Playlists.Add(playlist);

            //Store the project
            storage.Store(project);
            //Retrieve the project
            var projectRetrieved         = storage.Retrieve <Project> (project.ID);
            var playlistElementRetrieved = (PlaylistPlayElement)projectRetrieved.Playlists [0].Elements [0];

            Assert.AreEqual(1, projectRetrieved.Timeline [0].Drawings.Count());
            Assert.AreEqual(1, playlistElementRetrieved.Drawings.Count());
            Assert.AreEqual(ev, playlistElementRetrieved.Play);
            Assert.AreEqual(playlistElement.CamerasConfig, playlistElementRetrieved.CamerasConfig);
            Assert.AreEqual(playlistElement.Rate, playlistElementRetrieved.Rate);
        }
        protected virtual void OnNewRenderingJob(object sender, EventArgs args)
        {
            Playlist playlist;

            TreePath[] paths;

            playlist = new Playlist();
            paths    = treeview.Selection.GetSelectedRows();

            foreach (var path in paths)
            {
                TreeIter            iter;
                PlaylistPlayElement element;

                treeview.Model.GetIter(out iter, path);
                element = new PlaylistPlayElement(treeview.Model.GetValue(iter, 0) as TimelineEvent);
                playlist.Elements.Add(element);
            }

            App.Current.EventsBroker.Publish <RenderPlaylistEvent> (
                new RenderPlaylistEvent {
                Playlist = new PlaylistVM {
                    Model = playlist
                }
            }
                );
        }
Esempio n. 6
0
        public void ViewModelFactoryBaseService_CreatePlaylistElementVM()
        {
            var model = new PlaylistPlayElement(new TimelineEvent());
            var vm    = factoryService.CreateViewModel <PlaylistElementVM, IPlaylistElement> (model);

            Assert.IsTrue(vm is PlaylistPlayElementVM);
        }
Esempio n. 7
0
        public async Task TestDeleteSelectedPlaylistElements()
        {
            SetupWithStorage();
            IPlaylistElement element1 = new PlaylistPlayElement(new TimelineEvent {
                Name = "element1"
            });
            IPlaylistElement element2 = new PlaylistPlayElement(new TimelineEvent {
                Name = "element2"
            });
            IPlaylistElement element3 = new PlaylistPlayElement(new TimelineEvent {
                Name = "element3"
            });
            var newPlaylist = new Playlist();

            newPlaylist.Elements.AddRange(new List <IPlaylistElement> {
                element1, element2, element3
            });
            playlistCollectionVM.Model.Add(newPlaylist);

            playlistCollectionVM.ViewModels [0].Selection.Replace(new List <PlaylistElementVM> {
                playlistCollectionVM.ViewModels [0].ViewModels[0],
                playlistCollectionVM.ViewModels [0].ViewModels[2]
            });
            await App.Current.EventsBroker.Publish(new DeleteEvent <PlaylistVM> ());

            Assert.AreEqual(1, playlistCollectionVM.ViewModels [0].ViewModels.Count);
            Assert.AreEqual(0, playlistCollectionVM.ViewModels [0].Selection.Count);
        }
Esempio n. 8
0
        public void TestIsChanged()
        {
            TimelineEvent evt = new TimelineEvent();

            evt.Start         = new Time(1000);
            evt.Stop          = new Time(2000);
            evt.CamerasLayout = 1;
            evt.CamerasConfig = new RangeObservableCollection <CameraConfig> {
                new CameraConfig(2), new CameraConfig(4)
            };
            PlaylistPlayElement element = new PlaylistPlayElement(evt);

            Assert.IsTrue(element.IsChanged);
            element.IsChanged = false;
            element.Play      = new TimelineEvent();
            Assert.IsTrue(element.IsChanged);
            element.IsChanged = false;
            element.CamerasConfig.Add(new CameraConfig(3));
            Assert.IsTrue(element.IsChanged);
            element.IsChanged     = false;
            element.CamerasConfig = null;
            Assert.IsTrue(element.IsChanged);
            element.IsChanged     = false;
            element.CamerasLayout = "empty";
            Assert.IsTrue(element.IsChanged);
            element.IsChanged = false;
            element.Title     = "desc";
            Assert.IsTrue(element.IsChanged);
            element.IsChanged = false;
            element.Rate      = 2f;
            Assert.IsTrue(element.IsChanged);
            element.IsChanged = false;
        }
Esempio n. 9
0
        public void TestRenderedCamera()
        {
            Project p = Utils.CreateProject();

            try {
                EditionJob job;

                job = PrepareEditon();

                TimelineEvent evt = p.Timeline [0] as TimelineEvent;
                evt.CamerasConfig = new RangeObservableCollection <CameraConfig> {
                    new CameraConfig(0)
                };
                PlaylistPlayElement element = new PlaylistPlayElement(evt);
                job.Playlist.Elements.Add(element);

                manager.Add(job);

                // Check that AddSegment is called with the right video file.
                editorMock.Verify(m => m.AddSegment(p.FileSet [0].FilePath,
                                                    evt.Start.MSeconds, evt.Stop.MSeconds, evt.Rate, evt.Name, true, new Area()), Times.Once());

                /* Test with a camera index bigger than the total cameras */
                manager.CancelAll();
                editorMock.ResetCalls();
                evt = p.Timeline [1] as TimelineEvent;
                evt.CamerasConfig = new RangeObservableCollection <CameraConfig> {
                    new CameraConfig(1)
                };
                element = new PlaylistPlayElement(evt);
                job.Playlist.Elements [0] = element;
                job.State = JobState.Pending;
                manager.Add(job);
                editorMock.Verify(m => m.AddSegment(p.FileSet [1].FilePath,
                                                    evt.Start.MSeconds, evt.Stop.MSeconds, evt.Rate, evt.Name, true, new Area()), Times.Once());

                /* Test with the secondary camera */
                manager.CancelAll();
                editorMock.ResetCalls();
                evt = p.Timeline [1] as TimelineEvent;
                evt.CamerasConfig = new RangeObservableCollection <CameraConfig> {
                    new CameraConfig(2)
                };
                element = new PlaylistPlayElement(evt);
                job.Playlist.Elements [0] = element;
                job.State = JobState.Pending;
                manager.Add(job);
                editorMock.Verify(m => m.AddSegment(p.FileSet [0].FilePath,
                                                    evt.Start.MSeconds, evt.Stop.MSeconds, evt.Rate, evt.Name, true, new Area()), Times.Once());
            } finally {
                Utils.DeleteProject(p);
            }
        }
Esempio n. 10
0
        public void TestClone_CloneIgnore_PlaylistPlayElement()
        {
            var playlistPlayElement = new PlaylistPlayElement(new TimelineEvent());

            playlistPlayElement.Start = new Time(100);
            var playlistPlayElement2 = playlistPlayElement.Clone();

            Assert.AreEqual(playlistPlayElement.Start, playlistPlayElement2.Start);
            playlistPlayElement.Start = new Time(100);
            playlistPlayElement2      = playlistPlayElement.Clone();
            Assert.AreEqual(playlistPlayElement.Start, playlistPlayElement2.Start);
        }
Esempio n. 11
0
        public void TestPlaylistDelete()
        {
            // Arrange
            Playlist            playlist1 = new Playlist();
            PlaylistPlayElement pe        = new PlaylistPlayElement(new TimelineEvent());

            playlist1.Elements.Add(pe);

            // Action
            storage.Delete(playlist1);

            // Assert
            Assert.AreEqual(1, db.DocumentCount);
        }
Esempio n. 12
0
        public void TestProperties()
        {
            var timelineEvent = new TimelineEvent {
                Name  = "Tes1",
                Start = new Time(0),
                Stop  = new Time(10),
            };
            var model     = new PlaylistPlayElement(timelineEvent);
            var viewModel = new PlaylistElementVM {
                Model = model,
            };

            Assert.AreEqual(model.Description, viewModel.Description);
            Assert.AreEqual(new Time(10), viewModel.Duration);
        }
Esempio n. 13
0
 public static void Render(object item, int count, bool isExpanded, IDrawingToolkit tk,
                           IContext context, Area backgroundArea, Area cellArea, CellState state)
 {
     if (item is EventType)
     {
         RenderAnalysisCategory(item as EventType, count, isExpanded, tk,
                                context, backgroundArea, cellArea);
     }
     else if (item is SubstitutionEvent)
     {
         SubstitutionEvent s = item as SubstitutionEvent;
         RenderSubstitution(s.Color, s.EventTime, s.In, s.Out, s.Selected, isExpanded, tk, context,
                            backgroundArea, cellArea, state);
     }
     else if (item is TimelineEvent)
     {
         TimelineEvent p = item as TimelineEvent;
         RenderPlay(p.Color, p.Miniature, p.Players, p.Selected, p.Description, count, isExpanded, tk,
                    context, backgroundArea, cellArea, state);
     }
     else if (item is Player)
     {
         RenderPlayer(item as Player, count, isExpanded, tk, context, backgroundArea, cellArea);
     }
     else if (item is Playlist)
     {
         RenderPlaylist(item as Playlist, count, isExpanded, tk, context, backgroundArea, cellArea);
     }
     else if (item is PlaylistPlayElement)
     {
         PlaylistPlayElement p = item as PlaylistPlayElement;
         RenderPlay(p.Play.EventType.Color, p.Miniature, null, p.Selected, p.Description, count, isExpanded, tk,
                    context, backgroundArea, cellArea, state);
     }
     else if (item is IPlaylistElement)
     {
         IPlaylistElement p = item as IPlaylistElement;
         RenderPlay(Config.Style.PaletteActive, p.Miniature, null, p.Selected, p.Description,
                    count, isExpanded, tk, context, backgroundArea, cellArea, state);
     }
     else
     {
         Log.Error("No renderer for type " + item.GetType());
     }
 }
Esempio n. 14
0
        protected virtual void OnNewRenderingJob(object sender, EventArgs args)
        {
            Playlist playlist = new Playlist();

            TreePath[] paths = playerstreeview.Selection.GetSelectedRows();

            foreach (var path in paths)
            {
                TreeIter            iter;
                PlaylistPlayElement element;

                playerstreeview.Model.GetIter(out iter, path);
                element = new PlaylistPlayElement(playerstreeview.Model.GetValue(iter, 0) as TimelineEvent,
                                                  Project.Description.FileSet);
                playlist.Elements.Add(element);
            }

            Config.EventsBroker.EmitRenderPlaylist(playlist);
        }
Esempio n. 15
0
        public void TestDurationChangedWhenElementChanged()
        {
            Playlist pl = new Playlist();

            pl.IsLoaded = false;
            Assert.AreEqual(new Time(0), pl.Duration);
            Assert.IsFalse(pl.IsLoaded);
            pl.IsLoaded = true;
            var event1 = new TimelineEvent();

            event1.Start = new Time(10);
            event1.Stop  = new Time(20);
            var playlistPlayElement = new PlaylistPlayElement(event1);

            pl.Elements.Add(playlistPlayElement);

            event1.Stop = new Time(30);
            Assert.AreEqual(new Time(20), pl.Duration);
        }
Esempio n. 16
0
        public void TestPropertiesProxy()
        {
            TimelineEvent evt = new TimelineEvent();

            evt.Start         = new Time(1000);
            evt.Stop          = new Time(2000);
            evt.CamerasLayout = 1;
            evt.CamerasConfig = new RangeObservableCollection <CameraConfig> {
                new CameraConfig(2), new CameraConfig(4)
            };

            PlaylistPlayElement element = new PlaylistPlayElement(evt);

            Assert.AreEqual(evt.Duration, element.Duration);
            Assert.AreEqual(evt.CamerasLayout, element.CamerasLayout);
            Assert.AreEqual(evt.CamerasConfig, element.CamerasConfig);
            Assert.AreEqual(evt.Rate, element.Rate);
            Assert.AreEqual(evt.Name, element.Title);
        }
Esempio n. 17
0
        void ShowPlaylistElementMenu(Playlist playlist, IPlaylistElement element, TreeIter parent)
        {
            Menu     menu;
            MenuItem edit, delete, prepend, append;

            menu = new Menu();

            if (element is PlaylistPlayElement || element == null)
            {
                PlaylistPlayElement pl = element as PlaylistPlayElement;

                edit            = new MenuItem(Catalog.GetString("Edit name"));
                edit.Activated += (sender, e) => {
                    string name = Config.GUIToolkit.QueryMessage(Catalog.GetString("Name:"), null,
                                                                 pl.Title);
                    if (!String.IsNullOrEmpty(name))
                    {
                        pl.Title = name;
                    }
                };
                menu.Append(edit);
            }

            prepend         = new MenuItem(Catalog.GetString("Insert before"));
            prepend.Submenu = CreateExternalsMenu(playlist, element, true, parent);
            menu.Append(prepend);

            append         = new MenuItem(Catalog.GetString("Insert after"));
            append.Submenu = CreateExternalsMenu(playlist, element, false, parent);
            menu.Append(append);

            delete            = new MenuItem(Catalog.GetString("Delete"));
            delete.Activated += (sender, e) => {
                playlist.Remove(element);
                (Model as TreeStore).Remove(ref selectedIter);
                Config.EventsBroker.EmitPlaylistsChanged(this);
            };
            menu.Append(delete);

            menu.ShowAll();
            menu.Popup();
        }
Esempio n. 18
0
        public void TestForwardProperties()
        {
            int count         = 0;
            var timelineEvent = new TimelineEvent {
                Name  = "Tes1",
                Start = new Time(0),
                Stop  = new Time(10),
            };
            var model     = new PlaylistPlayElement(timelineEvent);
            var viewModel = new PlaylistElementVM {
                Model = model,
            };

            viewModel.PropertyChanged += (sender, e) => {
                count++;
            };

            timelineEvent.EventTime = new Time(1);
            Assert.AreEqual(2, count);
        }
Esempio n. 19
0
        public void TestPlaylistRetrieve()
        {
            // Arrange
            Playlist            playlist1 = new Playlist();
            PlaylistPlayElement pe        = new PlaylistPlayElement(new TimelineEvent());

            playlist1.Elements.Add(pe);
            storage.Store(playlist1, true);
            // Action
            Playlist storedPlaylist = storage.Retrieve <Playlist> (playlist1.ID);

            // Assert
            Assert.IsNotNull(storedPlaylist);
            Assert.IsNotNull(storedPlaylist.Elements);
            Assert.IsNotNull(db.GetExistingDocument(playlist1.ID.ToString()));
            Assert.AreEqual(playlist1.ID, storedPlaylist.ID);
            Assert.AreEqual(playlist1.ToString(), storedPlaylist.ToString());
            Assert.AreEqual(pe.ToString(), storedPlaylist.Elements.First().ToString());
            Assert.IsNotNull(storedPlaylist.DocumentID);
        }
Esempio n. 20
0
        public void TestGetCurrentStartTime()
        {
            Playlist pl     = new Playlist();
            var      event1 = new TimelineEvent();

            event1.Start = new Time(10);
            event1.Stop  = new Time(20);
            var event2 = new TimelineEvent();

            event2.Start = new Time(20);
            event2.Stop  = new Time(40);
            var event3 = new TimelineEvent();

            event3.Start = new Time(0);
            event3.Stop  = new Time(40);
            var playlistPlayElement  = new PlaylistPlayElement(event1);
            var playlistPlayElement2 = new PlaylistPlayElement(event2);
            var playlistPlayElement3 = new PlaylistPlayElement(event3);

            pl.Elements.Add(playlistPlayElement);
            pl.Elements.Add(playlistPlayElement2);
            pl.Elements.Add(playlistPlayElement3);

            PlaylistVM vm = new PlaylistVM {
                Model = pl
            };

            var time = vm.GetCurrentStartTime();

            Assert.AreEqual(new Time(0), time);

            vm.Select(1);
            var time2 = vm.GetCurrentStartTime();

            Assert.AreEqual(new Time(10), time2);

            vm.Select(2);
            var time3 = vm.GetCurrentStartTime();

            Assert.AreEqual(new Time(30), time3);
        }
Esempio n. 21
0
        public void TestDuration()
        {
            Playlist pl = new Playlist();

            pl.IsLoaded = false;
            Assert.AreEqual(new Time(0), pl.Duration);
            Assert.IsFalse(pl.IsLoaded);
            pl.IsLoaded = true;
            var event1 = new TimelineEvent();

            event1.Start = new Time(10);
            event1.Stop  = new Time(20);
            var event2 = new TimelineEvent();

            event2.Start = new Time(20);
            event2.Stop  = new Time(40);
            var event3 = new TimelineEvent();

            event3.Start = new Time(0);
            event3.Stop  = new Time(40);
            var playlistPlayElement  = new PlaylistPlayElement(event1);
            var playlistPlayElement2 = new PlaylistPlayElement(event2);
            var playlistPlayElement3 = new PlaylistPlayElement(event3);

            pl.Elements.Add(playlistPlayElement);
            pl.Elements.Add(playlistPlayElement2);

            Assert.AreEqual(new Time(10 + 20), pl.Duration);

            pl.Elements.Add(playlistPlayElement3);

            Assert.AreEqual(new Time(10 + 20 + 40), pl.Duration);

            pl.Elements = new RangeObservableCollection <IPlaylistElement> ();
            Assert.AreEqual(new Time(0), pl.Duration);
        }
Esempio n. 22
0
        void RenderPlay(Project project, TimelineEvent play)
        {
            Playlist         playlist;
            EncodingSettings settings;
            EditionJob       job;
            string           outputDir, outputProjectDir, outputFile;

            if (App.Current.Config.AutoRenderDir == null ||
                !Directory.Exists(App.Current.Config.AutoRenderDir))
            {
                outputDir = App.Current.VideosDir;
            }
            else
            {
                outputDir = App.Current.Config.AutoRenderDir;
            }

            outputProjectDir = Path.Combine(outputDir,
                                            Utils.SanitizePath(project.ShortDescription));
            outputFile = String.Format("{0}-{1}.mp4", play.EventType.Name, play.Name);
            outputFile = Utils.SanitizePath(outputFile, ' ');
            outputFile = Path.Combine(outputProjectDir, outputFile);
            try {
                PlaylistPlayElement element;

                Directory.CreateDirectory(outputProjectDir);
                settings = EncodingSettings.DefaultRenderingSettings(outputFile);
                playlist = new Playlist();
                element  = new PlaylistPlayElement(play);
                playlist.Elements.Add(element);
                job = new EditionJob(playlist, settings);
                App.Current.JobsManager.Add(job);
            } catch (Exception ex) {
                Log.Exception(ex);
            }
        }
        protected virtual void OnNewRenderingJob(object sender, EventArgs args)
        {
            Playlist playlist = new Playlist ();
            TreePath[] paths = playerstreeview.Selection.GetSelectedRows ();

            foreach (var path in paths) {
                TreeIter iter;
                PlaylistPlayElement element;

                playerstreeview.Model.GetIter (out iter, path);
                element = new PlaylistPlayElement (playerstreeview.Model.GetValue (iter, 0) as TimelineEventLongoMatch);
                playlist.Elements.Add (element);
            }

            App.Current.EventsBroker.Publish<RenderPlaylistEvent> (
                new RenderPlaylistEvent {
                    Playlist = playlist
                }
            );
        }
Esempio n. 24
0
        public static void Render(object item, LMProject project, int count, bool isExpanded, IDrawingToolkit tk,
                                  IContext context, Area backgroundArea, Area cellArea, CellState state)
        {
            // HACK: to be remove when all treeviews are migrated to user VM's
            if (item is TimelineEventVM)
            {
                item = ((TimelineEventVM)item).Model;
            }
            else if (item is EventTypeTimelineVM)
            {
                item = ((EventTypeTimelineVM)item).Model;
            }
            else if (item is PlaylistElementVM)
            {
                item = ((PlaylistElementVM)item).Model;
            }
            else if (item is PlaylistVM)
            {
                item = ((PlaylistVM)item).Model;
            }
            else if (item is PlayerVM)
            {
                item = ((PlayerVM)item).Model;
            }
            else if (item is PlayerTimelineVM)
            {
                item = ((PlayerTimelineVM)item).Model;
            }

            if (item is EventType)
            {
                RenderAnalysisCategory(item as EventType, count, isExpanded, tk,
                                       context, backgroundArea, cellArea);
            }
            else if (item is SubstitutionEvent)
            {
                SubstitutionEvent s = item as SubstitutionEvent;
                RenderSubstitution(s.Color, s.EventTime, s.In, s.Out, s.Playing, isExpanded, tk, context,
                                   backgroundArea, cellArea, state);
            }
            else if (item is TimelineEvent)
            {
                LMTimelineEvent p = item as LMTimelineEvent;
                // always add local first.
                RenderPlay(p.Color, p.Miniature, p.Players, p.Teams, p.Playing, p.Description, count, isExpanded, tk,
                           context, backgroundArea, cellArea, state);
            }
            else if (item is Player)
            {
                RenderPlayer(item as LMPlayer, count, isExpanded, tk, context, backgroundArea, cellArea);
            }
            else if (item is Playlist)
            {
                RenderPlaylist(item as Playlist, count, isExpanded, tk, context, backgroundArea, cellArea);
            }
            else if (item is PlaylistPlayElement)
            {
                PlaylistPlayElement p = item as PlaylistPlayElement;
                RenderPlay(p.Play.EventType.Color, p.Miniature, null, null, p.Playing, p.Description, count, isExpanded, tk,
                           context, backgroundArea, cellArea, state);
            }
            else if (item is IPlaylistElement)
            {
                IPlaylistElement p = item as IPlaylistElement;
                RenderPlay(App.Current.Style.PaletteActive, p.Miniature, null, null, p.Playing, p.Description,
                           count, isExpanded, tk, context, backgroundArea, cellArea, state);
            }
            else
            {
                Log.Error("No renderer for type " + item.GetType());
            }
        }
Esempio n. 25
0
        public void TestMultiplayerCamerasConfig()
        {
            TimelineEvent       evt1;
            List <CameraConfig> cams1, cams2;
            Mock <IMultiPlayer> multiplayerMock = new Mock <IMultiPlayer> ();

            mtkMock.Setup(m => m.GetMultiPlayer()).Returns(multiplayerMock.Object);
            player = new PlayerController(true);
            PreparePlayer();

            /* Only called internally in the openning */
            cams1 = new List <CameraConfig> {
                new CameraConfig(0), new CameraConfig(1)
            };
            cams2 = new List <CameraConfig> {
                new CameraConfig(1), new CameraConfig(0)
            };
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Never());
            Assert.AreEqual(cams1, player.CamerasConfig);

            player.CamerasConfig = cams2;
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Once());
            Assert.AreEqual(cams2, player.CamerasConfig);
            multiplayerMock.ResetCalls();

            /* Now load an event */
            evt1 = new TimelineEvent {
                Start         = new Time(100), Stop = new Time(200),
                CamerasConfig = new List <CameraConfig> {
                    new CameraConfig(1), new CameraConfig(1)
                }
            };
            player.LoadEvent(mfs, evt1, evt1.Start, true);
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Once());
            Assert.AreEqual(evt1.CamerasConfig, player.CamerasConfig);
            multiplayerMock.ResetCalls();

            /* Change event cams config */
            player.CamerasConfig = new List <CameraConfig> {
                new CameraConfig(0), new CameraConfig(0)
            };
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Once());
            Assert.AreEqual(new List <CameraConfig> {
                new CameraConfig(0), new CameraConfig(0)
            }, evt1.CamerasConfig);
            Assert.AreEqual(player.CamerasConfig, evt1.CamerasConfig);
            multiplayerMock.ResetCalls();

            /* Unload and check the original cams config is set back*/
            player.UnloadCurrentEvent();
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Once());
            Assert.AreEqual(cams2, player.CamerasConfig);
            Assert.AreEqual(new List <CameraConfig> {
                new CameraConfig(0), new CameraConfig(0)
            }, evt1.CamerasConfig);
            multiplayerMock.ResetCalls();

            /* And changing the config does not affects the unloaded event */
            player.CamerasConfig = cams1;
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Once());
            Assert.AreEqual(new List <CameraConfig> {
                new CameraConfig(0), new CameraConfig(0)
            }, evt1.CamerasConfig);
            multiplayerMock.ResetCalls();

            /* Now load a playlist video */
            PlaylistVideo plv = new PlaylistVideo(mfs [0]);

            player.LoadPlaylistEvent(playlist, plv);
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Never());
            Assert.AreEqual(new List <CameraConfig> {
                new CameraConfig(0)
            }, player.CamerasConfig);
            multiplayerMock.ResetCalls();
            player.UnloadCurrentEvent();
            /* Called by Open internally () */
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Never());
            Assert.AreEqual(cams2, player.CamerasConfig);
            multiplayerMock.ResetCalls();

            /* Now load a playlist event and make sure its config is loaded
             * and not the event's one */
            PlaylistPlayElement ple = new PlaylistPlayElement(evt, mfs);

            ple.CamerasConfig = cams2;
            player.LoadPlaylistEvent(playlist, ple);
            multiplayerMock.Verify(p => p.ApplyCamerasConfig(), Times.Once());
            Assert.AreEqual(cams2, player.CamerasConfig);
            multiplayerMock.ResetCalls();
        }
Esempio n. 26
0
        public static void Render(object item, LMProject project, int count, bool isExpanded, IDrawingToolkit tk,
                                  IContext context, Area backgroundArea, Area cellArea, CellState state)
        {
            //Get the offset to properly calulate if needs tooltip or redraw
            offsetX = backgroundArea.Right - cellArea.Right;
            offsetY = cellArea.Top - backgroundArea.Top;

            bool playing = (item as IPlayable)?.Playing ?? false;

            // HACK: to be remove when all treeviews are migrated to user VM's
            if (item is TimelineEventVM)
            {
                item = ((TimelineEventVM)item).Model;
            }
            else if (item is EventTypeTimelineVM)
            {
                var vm = item as EventTypeTimelineVM;
                RenderAnalysisCategory(vm, count, isExpanded, tk,
                                       context, backgroundArea, cellArea, state);
                return;
            }
            else if (item is PlaylistElementVM)
            {
                item = ((PlaylistElementVM)item).Model;
            }
            else if (item is PlaylistVM)
            {
                item = ((PlaylistVM)item).Model;
            }
            else if (item is PlayerVM)
            {
                item = ((PlayerVM)item).Model;
            }
            else if (item is PlayerTimelineVM)
            {
                item = ((PlayerTimelineVM)item).Model;
            }

            // FIXME: This first if case must be deleted when presentations is migrated to MVVMC
            if (item is EventType)
            {
                RenderAnalysisCategory(item as EventType, count, isExpanded, tk,
                                       context, backgroundArea, cellArea);
            }
            else if (item is SubstitutionEvent)
            {
                SubstitutionEvent s = item as SubstitutionEvent;
                RenderSubstitution(s.Color, s.EventTime, s.In, s.Out, playing, isExpanded, tk, context,
                                   backgroundArea, cellArea, state);
            }
            else if (item is TimelineEvent)
            {
                LMTimelineEvent p = item as LMTimelineEvent;
                // always add local first.
                RenderPlay(p.Color, p.Miniature, p.Players, p.Teams, playing, p.Description, count, isExpanded, tk,
                           context, backgroundArea, cellArea, state);
            }
            else if (item is Player)
            {
                RenderPlayer(item as LMPlayer, count, isExpanded, tk, context, backgroundArea, cellArea);
            }
            else if (item is Playlist)
            {
                RenderPlaylist(item as Playlist, count, isExpanded, tk, context, backgroundArea, cellArea, state);
            }
            else if (item is PlaylistPlayElement)
            {
                PlaylistPlayElement p = item as PlaylistPlayElement;
                RenderPlay(p.Play.EventType.Color, p.Miniature, null, null, playing, p.Description, count, isExpanded, tk,
                           context, backgroundArea, cellArea, state);
            }
            else if (item is IPlaylistElement)
            {
                IPlaylistElement p = item as IPlaylistElement;
                RenderPlay(App.Current.Style.ThemeContrastDisabled, p.Miniature, null, null, playing, p.Description,
                           count, isExpanded, tk, context, backgroundArea, cellArea, state);
            }
            else
            {
                Log.Error("No renderer for type " + item?.GetType());
            }
        }
Esempio n. 27
0
        public void TestOpenPresentationNullPlayer()
        {
            plmanager.Player = null;

            Playlist presentation = new Playlist ();
            IPlaylistElement element = new PlaylistPlayElement (new TimelineEvent ());
            IPlaylistElement element2 = new PlaylistPlayElement (new TimelineEvent ());
            presentation.Elements.Add (element);
            presentation.Elements.Add (element2);

            IPlayerController playercontroller = mockPlayerController.Object;
            mockPlayerController.ResetCalls ();

            App.Current.EventsBroker.Publish<OpenedPresentationChangedEvent> (
                new OpenedPresentationChangedEvent {
                    Presentation = presentation,
                    Player = null
                }
            );

            App.Current.EventsBroker.Publish<LoadPlaylistElementEvent> (
                new LoadPlaylistElementEvent {
                    Playlist = presentation,
                    Element = element,
                    Playing = true
                }
            );
        }
Esempio n. 28
0
        public void TestOpenPresentation()
        {
            Playlist presentation = new Playlist ();
            IPlaylistElement element = new PlaylistPlayElement (new TimelineEvent ());
            IPlaylistElement element2 = new PlaylistPlayElement (new TimelineEvent ());
            presentation.Elements.Add (element);
            presentation.Elements.Add (element2);

            IPlayerController playercontroller = mockPlayerController.Object;
            mockPlayerController.ResetCalls ();

            App.Current.EventsBroker.Publish<OpenedPresentationChangedEvent> (
                new OpenedPresentationChangedEvent {
                    Presentation = presentation,
                    Player = playercontroller
                }
            );

            Assert.AreSame (playercontroller, plmanager.PlayerVM.Player);

            App.Current.EventsBroker.Publish<LoadPlaylistElementEvent> (
                new LoadPlaylistElementEvent {
                    Playlist = presentation,
                    Element = element,
                    Playing = true
                }
            );
            mockPlayerController.Verify (
                player => player.LoadPlaylistEvent (presentation, element, true), Times.Once ());
        }
Esempio n. 29
0
        public void TestRenderedCamera()
        {
            Project p = Utils.CreateProject();

            try {
                TimelineEvent evt = p.Timeline [0];
                evt.CamerasConfig = new List <CameraConfig> {
                    new CameraConfig(0)
                };
                PlaylistPlayElement element = new PlaylistPlayElement(evt, p.Description.FileSet);

                // Playlist with one event
                var playlist = new Playlist();
                playlist.Elements.Add(element);

                // Create a job
                const string     outputFile = "path";
                EncodingSettings settings   = new EncodingSettings(VideoStandards.P720, EncodingProfiles.MP4, EncodingQualities.Medium,
                                                                   25, 1, outputFile, true, true, 20);
                EditionJob job = new EditionJob(playlist, settings);

                // Mock IMultimediaToolkit and video editor
                var mtk = Mock.Of <IMultimediaToolkit> (m => m.GetVideoEditor() == Mock.Of <IVideoEditor> ());
                // and guitoolkit
                var gtk = Mock.Of <IGUIToolkit> (g => g.RenderingStateBar == Mock.Of <IRenderingStateBar> ());
                // and a video editor
                Mock <IVideoEditor> mock = Mock.Get <IVideoEditor> (mtk.GetVideoEditor());
                // And eventbroker
                Config.EventsBroker = Mock.Of <EventsBroker> ();

                // Create a rendering object with mocked interfaces
                RenderingJobsManager renderer = new RenderingJobsManager(mtk, gtk);
                // Start service
                renderer.Start();

                renderer.AddJob(job);

                // Check that AddSegment is called with the right video file.
                mock.Verify(m => m.AddSegment(p.Description.FileSet [0].FilePath,
                                              evt.Start.MSeconds, evt.Stop.MSeconds, evt.Rate, evt.Name, true, new Area()), Times.Once());

                /* Test with a camera index bigger than the total cameras */
                renderer.CancelAllJobs();
                mock.ResetCalls();
                evt = p.Timeline [1];
                evt.CamerasConfig = new List <CameraConfig> {
                    new CameraConfig(1)
                };
                element = new PlaylistPlayElement(evt, p.Description.FileSet);
                playlist.Elements [0] = element;
                job = new EditionJob(playlist, settings);
                renderer.AddJob(job);
                mock.Verify(m => m.AddSegment(p.Description.FileSet [1].FilePath,
                                              evt.Start.MSeconds, evt.Stop.MSeconds, evt.Rate, evt.Name, true, new Area()), Times.Once());

                /* Test with the secondary camera */
                renderer.CancelAllJobs();
                mock.ResetCalls();
                evt = p.Timeline [1];
                evt.CamerasConfig = new List <CameraConfig> {
                    new CameraConfig(2)
                };
                element = new PlaylistPlayElement(evt, p.Description.FileSet);
                playlist.Elements [0] = element;
                job = new EditionJob(playlist, settings);
                renderer.AddJob(job);
                mock.Verify(m => m.AddSegment(p.Description.FileSet [0].FilePath,
                                              evt.Start.MSeconds, evt.Stop.MSeconds, evt.Rate, evt.Name, true, new Area()), Times.Once());
            } finally {
                Utils.DeleteProject(p);
            }
        }
Esempio n. 30
0
 public void TestAddPlaylistElement()
 {
     var playlist = new Playlist { Name = "name" };
     IPlaylistElement element = new PlaylistPlayElement (new TimelineEvent ());
     var elementList = new List<IPlaylistElement> ();
     elementList.Add (element);
     App.Current.EventsBroker.Publish<AddPlaylistElementEvent> (
         new AddPlaylistElementEvent {
             Playlist = playlist,
             PlaylistElements = elementList
         }
     );
     Assert.AreEqual (elementList, playlist.Elements.ToList ());
 }
Esempio n. 31
0
        bool ProcessPlay(PlaylistPlayElement element)
        {
            Time          lastTS;
            TimelineEvent play;
            MediaFile     file;
            IEnumerable <FrameDrawing> drawings;
            int  cameraIndex;
            Area roi;

            play = element.Play;
            Log.Debug(String.Format("Adding segment {0}", element));

            lastTS = play.Start;
            if (element.CamerasConfig.Count == 0)
            {
                cameraIndex = 0;
                roi         = new Area();
            }
            else
            {
                cameraIndex = element.CamerasConfig [0].Index;
                roi         = element.CamerasConfig [0].RegionOfInterest;
            }
            if (cameraIndex >= element.FileSet.Count)
            {
                Log.Error(string.Format("Camera index={0} not matching for current fileset count={1}",
                                        cameraIndex, element.FileSet.Count));
                file = element.FileSet [0];
            }
            else
            {
                file = element.FileSet [cameraIndex];
            }
            drawings = play.Drawings.Where(d => d.CameraConfig.Index == cameraIndex);

            if (file == null || drawings == null)
            {
                return(false);
            }
            if (!file.Exists())
            {
                return(false);
            }
            foreach (FrameDrawing fd in drawings)
            {
                if (fd.Render < play.Start || fd.Render > play.Stop)
                {
                    Log.Warning("Drawing is not in the segments boundaries " +
                                fd.Render.ToMSecondsString());
                    continue;
                }
                string image_path = CreateStillImage(file.FilePath, fd);
                if (image_path == null)
                {
                    continue;
                }
                videoEditor.AddSegment(file.FilePath, lastTS.MSeconds,
                                       fd.Render.MSeconds - lastTS.MSeconds,
                                       element.Rate, play.Name, file.HasAudio, roi);
                // Drawings have already been cropped to ROI by the canvas, we pass an empty area
                videoEditor.AddImageSegment(image_path, 0, fd.Pause.MSeconds, play.Name, new Area());
                lastTS = fd.Render;
            }
            videoEditor.AddSegment(file.FilePath, lastTS.MSeconds,
                                   play.Stop.MSeconds - lastTS.MSeconds,
                                   element.Rate, play.Name, file.HasAudio, roi);
            return(true);
        }