From c7db5fd543b4de8587786e7bc81c1cc92e2377d1 Mon Sep 17 00:00:00 2001 From: "phillip.grimsrud" Date: Sun, 3 Jun 2012 04:04:13 +0000 Subject: [PATCH] 1. Fixed an issue that prevented going into the movie finished state properly. 2. Relegated a memory leak to tastudio. --- BizHawk.MultiClient/MainForm.cs | 14 ++++++++------ BizHawk.MultiClient/movie/Movie.cs | 15 +++++++++++++-- BizHawk.MultiClient/movie/MovieLog.cs | 6 ++++++ BizHawk.MultiClient/tools/TAStudio.Designer.cs | 9 ++++++++- BizHawk.MultiClient/tools/TAStudio.cs | 14 +++++++++++++- 5 files changed, 48 insertions(+), 10 deletions(-) diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index ca93c0caf7..c92c3cb8ee 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -32,7 +32,7 @@ namespace BizHawk.MultiClient public bool PressRewind = false; public bool FastForward = false; public bool TurboFastForward = false; - public bool StopOnEnd = false; + public bool StopOnEnd = true; public bool UpdateFrame = false; //avi/wav state @@ -1838,8 +1838,7 @@ namespace BizHawk.MultiClient if (!suppressCaptureRewind && Global.Config.RewindEnabled) CaptureRewindState(); - - //Global.MovieSession.Movie.CaptureState(); + Global.MovieSession.Movie.CaptureState(); if (!runloop_frameadvance) genSound = true; else if (!Global.Config.MuteFrameAdvance) @@ -1875,15 +1874,18 @@ namespace BizHawk.MultiClient if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY) { - if (Global.MovieSession.Movie.Length() == Global.Emulator.Frame && true == StopOnEnd) + if (Global.MovieSession.Movie.Length() == Global.Emulator.Frame+1 && true == StopOnEnd) { - StopOnEnd = false; + if (true == Global.MovieSession.Movie.TastudioOn) + { + StopOnEnd = false; + } Global.MovieSession.Movie.SetMovieFinished(); } } if (Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED) { - if (Global.MovieSession.Movie.Length() > Global.Emulator.Frame) + if (Global.MovieSession.Movie.Length() > Global.Emulator.Frame+1) { Global.MovieSession.Movie.StartPlayback(); //Global.MovieSession.MovieControllerAdapter.SetControllersAsMnemonic(Global.MovieSession.Movie.GetInputFrame(Global.Emulator.Frame)); diff --git a/BizHawk.MultiClient/movie/Movie.cs b/BizHawk.MultiClient/movie/Movie.cs index d16cbcbd5a..ccadfe57b0 100644 --- a/BizHawk.MultiClient/movie/Movie.cs +++ b/BizHawk.MultiClient/movie/Movie.cs @@ -16,6 +16,9 @@ namespace BizHawk.MultiClient public SubtitleList Subtitles = new SubtitleList(); public bool MakeBackup = true; //make backup before altering movie + //Remove this once the memory mangement issues with save states for tastudio has been solved. + public bool TastudioOn = false; + public bool IsText { get; private set; } public string Filename { get; private set; } public MOVIEMODE Mode { get; set; } @@ -91,8 +94,16 @@ namespace BizHawk.MultiClient public void CaptureState() { - byte[] state = Global.Emulator.SaveStateBinary(); - Log.AddState(state); + if (true == TastudioOn) + { + byte[] state = Global.Emulator.SaveStateBinary(); + Log.AddState(state); + } + } + + public void ClearStates() + { + Log.ClearStates(); } public void RewindToFrame(int frame) diff --git a/BizHawk.MultiClient/movie/MovieLog.cs b/BizHawk.MultiClient/movie/MovieLog.cs index 55382e194d..9afbfdf992 100644 --- a/BizHawk.MultiClient/movie/MovieLog.cs +++ b/BizHawk.MultiClient/movie/MovieLog.cs @@ -106,6 +106,12 @@ namespace BizHawk.MultiClient } } + public void ClearStates() + { + StateList.Clear(); + StateLastValidIndex = -1; + } + public void Truncate(int frame) { if (frame >= 0 && frame < Length()) diff --git a/BizHawk.MultiClient/tools/TAStudio.Designer.cs b/BizHawk.MultiClient/tools/TAStudio.Designer.cs index 3862e3da3f..0a7a3e8330 100644 --- a/BizHawk.MultiClient/tools/TAStudio.Designer.cs +++ b/BizHawk.MultiClient/tools/TAStudio.Designer.cs @@ -17,7 +17,14 @@ { components.Dispose(); } - base.Dispose(disposing); + + //Todo remove once save state log memory issues are fixed + Global.MovieSession.Movie.TastudioOn = false; + Global.MovieSession.Movie.ClearStates(); + + Global.MainForm.StopOnEnd = true; + + base.Dispose(disposing); } #region Windows Form Designer generated code diff --git a/BizHawk.MultiClient/tools/TAStudio.cs b/BizHawk.MultiClient/tools/TAStudio.cs index 83ab2a0d55..b941bdf87d 100644 --- a/BizHawk.MultiClient/tools/TAStudio.cs +++ b/BizHawk.MultiClient/tools/TAStudio.cs @@ -146,6 +146,10 @@ namespace BizHawk.MultiClient Engaged = true; Global.OSD.AddMessage("TAStudio engaged"); + Global.MovieSession.Movie.TastudioOn = true; + + Global.MainForm.StopOnEnd = false; + LoadConfigSettings(); ReadOnlyCheckBox.Checked = Global.MainForm.ReadOnly; DisplayList(); @@ -351,7 +355,15 @@ namespace BizHawk.MultiClient private void FastForwardToEnd_Click(object sender, EventArgs e) { - Global.MainForm.StopOnEnd ^= true; + if (true == this.FastFowardToEnd.Checked) + { + Global.MainForm.StopOnEnd = false; + } + else + { + Global.MainForm.StopOnEnd = true; + } + this.FastFowardToEnd.Checked ^= true; Global.MainForm.FastForward = this.FastFowardToEnd.Checked; if (true == this.FastFowardToEnd.Checked)