Rename WW-created compression formats.

This commit is contained in:
Paul Chote
2016-01-04 20:04:13 +00:00
parent 7c31f6e18e
commit 33f3e5ad47
9 changed files with 31 additions and 28 deletions

View File

@@ -41,7 +41,8 @@ namespace OpenRA.FileFormats
public int Remaining() { return src.Length - offset; } public int Remaining() { return src.Length - offset; }
} }
public static class Format80 // Lempel - Castle - Welch algorithm (aka Format80)
public static class LCWCompression
{ {
static void ReplicatePrevious(byte[] dest, int destIndex, int srcIndex, int count) static void ReplicatePrevious(byte[] dest, int destIndex, int srcIndex, int count)
{ {
@@ -156,7 +157,7 @@ namespace OpenRA.FileFormats
} }
} }
// Quick and dirty Format80 encoder version 2 // Quick and dirty LCW encoder version 2
// Uses raw copy and RLE compression // Uses raw copy and RLE compression
public static byte[] Encode(byte[] src) public static byte[] Encode(byte[] src)
{ {

View File

@@ -10,7 +10,8 @@
namespace OpenRA.FileFormats namespace OpenRA.FileFormats
{ {
public static class Format2 // Run length encoded sequences of zeros (aka Format2)
public static class RLEZerosCompression
{ {
public static void DecodeInto(byte[] src, byte[] dest, int destIndex) public static void DecodeInto(byte[] src, byte[] dest, int destIndex)
{ {

View File

@@ -329,7 +329,7 @@ namespace OpenRA.FileFormats
Array.Clear(cbf, 0, cbf.Length); Array.Clear(cbf, 0, cbf.Length);
Array.Clear(cbfBuffer, 0, cbfBuffer.Length); Array.Clear(cbfBuffer, 0, cbfBuffer.Length);
var decodeCount = 0; var decodeCount = 0;
decodeCount = Format80.DecodeInto(fileBuffer, cbfBuffer, decodeMode ? 1 : 0, decodeMode); decodeCount = LCWCompression.DecodeInto(fileBuffer, cbfBuffer, decodeMode ? 1 : 0, decodeMode);
if ((videoFlags & 0x10) == 16) if ((videoFlags & 0x10) == 16)
{ {
var p = 0; var p = 0;
@@ -365,7 +365,7 @@ namespace OpenRA.FileFormats
if (type == "CBP0") if (type == "CBP0")
cbf = (byte[])cbp.Clone(); cbf = (byte[])cbp.Clone();
else else
Format80.DecodeInto(cbp, cbf); LCWCompression.DecodeInto(cbp, cbf);
chunkBufferOffset = currentChunkBuffer = 0; chunkBufferOffset = currentChunkBuffer = 0;
} }
@@ -390,7 +390,7 @@ namespace OpenRA.FileFormats
// Frame data // Frame data
case "VPTZ": case "VPTZ":
Format80.DecodeInto(s.ReadBytes(subchunkLength), origData); LCWCompression.DecodeInto(s.ReadBytes(subchunkLength), origData);
// This is the last subchunk // This is the last subchunk
return; return;
@@ -398,9 +398,9 @@ namespace OpenRA.FileFormats
Array.Clear(origData, 0, origData.Length); Array.Clear(origData, 0, origData.Length);
s.ReadBytes(fileBuffer, 0, subchunkLength); s.ReadBytes(fileBuffer, 0, subchunkLength);
if (fileBuffer[0] != 0) if (fileBuffer[0] != 0)
vtprSize = Format80.DecodeInto(fileBuffer, origData); vtprSize = LCWCompression.DecodeInto(fileBuffer, origData);
else else
Format80.DecodeInto(fileBuffer, origData, 1, true); LCWCompression.DecodeInto(fileBuffer, origData, 1, true);
return; return;
case "VPTR": case "VPTR":
Array.Clear(origData, 0, origData.Length); Array.Clear(origData, 0, origData.Length);

View File

@@ -10,7 +10,8 @@
namespace OpenRA.FileFormats namespace OpenRA.FileFormats
{ {
public static class Format40 // Data that is to be XORed against another set of data (aka Format40)
public static class XORDeltaCompression
{ {
public static int DecodeInto(byte[] src, byte[] dest, int srcOffset) public static int DecodeInto(byte[] src, byte[] dest, int srcOffset)
{ {

View File

@@ -255,6 +255,9 @@
<Compile Include="Primitives\ObservableList.cs" /> <Compile Include="Primitives\ObservableList.cs" />
<Compile Include="Graphics\RgbaColorRenderer.cs" /> <Compile Include="Graphics\RgbaColorRenderer.cs" />
<Compile Include="Traits\Player\IndexedPlayerPalette.cs" /> <Compile Include="Traits\Player\IndexedPlayerPalette.cs" />
<Compile Include="FileFormats\LCWCompression.cs" />
<Compile Include="FileFormats\XORDeltaCompression.cs" />
<Compile Include="FileFormats\RLEZerosCompression.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="FileSystem\D2kSoundResources.cs" /> <Compile Include="FileSystem\D2kSoundResources.cs" />
@@ -278,9 +281,6 @@
<Compile Include="FileFormats\Blowfish.cs" /> <Compile Include="FileFormats\Blowfish.cs" />
<Compile Include="FileFormats\BlowfishKeyProvider.cs" /> <Compile Include="FileFormats\BlowfishKeyProvider.cs" />
<Compile Include="FileFormats\CRC32.cs" /> <Compile Include="FileFormats\CRC32.cs" />
<Compile Include="FileFormats\Format2.cs" />
<Compile Include="FileFormats\Format40.cs" />
<Compile Include="FileFormats\Format80.cs" />
<Compile Include="FileFormats\IniFile.cs" /> <Compile Include="FileFormats\IniFile.cs" />
<Compile Include="FileFormats\WavLoader.cs" /> <Compile Include="FileFormats\WavLoader.cs" />
<Compile Include="FileFormats\XccGlobalDatabase.cs" /> <Compile Include="FileFormats\XccGlobalDatabase.cs" />

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.SpriteLoaders
[Flags] enum FormatFlags : int [Flags] enum FormatFlags : int
{ {
PaletteTable = 1, PaletteTable = 1,
SkipFormat80 = 2, NotLCWCompressed = 2,
VariableLengthTable = 4 VariableLengthTable = 4
} }
@@ -70,14 +70,14 @@ namespace OpenRA.Mods.Common.SpriteLoaders
// Decode image data // Decode image data
var compressed = s.ReadBytes(dataLeft); var compressed = s.ReadBytes(dataLeft);
if ((flags & FormatFlags.SkipFormat80) == 0) if ((flags & FormatFlags.NotLCWCompressed) == 0)
{ {
var temp = new byte[dataSize]; var temp = new byte[dataSize];
Format80.DecodeInto(compressed, temp); LCWCompression.DecodeInto(compressed, temp);
compressed = temp; compressed = temp;
} }
Format2.DecodeInto(compressed, Data, 0); RLEZerosCompression.DecodeInto(compressed, Data, 0);
// Lookup values in lookup table // Lookup values in lookup table
for (var j = 0; j < Data.Length; j++) for (var j = 0; j < Data.Length; j++)

View File

@@ -71,7 +71,7 @@ namespace OpenRA.Mods.Common.SpriteLoaders
public class ShpTDSprite public class ShpTDSprite
{ {
enum Format { Format20 = 0x20, Format40 = 0x40, Format80 = 0x80 } enum Format { XORPrev = 0x20, XORLCW = 0x40, LCW = 0x80 }
class ImageHeader : ISpriteFrame class ImageHeader : ISpriteFrame
{ {
@@ -142,9 +142,9 @@ namespace OpenRA.Mods.Common.SpriteLoaders
for (var i = 0; i < imageCount; i++) for (var i = 0; i < imageCount; i++)
{ {
var h = headers[i]; var h = headers[i];
if (h.Format == Format.Format20) if (h.Format == Format.XORPrev)
h.RefImage = headers[i - 1]; h.RefImage = headers[i - 1];
else if (h.Format == Format.Format40 && !offsets.TryGetValue(h.RefOffset, out h.RefImage)) else if (h.Format == Format.XORLCW && !offsets.TryGetValue(h.RefOffset, out h.RefImage))
throw new InvalidDataException("Reference doesn't point to image data {0}->{1}".F(h.FileOffset, h.RefOffset)); throw new InvalidDataException("Reference doesn't point to image data {0}->{1}".F(h.FileOffset, h.RefOffset));
} }
@@ -166,8 +166,8 @@ namespace OpenRA.Mods.Common.SpriteLoaders
switch (h.Format) switch (h.Format)
{ {
case Format.Format20: case Format.XORPrev:
case Format.Format40: case Format.XORLCW:
{ {
if (h.RefImage.Data == null) if (h.RefImage.Data == null)
{ {
@@ -177,14 +177,14 @@ namespace OpenRA.Mods.Common.SpriteLoaders
} }
h.Data = CopyImageData(h.RefImage.Data); h.Data = CopyImageData(h.RefImage.Data);
Format40.DecodeInto(shpBytes, h.Data, (int)(h.FileOffset - shpBytesFileOffset)); XORDeltaCompression.DecodeInto(shpBytes, h.Data, (int)(h.FileOffset - shpBytesFileOffset));
break; break;
} }
case Format.Format80: case Format.LCW:
{ {
var imageBytes = new byte[Size.Width * Size.Height]; var imageBytes = new byte[Size.Width * Size.Height];
Format80.DecodeInto(shpBytes, imageBytes, (int)(h.FileOffset - shpBytesFileOffset)); LCWCompression.DecodeInto(shpBytes, imageBytes, (int)(h.FileOffset - shpBytesFileOffset));
h.Data = imageBytes; h.Data = imageBytes;
break; break;
} }
@@ -203,7 +203,7 @@ namespace OpenRA.Mods.Common.SpriteLoaders
public static void Write(Stream s, Size size, IEnumerable<byte[]> frames) public static void Write(Stream s, Size size, IEnumerable<byte[]> frames)
{ {
var compressedFrames = frames.Select(f => Format80.Encode(f)).ToList(); var compressedFrames = frames.Select(f => LCWCompression.Encode(f)).ToList();
// note: end-of-file and all-zeroes headers // note: end-of-file and all-zeroes headers
var dataOffset = 14 + (compressedFrames.Count + 2) * 8; var dataOffset = 14 + (compressedFrames.Count + 2) * 8;
@@ -219,7 +219,7 @@ namespace OpenRA.Mods.Common.SpriteLoaders
foreach (var f in compressedFrames) foreach (var f in compressedFrames)
{ {
var ih = new ImageHeader { Format = Format.Format80, FileOffset = (uint)dataOffset }; var ih = new ImageHeader { Format = Format.LCW, FileOffset = (uint)dataOffset };
dataOffset += f.Length; dataOffset += f.Length;
ih.WriteTo(bw); ih.WriteTo(bw);

View File

@@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.SpriteLoaders
for (var j = 0; j < height; j++) for (var j = 0; j < height; j++)
{ {
var length = s.ReadUInt16() - 2; var length = s.ReadUInt16() - 2;
Format2.DecodeInto(s.ReadBytes(length), Data, dataWidth * j); RLEZerosCompression.DecodeInto(s.ReadBytes(length), Data, dataWidth * j);
} }
} }
else else

View File

@@ -242,7 +242,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
var src = reader.ReadBytes((int)length); var src = reader.ReadBytes((int)length);
/*int actualLength =*/ /*int actualLength =*/
Format80.DecodeInto(src, dest); LCWCompression.DecodeInto(src, dest);
chunks.Add(dest); chunks.Add(dest);
} }