Remove icsharp (#2590)
Since .NET 4.5, there's been a good framework alternative, and it gets lots of eyes on it. I've heard that it's quite fast in .NET Core too.
This commit is contained in:
parent
e24709f8fb
commit
adca19c30a
|
@ -11,7 +11,6 @@
|
||||||
<Reference Include="System.Data.SQLite, Version=1.0.105.2, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64" SpecificVersion="False" HintPath="$(ProjectDir)../../References/x64/SQLite/System.Data.SQLite.dll" />
|
<Reference Include="System.Data.SQLite, Version=1.0.105.2, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64" SpecificVersion="False" HintPath="$(ProjectDir)../../References/x64/SQLite/System.Data.SQLite.dll" />
|
||||||
<Reference Include="NLua" HintPath="$(ProjectDir)../../output/dll/nlua/NLua.dll" Private="False" />
|
<Reference Include="NLua" HintPath="$(ProjectDir)../../output/dll/nlua/NLua.dll" Private="False" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.24.0" />
|
<PackageReference Include="SharpCompress" Version="0.24.0" />
|
||||||
<PackageReference Include="SharpZipLib" Version="1.1.0" />
|
|
||||||
<ProjectReference Include="$(ProjectDir)../BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj" />
|
<ProjectReference Include="$(ProjectDir)../BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj" />
|
||||||
<ProjectReference Include="$(ProjectDir)../BizHawk.Bizware.BizwareGL/BizHawk.Bizware.BizwareGL.csproj" />
|
<ProjectReference Include="$(ProjectDir)../BizHawk.Bizware.BizwareGL/BizHawk.Bizware.BizwareGL.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -13,8 +13,7 @@ using BizHawk.Emulation.Cores.Nintendo.SNES;
|
||||||
using BizHawk.Emulation.Cores.Sony.PSX;
|
using BizHawk.Emulation.Cores.Sony.PSX;
|
||||||
using BizHawk.Emulation.Cores.Arcades.MAME;
|
using BizHawk.Emulation.Cores.Arcades.MAME;
|
||||||
using BizHawk.Emulation.DiscSystem;
|
using BizHawk.Emulation.DiscSystem;
|
||||||
using ICSharpCode.SharpZipLib.Zip.Compression;
|
using System.IO.Compression;
|
||||||
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
|
|
||||||
|
|
||||||
namespace BizHawk.Client.Common
|
namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
|
@ -503,10 +502,11 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
private void LoadPSF(string path, CoreComm nextComm, HawkFile file, out IEmulator nextEmulator, out RomGame rom, out GameInfo game)
|
private void LoadPSF(string path, CoreComm nextComm, HawkFile file, out IEmulator nextEmulator, out RomGame rom, out GameInfo game)
|
||||||
{
|
{
|
||||||
|
// TODO: Why does the PSF loader need CbDeflater provided? Surely this is a matter internal to it.
|
||||||
static byte[] CbDeflater(Stream instream, int size)
|
static byte[] CbDeflater(Stream instream, int size)
|
||||||
{
|
{
|
||||||
var ret = new MemoryStream();
|
var ret = new MemoryStream();
|
||||||
new InflaterInputStream(instream, new Inflater(false)).CopyTo(ret);
|
new GZipStream(instream, CompressionMode.Decompress).CopyTo(ret);
|
||||||
return ret.ToArray();
|
return ret.ToArray();
|
||||||
}
|
}
|
||||||
var psf = new PSF();
|
var psf = new PSF();
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using BizHawk.Common;
|
using BizHawk.Common;
|
||||||
|
@ -6,7 +7,6 @@ using BizHawk.Common.IOExtensions;
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
using BizHawk.Emulation.Cores;
|
using BizHawk.Emulation.Cores;
|
||||||
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
||||||
using ICSharpCode.SharpZipLib.Zip;
|
|
||||||
|
|
||||||
namespace BizHawk.Client.Common.movie.import
|
namespace BizHawk.Client.Common.movie.import
|
||||||
{
|
{
|
||||||
|
@ -22,7 +22,7 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
Result.Movie.HeaderEntries[HeaderKeys.Core] = CoreNames.Bsnes;
|
Result.Movie.HeaderEntries[HeaderKeys.Core] = CoreNames.Bsnes;
|
||||||
|
|
||||||
// .LSMV movies are .zip files containing data files.
|
// .LSMV movies are .zip files containing data files.
|
||||||
using (var fs = new FileStream(SourceFile.FullName, FileMode.Open, FileAccess.Read))
|
using var fs = new FileStream(SourceFile.FullName, FileMode.Open, FileAccess.Read);
|
||||||
{
|
{
|
||||||
byte[] data = new byte[4];
|
byte[] data = new byte[4];
|
||||||
fs.Read(data, 0, 4);
|
fs.Read(data, 0, 4);
|
||||||
|
@ -31,9 +31,10 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
Result.Errors.Add("This is not a zip file.");
|
Result.Errors.Add("This is not a zip file.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
fs.Position = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
using var zip = new ZipFile(SourceFile.FullName);
|
using var zip = new ZipArchive(fs, ZipArchiveMode.Read, true);
|
||||||
|
|
||||||
var ss = new LibsnesCore.SnesSyncSettings
|
var ss = new LibsnesCore.SnesSyncSettings
|
||||||
{
|
{
|
||||||
|
@ -44,11 +45,11 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
|
|
||||||
string platform = "SNES";
|
string platform = "SNES";
|
||||||
|
|
||||||
foreach (ZipEntry item in zip)
|
foreach (var item in zip.Entries)
|
||||||
{
|
{
|
||||||
if (item.Name == "authors")
|
if (item.Name == "authors")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string authors = Encoding.UTF8.GetString(stream.ReadAllBytes());
|
string authors = Encoding.UTF8.GetString(stream.ReadAllBytes());
|
||||||
string authorList = "";
|
string authorList = "";
|
||||||
string authorLast = "";
|
string authorLast = "";
|
||||||
|
@ -86,19 +87,19 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name == "coreversion")
|
else if (item.Name == "coreversion")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string coreVersion = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string coreVersion = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
Result.Movie.Comments.Add($"CoreOrigin {coreVersion}");
|
Result.Movie.Comments.Add($"CoreOrigin {coreVersion}");
|
||||||
}
|
}
|
||||||
else if (item.Name == "gamename")
|
else if (item.Name == "gamename")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string gameName = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string gameName = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
Result.Movie.HeaderEntries[HeaderKeys.GameName] = gameName;
|
Result.Movie.HeaderEntries[HeaderKeys.GameName] = gameName;
|
||||||
}
|
}
|
||||||
else if (item.Name == "gametype")
|
else if (item.Name == "gametype")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string gametype = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string gametype = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
|
|
||||||
// TODO: Handle the other types.
|
// TODO: Handle the other types.
|
||||||
|
@ -123,7 +124,7 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name == "input")
|
else if (item.Name == "input")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string input = Encoding.UTF8.GetString(stream.ReadAllBytes());
|
string input = Encoding.UTF8.GetString(stream.ReadAllBytes());
|
||||||
|
|
||||||
int lineNum = 0;
|
int lineNum = 0;
|
||||||
|
@ -157,7 +158,7 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name.StartsWith("moviesram."))
|
else if (item.Name.StartsWith("moviesram."))
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
byte[] movieSram = stream.ReadAllBytes();
|
byte[] movieSram = stream.ReadAllBytes();
|
||||||
if (movieSram.Length != 0)
|
if (movieSram.Length != 0)
|
||||||
{
|
{
|
||||||
|
@ -168,7 +169,7 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name == "port1")
|
else if (item.Name == "port1")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string port1 = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string port1 = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
Result.Movie.HeaderEntries["port1"] = port1;
|
Result.Movie.HeaderEntries["port1"] = port1;
|
||||||
ss.LeftPort = LibsnesControllerDeck.ControllerType.Gamepad;
|
ss.LeftPort = LibsnesControllerDeck.ControllerType.Gamepad;
|
||||||
|
@ -176,7 +177,7 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name == "port2")
|
else if (item.Name == "port2")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string port2 = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string port2 = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
Result.Movie.HeaderEntries["port2"] = port2;
|
Result.Movie.HeaderEntries["port2"] = port2;
|
||||||
ss.RightPort = LibsnesControllerDeck.ControllerType.Gamepad;
|
ss.RightPort = LibsnesControllerDeck.ControllerType.Gamepad;
|
||||||
|
@ -184,13 +185,13 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name == "projectid")
|
else if (item.Name == "projectid")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string projectId = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string projectId = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
Result.Movie.HeaderEntries["ProjectID"] = projectId;
|
Result.Movie.HeaderEntries["ProjectID"] = projectId;
|
||||||
}
|
}
|
||||||
else if (item.Name == "rerecords")
|
else if (item.Name == "rerecords")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string rerecords = Encoding.UTF8.GetString(stream.ReadAllBytes());
|
string rerecords = Encoding.UTF8.GetString(stream.ReadAllBytes());
|
||||||
int rerecordCount;
|
int rerecordCount;
|
||||||
|
|
||||||
|
@ -208,7 +209,7 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name.EndsWith(".sha256"))
|
else if (item.Name.EndsWith(".sha256"))
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string rom = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string rom = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
int pos = item.Name.LastIndexOf(".sha256");
|
int pos = item.Name.LastIndexOf(".sha256");
|
||||||
string name = item.Name.Substring(0, pos);
|
string name = item.Name.Substring(0, pos);
|
||||||
|
@ -221,7 +222,7 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name == "subtitles")
|
else if (item.Name == "subtitles")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string subtitles = Encoding.UTF8.GetString(stream.ReadAllBytes());
|
string subtitles = Encoding.UTF8.GetString(stream.ReadAllBytes());
|
||||||
using (var reader = new StringReader(subtitles))
|
using (var reader = new StringReader(subtitles))
|
||||||
{
|
{
|
||||||
|
@ -238,19 +239,19 @@ namespace BizHawk.Client.Common.movie.import
|
||||||
}
|
}
|
||||||
else if (item.Name == "starttime.second")
|
else if (item.Name == "starttime.second")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string startSecond = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string startSecond = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
Result.Movie.HeaderEntries["StartSecond"] = startSecond;
|
Result.Movie.HeaderEntries["StartSecond"] = startSecond;
|
||||||
}
|
}
|
||||||
else if (item.Name == "starttime.subsecond")
|
else if (item.Name == "starttime.subsecond")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string startSubSecond = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string startSubSecond = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
Result.Movie.HeaderEntries["StartSubSecond"] = startSubSecond;
|
Result.Movie.HeaderEntries["StartSubSecond"] = startSubSecond;
|
||||||
}
|
}
|
||||||
else if (item.Name == "systemid")
|
else if (item.Name == "systemid")
|
||||||
{
|
{
|
||||||
using var stream = zip.GetInputStream(item);
|
using var stream = item.Open();
|
||||||
string systemId = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
string systemId = Encoding.UTF8.GetString(stream.ReadAllBytes()).Trim();
|
||||||
Result.Movie.Comments.Add($"{EmulationOrigin} {systemId}");
|
Result.Movie.Comments.Add($"{EmulationOrigin} {systemId}");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using ICSharpCode.SharpZipLib.Zip;
|
|
||||||
|
|
||||||
namespace BizHawk.Client.Common
|
namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
public class ZipStateLoader : IDisposable
|
public class ZipStateLoader : IDisposable
|
||||||
{
|
{
|
||||||
private ZipFile _zip;
|
private ZipArchive _zip;
|
||||||
private Version _ver;
|
private Version _ver;
|
||||||
private bool _isDisposed;
|
private bool _isDisposed;
|
||||||
private Dictionary<string, ZipEntry> _entriesByName;
|
private Dictionary<string, ZipArchiveEntry> _entriesByName;
|
||||||
|
|
||||||
private ZipStateLoader()
|
private ZipStateLoader()
|
||||||
{
|
{
|
||||||
|
@ -20,7 +20,6 @@ namespace BizHawk.Client.Common
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Dispose(true);
|
Dispose(true);
|
||||||
GC.SuppressFinalize(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void Dispose(bool disposing)
|
protected virtual void Dispose(bool disposing)
|
||||||
|
@ -30,7 +29,7 @@ namespace BizHawk.Client.Common
|
||||||
_isDisposed = true;
|
_isDisposed = true;
|
||||||
if (disposing)
|
if (disposing)
|
||||||
{
|
{
|
||||||
_zip.Close();
|
_zip.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,8 +52,8 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
private void PopulateEntries()
|
private void PopulateEntries()
|
||||||
{
|
{
|
||||||
_entriesByName = new Dictionary<string, ZipEntry>();
|
_entriesByName = new Dictionary<string, ZipArchiveEntry>();
|
||||||
foreach (ZipEntry z in _zip)
|
foreach (var z in _zip.Entries)
|
||||||
{
|
{
|
||||||
string name = z.Name;
|
string name = z.Name;
|
||||||
int i;
|
int i;
|
||||||
|
@ -84,17 +83,17 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ret._zip = new ZipFile(filename);
|
ret._zip = new ZipArchive(new FileStream(filename, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read);
|
||||||
ret.PopulateEntries();
|
ret.PopulateEntries();
|
||||||
if (!isMovieLoad && !ret.GetLump(BinaryStateLump.Versiontag, false, ret.ReadVersion))
|
if (!isMovieLoad && !ret.GetLump(BinaryStateLump.Versiontag, false, ret.ReadVersion))
|
||||||
{
|
{
|
||||||
ret._zip.Close();
|
ret._zip.Dispose();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
catch (ZipException)
|
catch (IOException)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -109,8 +108,8 @@ namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
if (_entriesByName.TryGetValue(lump.ReadName, out var e))
|
if (_entriesByName.TryGetValue(lump.ReadName, out var e))
|
||||||
{
|
{
|
||||||
using var zs = _zip.GetInputStream(e);
|
using var zs = e.Open();
|
||||||
callback(zs, e.Size);
|
callback(zs, e.Length);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,11 +6,10 @@ using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using BizHawk.Client.Common;
|
using BizHawk.Client.Common;
|
||||||
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
|
|
||||||
using ICSharpCode.SharpZipLib.Zip.Compression;
|
|
||||||
|
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
using BizHawk.Common;
|
using BizHawk.Common;
|
||||||
|
using System.IO.Compression;
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
|
@ -23,6 +22,25 @@ namespace BizHawk.Client.EmuHawk
|
||||||
[VideoWriter("jmd", "JMD writer", "Writes a JPC-rr multidump file (JMD). These can be read and further processed with jpc-streamtools. One JMD file contains all audio (uncompressed) and video (compressed).")]
|
[VideoWriter("jmd", "JMD writer", "Writes a JPC-rr multidump file (JMD). These can be read and further processed with jpc-streamtools. One JMD file contains all audio (uncompressed) and video (compressed).")]
|
||||||
public class JmdWriter : IVideoWriter
|
public class JmdWriter : IVideoWriter
|
||||||
{
|
{
|
||||||
|
// We formerly used a compressor that supported 0-9 values for compression level
|
||||||
|
private const int NO_COMPRESSION = 0;
|
||||||
|
private const int BEST_COMPRESSION = 9;
|
||||||
|
private const int DEFAULT_COMPRESSION = -1;
|
||||||
|
private const int BEST_SPEED = 1;
|
||||||
|
|
||||||
|
private static CompressionLevel GetCompressionLevel(int v)
|
||||||
|
{
|
||||||
|
switch (v)
|
||||||
|
{
|
||||||
|
case NO_COMPRESSION:
|
||||||
|
return CompressionLevel.NoCompression;
|
||||||
|
case BEST_COMPRESSION:
|
||||||
|
return CompressionLevel.Optimal;
|
||||||
|
default:
|
||||||
|
return CompressionLevel.Fastest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// carries private compression information data
|
/// carries private compression information data
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -47,7 +65,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public CodecToken()
|
public CodecToken()
|
||||||
{
|
{
|
||||||
CompressionLevel = Deflater.DEFAULT_COMPRESSION;
|
CompressionLevel = DEFAULT_COMPRESSION;
|
||||||
NumThreads = 3;
|
NumThreads = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -531,9 +549,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
// load from config and sanitize
|
// load from config and sanitize
|
||||||
int t = Math.Min(Math.Max(config.JmdThreads, 1), 6);
|
int t = Math.Min(Math.Max(config.JmdThreads, 1), 6);
|
||||||
|
|
||||||
int c = Math.Min(Math.Max(config.JmdCompression, Deflater.NO_COMPRESSION), Deflater.BEST_COMPRESSION);
|
int c = Math.Min(Math.Max(config.JmdCompression, NO_COMPRESSION), BEST_COMPRESSION);
|
||||||
|
|
||||||
if (!JmdForm.DoCompressionDlg(ref t, ref c, 1, 6, Deflater.NO_COMPRESSION, Deflater.BEST_COMPRESSION, parent.SelfAsHandle))
|
if (!JmdForm.DoCompressionDlg(ref t, ref c, 1, 6, NO_COMPRESSION, BEST_COMPRESSION, parent.SelfAsHandle))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
config.JmdThreads = ret.NumThreads = t;
|
config.JmdThreads = ret.NumThreads = t;
|
||||||
|
@ -703,11 +721,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
m.WriteByte((byte)(v.BufferWidth & 255));
|
m.WriteByte((byte)(v.BufferWidth & 255));
|
||||||
m.WriteByte((byte)(v.BufferHeight >> 8));
|
m.WriteByte((byte)(v.BufferHeight >> 8));
|
||||||
m.WriteByte((byte)(v.BufferHeight & 255));
|
m.WriteByte((byte)(v.BufferHeight & 255));
|
||||||
var g = new DeflaterOutputStream(m, new Deflater(_token.CompressionLevel))
|
|
||||||
{
|
|
||||||
IsStreamOwner = false // leave memory stream open so we can pick its contents
|
|
||||||
};
|
|
||||||
|
|
||||||
|
var g = new GZipStream(m, GetCompressionLevel(_token.CompressionLevel), true); // leave memory stream open so we can pick its contents
|
||||||
g.Write(v.VideoBuffer, 0, v.VideoBuffer.Length);
|
g.Write(v.VideoBuffer, 0, v.VideoBuffer.Length);
|
||||||
g.Flush();
|
g.Flush();
|
||||||
g.Close();
|
g.Close();
|
||||||
|
@ -780,7 +795,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
// load from config and sanitize
|
// load from config and sanitize
|
||||||
int t = Math.Min(Math.Max(config.JmdThreads, 1), 6);
|
int t = Math.Min(Math.Max(config.JmdThreads, 1), 6);
|
||||||
|
|
||||||
int c = Math.Min(Math.Max(config.JmdCompression, Deflater.NO_COMPRESSION), Deflater.BEST_COMPRESSION);
|
int c = Math.Min(Math.Max(config.JmdCompression, NO_COMPRESSION), BEST_COMPRESSION);
|
||||||
|
|
||||||
ct.CompressionLevel = c;
|
ct.CompressionLevel = c;
|
||||||
ct.NumThreads = t;
|
ct.NumThreads = t;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.IO.Compression" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="GongShell" HintPath="$(ProjectDir)../../References/GongShell.dll" Private="true" />
|
<Reference Include="GongShell" HintPath="$(ProjectDir)../../References/GongShell.dll" Private="true" />
|
||||||
|
|
|
@ -3,6 +3,5 @@
|
||||||
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net45" />
|
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net45" />
|
||||||
<!--<package id="OpenTK" version="3.0.1" targetFramework="net20" />-->
|
<!--<package id="OpenTK" version="3.0.1" targetFramework="net20" />-->
|
||||||
<package id="OpenTK.GLControl" version="3.0.1" targetFramework="net20" />
|
<package id="OpenTK.GLControl" version="3.0.1" targetFramework="net20" />
|
||||||
<package id="SharpZipLib" version="1.1.0" targetFramework="net45" />
|
|
||||||
<package id="System.Drawing.Common" version="4.7.0" targetFramework="net461" />
|
<package id="System.Drawing.Common" version="4.7.0" targetFramework="net461" />
|
||||||
</packages>
|
</packages>
|
|
@ -10,8 +10,8 @@ using BizHawk.Client.Common;
|
||||||
using BizHawk.Common;
|
using BizHawk.Common;
|
||||||
using BizHawk.Emulation.Cores.Nintendo.NES;
|
using BizHawk.Emulation.Cores.Nintendo.NES;
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
using ICSharpCode.SharpZipLib.Core;
|
using System.IO.Compression;
|
||||||
using ICSharpCode.SharpZipLib.Zip;
|
using System.Linq;
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
|
@ -95,12 +95,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public NoiseState Noise;
|
public NoiseState Noise;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Stupid : IStaticDataSource
|
|
||||||
{
|
|
||||||
public Stream Stream { get; set; }
|
|
||||||
public Stream GetSource() => Stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Export_Click(object sender, EventArgs e)
|
private void Export_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
//acquire target
|
//acquire target
|
||||||
|
@ -120,14 +114,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
|
|
||||||
// load template
|
// load template
|
||||||
var msSongXml = new MemoryStream();
|
XElement templateRoot;
|
||||||
var zfTemplate = new ZipFile(templatePath);
|
using (var zfTemplate = new ZipArchive(new FileStream(templatePath, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read))
|
||||||
{
|
{
|
||||||
using var zis = zfTemplate.GetInputStream(zfTemplate.GetEntry("Song.xml"));
|
var entry = zfTemplate.Entries.Single(e => e.Name == "Song.xml");
|
||||||
byte[] buffer = new byte[4096]; // 4K is optimum
|
using var stream = entry.Open();
|
||||||
StreamUtils.Copy(zis, msSongXml, buffer);
|
templateRoot = XElement.Load(stream);
|
||||||
}
|
}
|
||||||
var templateRoot = XElement.Parse(Encoding.UTF8.GetString(msSongXml.ToArray()));
|
|
||||||
|
|
||||||
//get the pattern pool, and whack the child nodes
|
//get the pattern pool, and whack the child nodes
|
||||||
var xPatterns = templateRoot.XPathSelectElement("//Patterns");
|
var xPatterns = templateRoot.XPathSelectElement("//Patterns");
|
||||||
|
@ -412,18 +405,11 @@ namespace BizHawk.Client.EmuHawk
|
||||||
File.Delete(outPath);
|
File.Delete(outPath);
|
||||||
File.Copy(templatePath, outPath);
|
File.Copy(templatePath, outPath);
|
||||||
|
|
||||||
var msOutXml = new MemoryStream();
|
using var zfOutput = new ZipArchive(new FileStream(outPath, FileMode.Create, FileAccess.Write), ZipArchiveMode.Create);
|
||||||
templateRoot.Save(msOutXml);
|
using (var stream = zfOutput.CreateEntry("Song.xml").Open())
|
||||||
msOutXml.Flush();
|
{
|
||||||
msOutXml.Position = 0;
|
templateRoot.Save(stream);
|
||||||
var zfOutput = new ZipFile(outPath);
|
}
|
||||||
zfOutput.BeginUpdate();
|
|
||||||
zfOutput.Add(new Stupid { Stream = msOutXml }, "Song.xml");
|
|
||||||
zfOutput.CommitUpdate();
|
|
||||||
zfOutput.Close();
|
|
||||||
|
|
||||||
// for easier debugging, write patterndata XML
|
|
||||||
////DUMP_TO_DISK(msOutXml.ToArray())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly List<ApuState> _log = new List<ApuState>();
|
private readonly List<ApuState> _log = new List<ApuState>();
|
||||||
|
|
|
@ -7,8 +7,7 @@ using BizHawk.Client.Common;
|
||||||
using BizHawk.Common.BufferExtensions;
|
using BizHawk.Common.BufferExtensions;
|
||||||
using BizHawk.Emulation.Cores.PCEngine;
|
using BizHawk.Emulation.Cores.PCEngine;
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
|
using System.IO.Compression;
|
||||||
using ICSharpCode.SharpZipLib.Zip;
|
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
|
@ -176,16 +175,10 @@ namespace BizHawk.Client.EmuHawk
|
||||||
string tmpFilename = $"{Path.GetTempFileName()}.zip";
|
string tmpFilename = $"{Path.GetTempFileName()}.zip";
|
||||||
using (var stream = new FileStream(tmpFilename, FileMode.Create, FileAccess.Write, FileShare.Read))
|
using (var stream = new FileStream(tmpFilename, FileMode.Create, FileAccess.Write, FileShare.Read))
|
||||||
{
|
{
|
||||||
var zip = new ZipOutputStream(stream)
|
using var zip = new ZipArchive(stream, ZipArchiveMode.Create);
|
||||||
{
|
|
||||||
IsStreamOwner = false,
|
|
||||||
UseZip64 = UseZip64.Off
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach (var entry in _psgEntries)
|
foreach (var entry in _psgEntries)
|
||||||
{
|
{
|
||||||
var ze = new ZipEntry($"{entry.Name}.wav") { CompressionMethod = CompressionMethod.Deflated };
|
|
||||||
zip.PutNextEntry(ze);
|
|
||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream();
|
||||||
var bw = new BinaryWriter(ms);
|
var bw = new BinaryWriter(ms);
|
||||||
bw.Write(EmptyWav, 0, EmptyWav.Length);
|
bw.Write(EmptyWav, 0, EmptyWav.Length);
|
||||||
|
@ -204,13 +197,11 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
bw.Flush();
|
bw.Flush();
|
||||||
var buf = ms.GetBuffer();
|
var buf = ms.GetBuffer();
|
||||||
zip.Write(buf, 0, (int)ms.Length);
|
|
||||||
zip.Flush();
|
|
||||||
zip.CloseEntry();
|
|
||||||
}
|
|
||||||
|
|
||||||
zip.Close();
|
var ze = zip.CreateEntry($"{entry.Name}.wav", CompressionLevel.Fastest);
|
||||||
stream.Flush();
|
using var zipstream = ze.Open();
|
||||||
|
zipstream.Write(buf, 0, (int)ms.Length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
System.Diagnostics.Process.Start(tmpFilename);
|
System.Diagnostics.Process.Start(tmpFilename);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue