public void TestPropertiesProxy() { TimelineEvent evt = new TimelineEvent (); evt.Start = new Time (1000); evt.Stop = new Time (2000); evt.CamerasLayout = 1; evt.CamerasConfig = new List<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); }
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); }
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, project.Description.FileSet); playlist.Elements.Add (element); } Config.EventsBroker.EmitRenderPlaylist (playlist); }
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 (); }
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; }
void RenderPlay(Project project, TimelineEvent play) { Playlist playlist; EncodingSettings settings; EditionJob job; string outputDir, outputProjectDir, outputFile; if (Config.AutoRenderDir == null || !Directory.Exists (Config.AutoRenderDir)) { outputDir = Config.VideosDir; } else { outputDir = Config.AutoRenderDir; } outputProjectDir = Path.Combine (outputDir, Utils.SanitizePath (project.Description.DateTitle)); 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, project.Description.FileSet); playlist.Elements.Add (element); job = new EditionJob (playlist, settings); renderer.AddJob (job); } catch (Exception ex) { Log.Exception (ex); } }
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); } }