diff --git a/BizHawk.Client.EmuHawk/AVOut/AVSync.cs b/BizHawk.Client.EmuHawk/AVOut/AVSync.cs index 1e13e2f68b..6a917dff17 100644 --- a/BizHawk.Client.EmuHawk/AVOut/AVSync.cs +++ b/BizHawk.Client.EmuHawk/AVOut/AVSync.cs @@ -175,6 +175,9 @@ namespace BizHawk.Client.EmuHawk { protected IVideoWriter w; + public bool UsesAudio { get { return w.UsesAudio; } } + public bool UsesVideo { get { return w.UsesVideo; } } + public void SetVideoCodecToken(IDisposable token) { w.SetVideoCodecToken(token); diff --git a/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs b/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs index 84e02d7bec..9c046a8e0a 100644 --- a/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs @@ -857,6 +857,9 @@ namespace BizHawk.Client.EmuHawk { return "avi"; } + + public bool UsesAudio { get { return parameters.has_audio; } } + public bool UsesVideo { get { return true; } } } } diff --git a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs index 51d7d08db1..40aa73d19e 100644 --- a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs @@ -291,5 +291,8 @@ namespace BizHawk.Client.EmuHawk { token = FFmpegWriterForm.FormatPreset.GetDefaultPreset(); } + + public bool UsesAudio { get { return true; } } + public bool UsesVideo { get { return true; } } } } diff --git a/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs b/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs index b82065c3c6..7472fcf072 100644 --- a/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs @@ -227,5 +227,8 @@ namespace BizHawk.Client.EmuHawk f = null; } } + + public bool UsesAudio { get { return false; } } + public bool UsesVideo { get { return true; } } } } diff --git a/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs b/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs index 3b5eaee849..ae059ac199 100644 --- a/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs @@ -19,6 +19,15 @@ namespace BizHawk.Client.EmuHawk /// void SetDefaultVideoCodecToken(); + /// + /// Returns whether this videowriter dumps audio + /// + bool UsesAudio { get; } + + /// + /// Returns whether this videowriter dumps video + /// + bool UsesVideo { get; } // why no OpenFile(IEnumerator) ? // different video writers may have different ideas of how and why splitting is to occur diff --git a/BizHawk.Client.EmuHawk/AVOut/ImageSequenceWriter.cs b/BizHawk.Client.EmuHawk/AVOut/ImageSequenceWriter.cs index 5807925db0..71f2b5da88 100644 --- a/BizHawk.Client.EmuHawk/AVOut/ImageSequenceWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/ImageSequenceWriter.cs @@ -24,6 +24,8 @@ namespace BizHawk.Client.EmuHawk { } + public bool UsesAudio { get { return false; } } + public bool UsesVideo { get { return true; } } public void OpenFile(string baseName) { diff --git a/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs b/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs index 2121e9787e..870e1751fa 100644 --- a/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs @@ -790,5 +790,10 @@ namespace BizHawk.Client.EmuHawk } public void SetFrame(int frame) { } + + public bool UsesAudio { get { return true; } } + public bool UsesVideo { get { return true; } } } + + } diff --git a/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs b/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs index 97d6c3ab2a..6e8770ed84 100644 --- a/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs @@ -138,5 +138,8 @@ namespace BizHawk.Client.EmuHawk { // ignored } + + public bool UsesAudio { get { return true; } } + public bool UsesVideo { get { return true; } } } } diff --git a/BizHawk.Client.EmuHawk/AVOut/SynclessRecorder.cs b/BizHawk.Client.EmuHawk/AVOut/SynclessRecorder.cs index 31a05ba85b..a8e4a84ded 100644 --- a/BizHawk.Client.EmuHawk/AVOut/SynclessRecorder.cs +++ b/BizHawk.Client.EmuHawk/AVOut/SynclessRecorder.cs @@ -68,6 +68,9 @@ namespace BizHawk.Client.EmuHawk wwv.Dispose(); } + public bool UsesAudio { get { return true; } } + public bool UsesVideo { get { return true; } } + class DummyDisposable : IDisposable { public void Dispose() { } } public IDisposable AcquireVideoCodecToken(IWin32Window hwnd) { return new DummyDisposable(); } diff --git a/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs b/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs index 6d0ff888bb..ccb8e6129e 100644 --- a/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs @@ -205,6 +205,9 @@ namespace BizHawk.Client.EmuHawk public void SetVideoParameters(int width, int height) { } public void SetFrame(int frame) { } + public bool UsesAudio { get { return true; } } + public bool UsesVideo { get { return false; } } + class WavWriterVToken : IDisposable { public void Dispose() { } diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 973520d960..d9c1f2b482 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -2817,8 +2817,10 @@ namespace BizHawk.Client.EmuHawk coreskipaudio = true; { - bool render = !_throttle.skipnextframe || _currAviWriter != null; + bool render = !_throttle.skipnextframe; bool renderSound = !coreskipaudio; + if (_currAviWriter != null && _currAviWriter.UsesVideo) render = true; + if (_currAviWriter != null && _currAviWriter.UsesAudio) renderSound = true; Global.Emulator.FrameAdvance(render, renderSound); }