diff --git a/src/BizHawk.Client.Common/IQuickBmpFile.cs b/src/BizHawk.Client.Common/IQuickBmpFile.cs deleted file mode 100644 index c85494d0ca..0000000000 --- a/src/BizHawk.Client.Common/IQuickBmpFile.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.IO; - -using BizHawk.Emulation.Common; - -namespace BizHawk.Client.Common -{ - public interface IQuickBmpFile - { - void Copy(IVideoProvider src, IVideoProvider dst); - - bool Load(IVideoProvider v, Stream s); - - bool LoadAuto(Stream s, out IVideoProvider vp); - - void Save(IVideoProvider v, Stream s, int w, int h); - } -} diff --git a/src/BizHawk.Client.EmuHawk/QuickBmpFile.cs b/src/BizHawk.Client.Common/QuickBmpFile.cs similarity index 87% rename from src/BizHawk.Client.EmuHawk/QuickBmpFile.cs rename to src/BizHawk.Client.Common/QuickBmpFile.cs index 261560a58b..4e7d18136d 100644 --- a/src/BizHawk.Client.EmuHawk/QuickBmpFile.cs +++ b/src/BizHawk.Client.Common/QuickBmpFile.cs @@ -2,18 +2,14 @@ using System.IO; using System.Runtime.InteropServices; -using BizHawk.Client.Common; using BizHawk.Common; using BizHawk.Emulation.Common; // ReSharper disable FieldCanBeMadeReadOnly.Local // ReSharper disable InconsistentNaming -// ReSharper disable StyleCop.SA1304 -// ReSharper disable StyleCop.SA1307 -// ReSharper disable StyleCop.SA1401 -namespace BizHawk.Client.EmuHawk +namespace BizHawk.Client.Common { - public readonly struct QuickBmpFile : IQuickBmpFile + public readonly struct QuickBmpFile { [StructLayout(LayoutKind.Sequential, Pack = 1)] private class BITMAPFILEHEADER @@ -332,14 +328,6 @@ namespace BizHawk.Client.EmuHawk s.Write(dst, 0, dst.Length); } - public static readonly QuickBmpFile INSTANCE = default; - - readonly void IQuickBmpFile.Copy(IVideoProvider src, IVideoProvider dst) => Copy(src, dst); - - readonly bool IQuickBmpFile.Load(IVideoProvider v, Stream s) => Load(v, s); - - public readonly bool LoadAuto(Stream s, out IVideoProvider vp) => Load(vp = new LoadedBMP(), s); - - readonly void IQuickBmpFile.Save(IVideoProvider v, Stream s, int w, int h) => Save(v, s, w, h); + public static bool LoadAuto(Stream s, out IVideoProvider vp) => Load(vp = new LoadedBMP(), s); } } diff --git a/src/BizHawk.Client.Common/movie/MovieSession.cs b/src/BizHawk.Client.Common/movie/MovieSession.cs index 0343f39fbf..d430004ff4 100644 --- a/src/BizHawk.Client.Common/movie/MovieSession.cs +++ b/src/BizHawk.Client.Common/movie/MovieSession.cs @@ -17,20 +17,16 @@ namespace BizHawk.Client.Common private IMovie _queuedMovie; - private readonly IQuickBmpFile _quickBmpFile; - public MovieSession( IMovieConfig settings, string backDirectory, IDialogParent dialogParent, - IQuickBmpFile quickBmpFile, Action pauseCallback, Action modeChangedCallback) { Settings = settings; BackupDirectory = backDirectory; _dialogParent = dialogParent; - _quickBmpFile = quickBmpFile; _pauseCallback = pauseCallback ?? throw new ArgumentNullException(paramName: nameof(pauseCallback)); _modeChangedCallback = modeChangedCallback @@ -313,7 +309,7 @@ namespace BizHawk.Client.Common // TODO: change IMovies to take HawkFiles only and not path if (Path.GetExtension(path)?.EndsWith("tasproj") ?? false) { - return new TasMovie(this, path, _quickBmpFile); + return new TasMovie(this, path); } return new Bk2Movie(this, path); diff --git a/src/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs b/src/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs index 4441908e01..31ca8f137e 100644 --- a/src/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs +++ b/src/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs @@ -160,9 +160,8 @@ namespace BizHawk.Client.Common bl.GetLump(BinaryStateLump.Framebuffer, false, br => { - var fb = br.ReadAllBytes(); - SavestateFramebuffer = new int[fb.Length / sizeof(int)]; - Buffer.BlockCopy(fb, 0, SavestateFramebuffer, 0, fb.Length); + QuickBmpFile.LoadAuto(br.BaseStream, out var bmp); + SavestateFramebuffer = bmp.GetVideoBuffer(); }); } else if (StartsFromSaveRam) diff --git a/src/BizHawk.Client.Common/movie/tasproj/TasBranch.cs b/src/BizHawk.Client.Common/movie/tasproj/TasBranch.cs index ddc5d3f6ed..b4ace9f0c5 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/TasBranch.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/TasBranch.cs @@ -58,12 +58,9 @@ namespace BizHawk.Client.Common { private readonly ITasMovie _movie; - private readonly IQuickBmpFile _quickBmpFile; - - public TasBranchCollection(ITasMovie movie, IQuickBmpFile quickBmpFile) + public TasBranchCollection(ITasMovie movie) { _movie = movie; - _quickBmpFile = quickBmpFile; } public int Current { get; set; } = -1; @@ -155,13 +152,13 @@ namespace BizHawk.Client.Common bs.PutLump(nframebuffer, s => { var vp = new BitmapBufferVideoProvider(b.OSDFrameBuffer); - _quickBmpFile.Save(vp, s, b.OSDFrameBuffer.Width, b.OSDFrameBuffer.Height); + QuickBmpFile.Save(vp, s, b.OSDFrameBuffer.Width, b.OSDFrameBuffer.Height); }); bs.PutLump(ncoreframebuffer, s => { var vp = new BitmapBufferVideoProvider(b.CoreFrameBuffer); - _quickBmpFile.Save(vp, s, b.CoreFrameBuffer.Width, b.CoreFrameBuffer.Height); + QuickBmpFile.Save(vp, s, b.CoreFrameBuffer.Width, b.CoreFrameBuffer.Height); }); bs.PutLump(nmarkers, tw => tw.WriteLine(b.Markers.ToString())); @@ -241,13 +238,13 @@ namespace BizHawk.Client.Common bl.GetLump(nframebuffer, abort: true, (s, _) => { - _quickBmpFile.LoadAuto(s, out var vp); + QuickBmpFile.LoadAuto(s, out var vp); b.OSDFrameBuffer = new BitmapBuffer(vp.BufferWidth, vp.BufferHeight, vp.GetVideoBuffer()); }); bl.GetLump(ncoreframebuffer, abort: false, (s, _) => { - _quickBmpFile.LoadAuto(s, out var vp); + QuickBmpFile.LoadAuto(s, out var vp); b.CoreFrameBuffer = new BitmapBuffer(vp.BufferWidth, vp.BufferHeight, vp.GetVideoBuffer()); }); diff --git a/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 8f591884ed..20199cb1c3 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -18,10 +18,10 @@ namespace BizHawk.Client.Common public const double CurrentVersion = 1.1; /// loaded core does not implement - internal TasMovie(IMovieSession session, string path, IQuickBmpFile quickBmpFile) + internal TasMovie(IMovieSession session, string path) : base(session, path) { - Branches = new TasBranchCollection(this, quickBmpFile); + Branches = new TasBranchCollection(this); ChangeLog = new TasMovieChangeLog(this); Header[HeaderKeys.MovieVersion] = $"BizHawk v2.0 Tasproj v{CurrentVersion.ToString(CultureInfo.InvariantCulture)}"; Markers = new TasMovieMarkerList(this); diff --git a/src/BizHawk.Client.Common/savestates/SavestateFile.cs b/src/BizHawk.Client.Common/savestates/SavestateFile.cs index 951a86d191..36643397bf 100644 --- a/src/BizHawk.Client.Common/savestates/SavestateFile.cs +++ b/src/BizHawk.Client.Common/savestates/SavestateFile.cs @@ -18,14 +18,11 @@ namespace BizHawk.Client.Common private readonly IVideoProvider _videoProvider; private readonly IMovieSession _movieSession; - private readonly IQuickBmpFile _quickBmpFile; - private readonly IDictionary _userBag; public SavestateFile( IEmulator emulator, IMovieSession movieSession, - IQuickBmpFile quickBmpFile, IDictionary userBag) { if (!emulator.HasSavestates()) @@ -41,7 +38,6 @@ namespace BizHawk.Client.Common } _movieSession = movieSession; - _quickBmpFile = quickBmpFile; _userBag = userBag; } @@ -88,7 +84,7 @@ namespace BizHawk.Client.Common using (new SimpleTime("Save Framebuffer")) { - bs.PutLump(BinaryStateLump.Framebuffer, s => _quickBmpFile.Save(_videoProvider, s, outWidth, outHeight)); + bs.PutLump(BinaryStateLump.Framebuffer, s => QuickBmpFile.Save(_videoProvider, s, outWidth, outHeight)); } } } @@ -168,7 +164,7 @@ namespace BizHawk.Client.Common if (_videoProvider != null) { - bl.GetLump(BinaryStateLump.Framebuffer, false, br => PopulateFramebuffer(br, _videoProvider, _quickBmpFile)); + bl.GetLump(BinaryStateLump.Framebuffer, false, br => PopulateFramebuffer(br, _videoProvider)); } string userData = ""; @@ -199,13 +195,13 @@ namespace BizHawk.Client.Common return true; } - private static void PopulateFramebuffer(BinaryReader br, IVideoProvider videoProvider, IQuickBmpFile quickBmpFile) + private static void PopulateFramebuffer(BinaryReader br, IVideoProvider videoProvider) { try { using (new SimpleTime("Load Framebuffer")) { - quickBmpFile.Load(videoProvider, br.BaseStream); + QuickBmpFile.Load(videoProvider, br.BaseStream); } } catch diff --git a/src/BizHawk.Client.EmuHawk/IMainFormForTools.cs b/src/BizHawk.Client.EmuHawk/IMainFormForTools.cs index c40fa2e72c..34414c5243 100644 --- a/src/BizHawk.Client.EmuHawk/IMainFormForTools.cs +++ b/src/BizHawk.Client.EmuHawk/IMainFormForTools.cs @@ -41,9 +41,6 @@ namespace BizHawk.Client.EmuHawk /// only referenced from bool PressRewind { get; set; } - /// only referenced from - IQuickBmpFile QuickBmpFile { get; } - /// only referenced from event Action OnPauseChanged; diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index ea8ce20429..2ca287af51 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -407,7 +407,6 @@ namespace BizHawk.Client.EmuHawk Config.Movies, Config.PathEntries.MovieBackupsAbsolutePath(), this, - QuickBmpFile, PauseEmulator, SetMainformMovieInfo); @@ -4235,7 +4234,7 @@ namespace BizHawk.Client.EmuHawk if (!Emulator.HasSavestates()) return false; if (IsSavestateSlave) return Master.LoadState(); - if (!new SavestateFile(Emulator, MovieSession, QuickBmpFile, MovieSession.UserBag).Load(path, this)) + if (!new SavestateFile(Emulator, MovieSession, MovieSession.UserBag).Load(path, this)) { AddOnScreenMessage("Loadstate error!"); return false; @@ -4305,7 +4304,7 @@ namespace BizHawk.Client.EmuHawk try { - new SavestateFile(Emulator, MovieSession, QuickBmpFile, MovieSession.UserBag).Create(path, Config.Savestates); + new SavestateFile(Emulator, MovieSession, MovieSession.UserBag).Create(path, Config.Savestates); EmuClient.OnStateSaved(this, userFriendlyStateName); RA?.OnSaveState(path); @@ -4851,8 +4850,6 @@ namespace BizHawk.Client.EmuHawk _ = LoadRom(args[0]); } - public IQuickBmpFile QuickBmpFile { get; } = EmuHawk.QuickBmpFile.INSTANCE; - private IRetroAchievements RA { get; set; } private void OpenRetroAchievements() diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs index 7c44d6bc6d..646414646f 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs @@ -220,7 +220,7 @@ namespace BizHawk.Client.EmuHawk Movie.LoadBranch(branch); Tastudio.LoadState(new(branch.Frame, new MemoryStream(branch.CoreData, false))); Movie.TasStateManager.Capture(Tastudio.Emulator.Frame, Tastudio.Emulator.AsStatable()); - Tastudio.MainForm.QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.CoreFrameBuffer), Tastudio.VideoProvider); + QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.CoreFrameBuffer), Tastudio.VideoProvider); if (Tastudio.Settings.OldControlSchemeForBranches && Tastudio.TasPlaybackBox.RecordingMode) Movie.Truncate(branch.Frame);