From f2747b31b01edeb1563ba0bd280d64fc01457c24 Mon Sep 17 00:00:00 2001 From: SuuperW Date: Fri, 15 Jan 2021 15:03:46 -0600 Subject: [PATCH] =?UTF-8?q?add=20an=20option=20to=20capture=20the=20Lua=20?= =?UTF-8?q?without=20capturing=20the=20full=20OSD,=20when=E2=80=A6=20(#252?= =?UTF-8?q?7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add an option to capture the Lua without capturing the full OSD, when recording an AVI * revert designer changes from commit 146022c not related to the new CaptureLuaMenuItem * improve code readability --- src/BizHawk.Client.Common/config/Config.cs | 1 + .../DisplayManager/DisplayManager.cs | 17 +++++++++++++++++ src/BizHawk.Client.EmuHawk/MainForm.Designer.cs | 12 ++++++++++++ src/BizHawk.Client.EmuHawk/MainForm.Events.cs | 14 +++++++++++++- src/BizHawk.Client.EmuHawk/MainForm.cs | 11 +++++++++++ 5 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/BizHawk.Client.Common/config/Config.cs b/src/BizHawk.Client.Common/config/Config.cs index 7b9e2d8a9a..3b84bf5d79 100644 --- a/src/BizHawk.Client.Common/config/Config.cs +++ b/src/BizHawk.Client.Common/config/Config.cs @@ -92,6 +92,7 @@ namespace BizHawk.Client.Common public bool SkipLagFrame { get; set; } public bool SuppressAskSave { get; set; } public bool AviCaptureOsd { get; set; } + public bool AviCaptureLua { get; set; } public bool ScreenshotCaptureOsd { get; set; } public bool FirstBoot { get; set; } = true; public bool UpdateAutoCheckEnabled { get; set; } diff --git a/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs index 706993d6ad..8c05d5829a 100644 --- a/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs +++ b/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs @@ -546,6 +546,23 @@ namespace BizHawk.Client.EmuHawk UpdateSourceInternal(job); return job.OffscreenBb; } + /// + /// Does the display process to an offscreen buffer, suitable for a Lua-inclusive movie. + /// + public BitmapBuffer RenderOffscreenLua(IVideoProvider videoProvider) + { + var job = new JobInfo + { + VideoProvider = videoProvider, + Simulate = false, + ChainOutsize = new Size(videoProvider.BufferWidth, videoProvider.BufferHeight), + Offscreen = true, + IncludeOSD = false, + IncludeUserFilters = false, + }; + UpdateSourceInternal(job); + return job.OffscreenBb; + } private class FakeVideoProvider : IVideoProvider { diff --git a/src/BizHawk.Client.EmuHawk/MainForm.Designer.cs b/src/BizHawk.Client.EmuHawk/MainForm.Designer.cs index e1234621fd..eadd5876c1 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.Designer.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.Designer.cs @@ -100,6 +100,7 @@ namespace BizHawk.Client.EmuHawk this.StopAVIMenuItem = new BizHawk.WinForms.Controls.ToolStripMenuItemEx(); this.toolStripSeparator19 = new BizHawk.WinForms.Controls.ToolStripSeparatorEx(); this.CaptureOSDMenuItem = new BizHawk.WinForms.Controls.ToolStripMenuItemEx(); + this.CaptureLuaMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.SynclessRecordingMenuItem = new BizHawk.WinForms.Controls.ToolStripMenuItemEx(); this.ScreenshotSubMenu = new BizHawk.WinForms.Controls.ToolStripMenuItemEx(); this.ScreenshotMenuItem = new BizHawk.WinForms.Controls.ToolStripMenuItemEx(); @@ -829,6 +830,7 @@ namespace BizHawk.Client.EmuHawk this.StopAVIMenuItem, this.toolStripSeparator19, this.CaptureOSDMenuItem, + this.CaptureLuaMenuItem, this.SynclessRecordingMenuItem}); this.AVSubMenu.Text = "&AVI/WAV"; this.AVSubMenu.DropDownOpened += new System.EventHandler(this.AVSubMenu_DropDownOpened); @@ -850,9 +852,18 @@ namespace BizHawk.Client.EmuHawk // // CaptureOSDMenuItem // + this.CaptureOSDMenuItem.CheckOnClick = true; this.CaptureOSDMenuItem.Text = "Capture OSD"; this.CaptureOSDMenuItem.Click += new System.EventHandler(this.CaptureOSDMenuItem_Click); // + // CaptureLuaMenuItem + // + this.CaptureLuaMenuItem.CheckOnClick = true; + this.CaptureLuaMenuItem.Name = "CaptureLuaMenuItem"; + this.CaptureLuaMenuItem.Size = new System.Drawing.Size(225, 22); + this.CaptureLuaMenuItem.Text = "Capture Lua"; + this.CaptureLuaMenuItem.Click += new System.EventHandler(this.CaptureLuaMenuItem_Click); + // // SynclessRecordingMenuItem // this.SynclessRecordingMenuItem.Text = "S&yncless Recording Tools"; @@ -2778,5 +2789,6 @@ namespace BizHawk.Client.EmuHawk private BizHawk.WinForms.Controls.ToolStripMenuItemEx NdsSyncSettingsMenuItem; private BizHawk.WinForms.Controls.ToolStripMenuItemEx NdsSettingsMenuItem; private BizHawk.WinForms.Controls.ToolStripSeparatorEx toolStripSeparator8; + private System.Windows.Forms.ToolStripMenuItem CaptureLuaMenuItem; } } diff --git a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs index 0fe25eda93..5c480d211a 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -215,6 +215,7 @@ namespace BizHawk.Client.EmuHawk ConfigAndRecordAVMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record A/V"].Bindings; StopAVIMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop A/V"].Bindings; CaptureOSDMenuItem.Checked = Config.AviCaptureOsd; + CaptureLuaMenuItem.Checked = Config.AviCaptureLua || Config.AviCaptureOsd; // or with osd is for better compatibility with old config files RecordAVMenuItem.Enabled = !string.IsNullOrEmpty(Config.VideoWriter) && _currAviWriter == null; @@ -538,7 +539,18 @@ namespace BizHawk.Client.EmuHawk private void CaptureOSDMenuItem_Click(object sender, EventArgs e) { - Config.AviCaptureOsd ^= true; + bool c = ((ToolStripMenuItem)sender).Checked; + Config.AviCaptureOsd = c; + if (c) // Logic to capture OSD w/o Lua does not currently exist, so disallow that. + Config.AviCaptureLua = true; + } + + private void CaptureLuaMenuItem_Click(object sender, EventArgs e) + { + bool c = ((ToolStripMenuItem)sender).Checked; + Config.AviCaptureLua = c; + if (!c) // Logic to capture OSD w/o Lua does not currently exist, so disallow that. + Config.AviCaptureOsd = false; } private void ScreenshotMenuItem_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index f592e554c8..092b797b96 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -2510,6 +2510,12 @@ namespace BizHawk.Client.EmuHawk bb.DiscardAlpha(); return bb; } + public BitmapBuffer CaptureLua() + { + var bb = DisplayManager.RenderOffscreenLua(_currentVideoProvider); + bb.DiscardAlpha(); + return bb; + } private void IncreaseWindowSize() { @@ -3422,6 +3428,11 @@ namespace BizHawk.Client.EmuHawk output = new BitmapBufferVideoProvider(CaptureOSD()); disposableOutput = (IDisposable) output; } + else if (Config.AviCaptureLua) + { + output = new BitmapBufferVideoProvider(CaptureLua()); + disposableOutput = (IDisposable) output; + } else { output = _currentVideoProvider;