[longomatch] Add support for auto exporting plays in live



commit 16f2b6ebff2aff2b155c3765ebe3553029823c63
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Thu Jun 27 21:47:42 2013 +0200

    Add support for auto exporting plays in live

 LongoMatch.Core/Common/EncodingSettings.cs    |    9 +++++
 LongoMatch.Services/Services/Core.cs          |   10 +++---
 LongoMatch.Services/Services/EventsManager.cs |   41 ++++++++++++++++++++++++-
 3 files changed, 54 insertions(+), 6 deletions(-)
---
diff --git a/LongoMatch.Core/Common/EncodingSettings.cs b/LongoMatch.Core/Common/EncodingSettings.cs
index ec151e3..bffa991 100644
--- a/LongoMatch.Core/Common/EncodingSettings.cs
+++ b/LongoMatch.Core/Common/EncodingSettings.cs
@@ -40,6 +40,15 @@ namespace LongoMatch.Common
                public uint Framerate_d;
                public string OutputFile;
                public uint TitleSize;
+               
+               
+               public static EncodingSettings DefaultRenderingSettings (string outputFilepath) {
+                       return new EncodingSettings (Config.RenderVideoStandard,
+                                                    Config.RenderEncodingProfile,
+                                                    Config.RenderEncodingQuality,
+                                                    Config.FPS_N, Config.FPS_D,
+                                                    outputFilepath, 20);
+               }
        }
 }
 
diff --git a/LongoMatch.Services/Services/Core.cs b/LongoMatch.Services/Services/Core.cs
index abef5cf..36a9421 100644
--- a/LongoMatch.Services/Services/Core.cs
+++ b/LongoMatch.Services/Services/Core.cs
@@ -82,16 +82,16 @@ namespace LongoMatch.Services
                        dbManager = new DataBaseManager (Config.DBDir, guiToolkit);
                        dbManager.SetActiveByName (Config.CurrentDatabase);
                        
+                       /* Start the rendering jobs manager */
+                       videoRenderer = new RenderingJobsManager(multimediaToolkit, guiToolkit);
+                       
                        /* Start the events manager */
-                       eManager = new EventsManager(guiToolkit);
-
+                       eManager = new EventsManager(guiToolkit, videoRenderer);
+                       
                        /* Start the hotkeys manager */
                        hkManager = new HotKeysManager(guiToolkit.MainWindow);
                        hkManager.newMarkEvent += eManager.OnNewTag;
 
-                       /* Start the rendering jobs manager */
-                       videoRenderer = new RenderingJobsManager(multimediaToolkit, guiToolkit);
-                       
                        /* Start Game Units manager */
                        guManager = new GameUnitsManager(mainWindow, mainWindow.Player);
                        
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index e5793e7..353a153 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -26,6 +26,7 @@ using LongoMatch.Interfaces;
 using LongoMatch.Interfaces.GUI;
 using LongoMatch.Store;
 using Mono.Unix;
+using System.IO;
 
 namespace LongoMatch.Services
 {
@@ -48,10 +49,12 @@ namespace LongoMatch.Services
                IMainWindow mainWindow;
                IPlayer player;
                ICapturer capturer;
+               IRenderingJobsManager renderer;
 
-               public EventsManager(IGUIToolkit guiToolkit)
+               public EventsManager(IGUIToolkit guiToolkit, IRenderingJobsManager renderer)
                {
                        this.guiToolkit = guiToolkit;
+                       this.renderer = renderer;
                        mainWindow = guiToolkit.MainWindow;
                        player = mainWindow.Player;
                        capturer = mainWindow.Capturer;
@@ -100,6 +103,35 @@ namespace LongoMatch.Services
                        player.DrawFrame += OnDrawFrame;
                }
 
+               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, 1, true));
+                       
+                               job = new EditionJob (playlist, settings, Config.EnableAudio, 
Config.OverlayTitle); 
+                               renderer.AddJob (job);
+                       } catch (Exception ex) {
+                               Log.Exception (ex);
+                       }
+                       
+               }
+               
                private void ProcessNewTag(Category category,Time pos) {
                        Time length, startTime, stopTime, start, stop, fStart, fStop;
 
@@ -157,6 +189,13 @@ namespace LongoMatch.Services
                                player.Play();
                        }
                        Save (openedProject);
+                       
+                       if (projectType == ProjectType.CaptureProject ||
+                           projectType == ProjectType.URICaptureProject) {
+                           if (Config.AutoRenderPlaysInLive) {
+                                       RenderPlay (openedProject, play, openedProject.Description.File);
+                               }
+                       }
                }
 
                protected virtual void OnNewTagAtFrame(Category category, int frame) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]