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); }
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); }
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()); }
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 } } ); }
public void ViewModelFactoryBaseService_CreatePlaylistElementVM() { var model = new PlaylistPlayElement(new TimelineEvent()); var vm = factoryService.CreateViewModel <PlaylistElementVM, IPlaylistElement> (model); Assert.IsTrue(vm is PlaylistPlayElementVM); }
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); }
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; }
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); } }
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); }
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); }
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); }
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()); } }
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); }
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); }
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); }
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(); }
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); }
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); }
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); }
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); }
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 } ); }
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()); } }
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(); }
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()); } }
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 } ); }
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 ()); }
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); } }
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 ()); }
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); }