コード例 #1
0
        private void LoadEditionJob(EditionJob job)
        {
            videoEditor = multimediaToolkit.GetVideoEditor();
            videoEditor.EncodingSettings = job.EncodingSettings;
            videoEditor.Progress        += OnProgress;

            foreach (PlayListPlay segment in job.Playlist)
            {
                if (!ProcessSegment(segment))
                {
                    continue;
                }
            }

            try {
                videoEditor.Start();
            }
            catch (Exception ex) {
                videoEditor.Cancel();
                job.State = JobState.Error;
                Log.Exception(ex);
                Log.Error("Error rendering job: ", job.Name);
                guiToolkit.ErrorMessage(Catalog.GetString("Error rendering job: ") + ex.Message);
            }
        }
コード例 #2
0
        void RenderPlay(Project project, Play play, MediaFile file)
        {
            PlayList         playlist;
            EncodingSettings settings;
            EditionJob       job;
            string           outputDir, outputFile;

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

            outputFile = String.Format("{0}-{0}.mp4", play.Category.Name, play.Name);
            outputFile = Path.Combine(outputDir, project.Description.Title, outputFile);
            try {
                Directory.CreateDirectory(Path.GetDirectoryName(outputFile));
                settings = EncodingSettings.DefaultRenderingSettings(outputFile);
                playlist = new PlayList();
                playlist.Add(new PlayListPlay(play, file, true));

                job = new EditionJob(playlist, settings);
                renderer.AddJob(job);
            } catch (Exception ex) {
                Log.Exception(ex);
            }
        }
コード例 #3
0
        void LoadEditionJob(EditionJob job)
        {
            videoEditor = App.Current.MultimediaToolkit.GetVideoEditor();
            videoEditor.EncodingSettings = job.EncodingSettings;
            videoEditor.Progress        += OnProgress;
            videoEditor.Error           += OnError;

            foreach (IPlaylistElement segment in job.Playlist.Elements)
            {
                if (segment is PlaylistPlayElement)
                {
                    ProcessPlay(segment as PlaylistPlayElement);
                }
                else if (segment is PlaylistVideo)
                {
                    ProcessVideo(segment as PlaylistVideo);
                }
                else if (segment is PlaylistImage)
                {
                    ProcessImage(segment as PlaylistImage);
                }
                else if (segment is PlaylistDrawing)
                {
                    ProcessDrawing(segment as PlaylistDrawing);
                }
            }
            videoEditor.Start();
        }
コード例 #4
0
        private void LoadEditionJob(EditionJob job)
        {
            videoEditor = multimediaToolkit.GetVideoEditor();
            videoEditor.EncodingSettings = job.EncodingSettings;
            videoEditor.Progress        += OnProgress;
            videoEditor.Error           += OnError;

            foreach (IPlaylistElement segment in job.Playlist.Elements)
            {
                if (segment is PlaylistPlayElement)
                {
                    ProcessPlay(segment as PlaylistPlayElement);
                }
                else if (segment is PlaylistVideo)
                {
                    ProcessVideo(segment as PlaylistVideo);
                }
                else if (segment is PlaylistImage)
                {
                    ProcessImage(segment as PlaylistImage);
                }
                else if (segment is PlaylistDrawing)
                {
                    ProcessDrawing(segment as PlaylistDrawing);
                }
            }

            try {
                videoEditor.Start();
            } catch (Exception ex) {
                videoEditor.Cancel();
                job.State = JobState.Error;
                Log.Exception(ex);
                Log.Error("Error rendering job: ", job.Name);
                guiToolkit.ErrorMessage(Catalog.GetString("Error rendering job: ") + ex.Message);
            }
        }
コード例 #5
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);
            }
        }
コード例 #6
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);
            }
        }