From 862f82b1b2eff37b1db4bb8c3c532031cf6434b8 Mon Sep 17 00:00:00 2001 From: nattthebear Date: Tue, 21 Jul 2015 19:17:29 -0400 Subject: [PATCH] Screenshots on tasproj branches --- .../BitmapBufferVideoProvider.cs | 112 +++++++++--------- .../BizHawk.Client.Common.csproj | 1 + BizHawk.Client.Common/QuickBmpFile.cs | 19 +++ .../movie/tasproj/TasBranch.cs | 26 ++-- .../BizHawk.Client.EmuHawk.csproj | 1 - .../tools/TAStudio/BookmarksBranchesBox.cs | 15 +-- 6 files changed, 86 insertions(+), 88 deletions(-) rename BizHawk.Client.EmuHawk/AVOut/BitmapBufferVideoProvder.cs => BizHawk.Client.Common/BitmapBufferVideoProvider.cs (90%) diff --git a/BizHawk.Client.EmuHawk/AVOut/BitmapBufferVideoProvder.cs b/BizHawk.Client.Common/BitmapBufferVideoProvider.cs similarity index 90% rename from BizHawk.Client.EmuHawk/AVOut/BitmapBufferVideoProvder.cs rename to BizHawk.Client.Common/BitmapBufferVideoProvider.cs index f727cc1398..b5fd7f6abc 100644 --- a/BizHawk.Client.EmuHawk/AVOut/BitmapBufferVideoProvder.cs +++ b/BizHawk.Client.Common/BitmapBufferVideoProvider.cs @@ -1,56 +1,56 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Drawing; - -using BizHawk.Emulation.Common; -using BizHawk.Bizware.BizwareGL; - -namespace BizHawk.Client.EmuHawk -{ - public class BitmapBufferVideoProvider : IVideoProvider, IDisposable - { - BitmapBuffer bb; - public BitmapBufferVideoProvider(BitmapBuffer bb) - { - this.bb = bb; - } - - public void Dispose() - { - if (bb != null) bb.Dispose(); - bb = null; - } - - public int[] GetVideoBuffer() - { - return bb.Pixels; - } - - public int VirtualWidth - { - get { return bb.Width; } - } - - public int VirtualHeight - { - get { return bb.Height; } - } - - public int BufferWidth - { - get { return bb.Width; } - } - - public int BufferHeight - { - get { return bb.Height; } - } - - public int BackgroundColor - { - get { return 0; } - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Drawing; + +using BizHawk.Emulation.Common; +using BizHawk.Bizware.BizwareGL; + +namespace BizHawk.Client.Common +{ + public class BitmapBufferVideoProvider : IVideoProvider, IDisposable + { + BitmapBuffer bb; + public BitmapBufferVideoProvider(BitmapBuffer bb) + { + this.bb = bb; + } + + public void Dispose() + { + if (bb != null) bb.Dispose(); + bb = null; + } + + public int[] GetVideoBuffer() + { + return bb.Pixels; + } + + public int VirtualWidth + { + get { return bb.Width; } + } + + public int VirtualHeight + { + get { return bb.Height; } + } + + public int BufferWidth + { + get { return bb.Width; } + } + + public int BufferHeight + { + get { return bb.Height; } + } + + public int BackgroundColor + { + get { return 0; } + } + } +} diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index ee24a77606..d3c67435b7 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -103,6 +103,7 @@ + diff --git a/BizHawk.Client.Common/QuickBmpFile.cs b/BizHawk.Client.Common/QuickBmpFile.cs index a47bc0f7e7..24bb9ce772 100644 --- a/BizHawk.Client.Common/QuickBmpFile.cs +++ b/BizHawk.Client.Common/QuickBmpFile.cs @@ -143,6 +143,25 @@ namespace BizHawk.Client.Common } } + public unsafe static void Copy(IVideoProvider src, IVideoProvider dst) + { + fixed (int* srcp = src.GetVideoBuffer(), dstp = dst.GetVideoBuffer()) + { + Blit(new BMP + { + Data = srcp, + Width = src.BufferWidth, + Height = src.BufferHeight + }, + new BMP + { + Data = dstp, + Width = src.BufferWidth, + Height = src.BufferHeight + }); + } + } + public unsafe static bool Load(IVideoProvider v, Stream s) { var bf = BITMAPFILEHEADER.FromStream(s); diff --git a/BizHawk.Client.Common/movie/tasproj/TasBranch.cs b/BizHawk.Client.Common/movie/tasproj/TasBranch.cs index 24f16e9c3d..cb0917fef7 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasBranch.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasBranch.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.IO; using Newtonsoft.Json; +using BizHawk.Bizware.BizwareGL; namespace BizHawk.Client.Common { @@ -11,7 +12,7 @@ namespace BizHawk.Client.Common public int Frame { get; set; } public byte[] CoreData { get; set; } public List InputLog { get; set; } - public int[] OSDFrameBuffer { get; set; } + public BitmapBuffer OSDFrameBuffer { get; set; } public TasLagLog LagLog { get; set; } } @@ -42,15 +43,8 @@ namespace BizHawk.Client.Common }); bs.PutLump(nframebuffer, delegate(Stream s) { - // todo: do we want to do something more clever here? - byte[] buff = new byte[2048]; - var src = b.OSDFrameBuffer; - for (int i = 0; i < src.Length; i += 512) - { - int n = Math.Min(512, src.Length - i); - Buffer.BlockCopy(src, i * 4, buff, 0, n * 4); - s.Write(buff, 0, n * 4); - } + var vp = new BitmapBufferVideoProvider(b.OSDFrameBuffer); + QuickBmpFile.Save(vp, s, 160, 120); // todo: choose size more smarterly }); bs.PutLump(nlaglog, delegate(BinaryWriter bw) { @@ -103,15 +97,9 @@ namespace BizHawk.Client.Common bl.GetLump(nframebuffer, true, delegate(Stream s, long length) { - int[] dst = new int[length / 4]; - byte[] buff = new byte[2048]; - for (int i = 0; i < dst.Length; i++) - { - int n = Math.Min(512, dst.Length - i); - s.Read(buff, 0, n * 4); - Buffer.BlockCopy(buff, 0, dst, i * 4, n * 4); - } - b.OSDFrameBuffer = dst; + b.OSDFrameBuffer = new BitmapBuffer(160, 120); // todo: choose size more smarterly + var vp = new BitmapBufferVideoProvider(b.OSDFrameBuffer); + QuickBmpFile.Load(vp, s); }); bl.GetLump(nlaglog, true, delegate(BinaryReader br) diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index 6d040811d6..cf521e3fe9 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -131,7 +131,6 @@ - diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs index 370a03e529..a98b11080c 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs @@ -81,8 +81,8 @@ namespace BizHawk.Client.EmuHawk Frame = Global.Emulator.Frame, CoreData = (byte[])((Global.Emulator as IStatable).SaveStateBinary().Clone()), InputLog = Tastudio.CurrentTasMovie.InputLog.ToList(), - //OSDFrameBuffer = GlobalWin.MainForm.CurrentFrameBuffer(captureOSD: true), - OSDFrameBuffer = (int[])(Global.Emulator.VideoProvider().GetVideoBuffer().Clone()), + OSDFrameBuffer = GlobalWin.MainForm.CaptureOSD(), + //OSDFrameBuffer = (int[])(Global.Emulator.VideoProvider().GetVideoBuffer().Clone()), LagLog = Tastudio.CurrentTasMovie.TasLagLog.Clone() }; @@ -122,15 +122,6 @@ namespace BizHawk.Client.EmuHawk } } - private void Temp(int[] framebuffer) - { - var buff = Global.Emulator.VideoProvider().GetVideoBuffer(); - for (int i = 0; i < buff.Length; i++) - { - buff[i] = framebuffer[i]; - } - } - private void LoadBranch(TasBranch branch) { Tastudio.CurrentTasMovie.LoadBranch(branch); @@ -138,7 +129,7 @@ namespace BizHawk.Client.EmuHawk var stateInfo = new KeyValuePair(branch.Frame, branch.CoreData); Tastudio.LoadState(stateInfo); //SavestateManager.PopulateFramebuffer(branch.OSDFrameBuffer); - Temp(branch.OSDFrameBuffer); + //Temp(branch.OSDFrameBuffer); GlobalWin.MainForm.PauseEmulator(); GlobalWin.MainForm.PauseOnFrame = null; Tastudio.RefreshDialog();