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);
}