From da52ebcdb9f61668ae43104b432c5303d5bc966f Mon Sep 17 00:00:00 2001 From: N00MKRAD Date: Wed, 10 Mar 2021 17:10:25 +0100 Subject: [PATCH] Magick SceneDetect caching WIP --- Code/Form1.cs | 3 +++ Code/Magick/SceneDetect.cs | 26 ++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Code/Form1.cs b/Code/Form1.cs index 4cac5dd..16894cf 100644 --- a/Code/Form1.cs +++ b/Code/Form1.cs @@ -204,6 +204,9 @@ namespace Flowframes private void browseOutBtn_Click(object sender, EventArgs e) { + Magick.SceneDetect.RunSceneDetection(inputTbox.Text.Trim()); + return; + CommonOpenFileDialog dialog = new CommonOpenFileDialog(); dialog.InitialDirectory = inputTbox.Text.Trim(); dialog.IsFolderPicker = true; diff --git a/Code/Magick/SceneDetect.cs b/Code/Magick/SceneDetect.cs index 41bb841..afca09f 100644 --- a/Code/Magick/SceneDetect.cs +++ b/Code/Magick/SceneDetect.cs @@ -19,8 +19,6 @@ namespace Flowframes.Magick string ext = "png"; FileInfo[] frames = IOUtils.GetFileInfosSorted(path, false, "*." + ext); - Logger.Log("frames count = " + frames.Length); - for (int i = 1; i < frames.Length; i++) { FileInfo frame = frames[i]; @@ -29,10 +27,30 @@ namespace Flowframes.Magick } } + public static Dictionary imageCache = new Dictionary(); + static MagickImage GetImage(string path, bool allowCaching = true) + { + if (!allowCaching) + return new MagickImage(path); + + if (imageCache.Count >= 30) + ClearCache(); + + if (!imageCache.ContainsKey(path)) + imageCache.Add(path, new MagickImage(path)); + + return imageCache[path]; + } + + public static void ClearCache() + { + imageCache.Clear(); + } + static async Task ProcessFrame (FileInfo frame, FileInfo lastFrame, string outFolder) { - MagickImage prevFrame = new MagickImage(lastFrame.FullName); - MagickImage currFrame = new MagickImage(frame.FullName); + MagickImage prevFrame = GetImage(lastFrame.FullName); + MagickImage currFrame = GetImage(frame.FullName); Size originalSize = new Size(currFrame.Width, currFrame.Height); int downscaleHeight = 144;