General refactor and cleanup.

This commit is contained in:
2024-04-30 04:46:49 +01:00
parent df86b44902
commit dbf4d2c2aa
15 changed files with 1706 additions and 1680 deletions

View File

@@ -10,7 +10,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="SharpAvi" Version="3.0.1" /> <PackageReference Include="SharpAvi" Version="3.0.1"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -4,92 +4,212 @@ using System.Linq;
using SharpAvi; using SharpAvi;
using SharpAvi.Output; using SharpAvi.Output;
namespace Aaru.VideoNow namespace Aaru.VideoNow;
public static class Color
{ {
public static class Color /// <summary>
/// This is some kind of header. Every 10 bytes there's an audio byte. Here it is without reordering from little
/// endian, so the first appearence is at 9th byte.
/// </summary>
public static readonly byte[] FrameMarker =
[
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81,
0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7,
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81,
0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7,
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0x00, 0x00, 0x01, 0x02, 0x02, 0x04, 0x03, 0x06, 0x00, 0xFF, 0x04, 0x08,
0x05, 0x0A, 0x06, 0x0C, 0x07, 0x0E, 0x00, 0xFF, 0x08, 0x11, 0x09, 0x13, 0x0A, 0x15, 0x0B, 0x17, 0x00, 0xFF,
0x0C, 0x19, 0x0D, 0x1B, 0x0E, 0x1D, 0x0F, 0x1F, 0x00, 0xFF, 0x28, 0x00, 0x29, 0x02, 0x2A, 0x04, 0x2B, 0x06,
0x00, 0xFF, 0x2C, 0x08, 0x2D, 0x0A, 0x2E, 0x0C, 0x2F, 0x0E, 0x00, 0xFF, 0x30, 0x11, 0x31, 0x13, 0x32, 0x15,
0x33, 0x17, 0x00, 0xFF, 0x34, 0x19, 0x35, 0x1B, 0x36, 0x1D, 0x37, 0x1F, 0x00, 0xFF, 0x38, 0x00, 0x39, 0x02,
0x3A, 0x04, 0x3B, 0x06, 0x00, 0xFF, 0x3C, 0x08, 0x3D, 0x0A, 0x3E, 0x0C, 0x3F, 0x0E, 0x00, 0xFF, 0x40, 0x11,
0x41, 0x13, 0x42, 0x15, 0x43, 0x17, 0x00, 0xFF, 0x44, 0x19, 0x45, 0x1B, 0x46, 0x1D, 0x47, 0x1F, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF
];
public static readonly byte[] SwappedFrameMarker =
[
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3,
0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00,
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3,
0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00,
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x00, 0x00, 0x02, 0x01, 0x04, 0x02, 0x06, 0x03, 0xFF, 0x00, 0x08, 0x04,
0x0A, 0x05, 0x0C, 0x06, 0x0E, 0x07, 0xFF, 0x00, 0x11, 0x08, 0x13, 0x09, 0x15, 0x0A, 0x17, 0x0B, 0xFF, 0x00,
0x19, 0x0C, 0x1B, 0x0D, 0x1D, 0x0E, 0x1F, 0x0F, 0xFF, 0x00, 0x00, 0x28, 0x02, 0x29, 0x04, 0x2A, 0x06, 0x2B,
0xFF, 0x00, 0x08, 0x2C, 0x0A, 0x2D, 0x0C, 0x2E, 0x0E, 0x2F, 0xFF, 0x00, 0x11, 0x30, 0x13, 0x31, 0x15, 0x32,
0x17, 0x33, 0xFF, 0x00, 0x19, 0x34, 0x1B, 0x35, 0x1D, 0x36, 0x1F, 0x37, 0xFF, 0x00, 0x00, 0x38, 0x02, 0x39,
0x04, 0x3A, 0x06, 0x3B, 0xFF, 0x00, 0x08, 0x3C, 0x0A, 0x3D, 0x0C, 0x3E, 0x0E, 0x3F, 0xFF, 0x00, 0x11, 0x40,
0x13, 0x41, 0x15, 0x42, 0x17, 0x43, 0xFF, 0x00, 0x19, 0x44, 0x1B, 0x45, 0x1D, 0x46, 0x1F, 0x47, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00
];
public static void Decode(string filename, Stream fs, bool swapped, long framePosition)
{ {
/// <summary> var progress = ' ';
/// This is some kind of header. Every 10 bytes there's an audio byte. Here it is without reordering from little
/// endian, so the first appearence is at 9th byte.
/// </summary>
public static readonly byte[] FrameMarker =
[
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81,
0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7,
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81,
0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7,
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0x00, 0x00, 0x01, 0x02, 0x02, 0x04, 0x03, 0x06, 0x00, 0xFF, 0x04, 0x08,
0x05, 0x0A, 0x06, 0x0C, 0x07, 0x0E, 0x00, 0xFF, 0x08, 0x11, 0x09, 0x13, 0x0A, 0x15, 0x0B, 0x17, 0x00, 0xFF,
0x0C, 0x19, 0x0D, 0x1B, 0x0E, 0x1D, 0x0F, 0x1F, 0x00, 0xFF, 0x28, 0x00, 0x29, 0x02, 0x2A, 0x04, 0x2B, 0x06,
0x00, 0xFF, 0x2C, 0x08, 0x2D, 0x0A, 0x2E, 0x0C, 0x2F, 0x0E, 0x00, 0xFF, 0x30, 0x11, 0x31, 0x13, 0x32, 0x15,
0x33, 0x17, 0x00, 0xFF, 0x34, 0x19, 0x35, 0x1B, 0x36, 0x1D, 0x37, 0x1F, 0x00, 0xFF, 0x38, 0x00, 0x39, 0x02,
0x3A, 0x04, 0x3B, 0x06, 0x00, 0xFF, 0x3C, 0x08, 0x3D, 0x0A, 0x3E, 0x0C, 0x3F, 0x0E, 0x00, 0xFF, 0x40, 0x11,
0x41, 0x13, 0x42, 0x15, 0x43, 0x17, 0x00, 0xFF, 0x44, 0x19, 0x45, 0x1B, 0x46, 0x1D, 0x47, 0x1F, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF
];
public static readonly byte[] SwappedFrameMarker = var aviWriter = new AviWriter(filename + ".avi")
[
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3,
0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00,
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3,
0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00,
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x00, 0x00, 0x02, 0x01, 0x04, 0x02, 0x06, 0x03, 0xFF, 0x00, 0x08, 0x04,
0x0A, 0x05, 0x0C, 0x06, 0x0E, 0x07, 0xFF, 0x00, 0x11, 0x08, 0x13, 0x09, 0x15, 0x0A, 0x17, 0x0B, 0xFF, 0x00,
0x19, 0x0C, 0x1B, 0x0D, 0x1D, 0x0E, 0x1F, 0x0F, 0xFF, 0x00, 0x00, 0x28, 0x02, 0x29, 0x04, 0x2A, 0x06, 0x2B,
0xFF, 0x00, 0x08, 0x2C, 0x0A, 0x2D, 0x0C, 0x2E, 0x0E, 0x2F, 0xFF, 0x00, 0x11, 0x30, 0x13, 0x31, 0x15, 0x32,
0x17, 0x33, 0xFF, 0x00, 0x19, 0x34, 0x1B, 0x35, 0x1D, 0x36, 0x1F, 0x37, 0xFF, 0x00, 0x00, 0x38, 0x02, 0x39,
0x04, 0x3A, 0x06, 0x3B, 0xFF, 0x00, 0x08, 0x3C, 0x0A, 0x3D, 0x0C, 0x3E, 0x0E, 0x3F, 0xFF, 0x00, 0x11, 0x40,
0x13, 0x41, 0x15, 0x42, 0x17, 0x43, 0xFF, 0x00, 0x19, 0x44, 0x1B, 0x45, 0x1D, 0x46, 0x1F, 0x47, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00
];
public static void Decode(string filename, Stream fs, bool swapped, long framePosition)
{ {
var progress = ' '; EmitIndex1 = true, FramesPerSecond = 18
};
var aviWriter = new AviWriter(filename + ".avi") IAviVideoStream videoStream = aviWriter.AddVideoStream(144, 80, BitsPerPixel.Bpp24);
videoStream.Codec = CodecIds.Uncompressed;
IAviAudioStream audioStream = aviWriter.AddAudioStream(2, 17640, 8);
fs.Position = framePosition;
var frameBuffer = new byte[19600];
fs.Read(frameBuffer, 0, frameBuffer.Length);
int audioStart = swapped ? 9 : 8;
byte[] frameMarkerToUse = swapped ? SwappedFrameMarker : FrameMarker;
if(!swapped) frameBuffer = Swapping.SwapBuffer(frameBuffer);
var outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10)
{
progress = (i / 10 % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.ExtractingAudio}", progress);
outFs.WriteByte(frameBuffer[i]);
}
byte[] videoFrame = DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
var totalFrames = 1;
framePosition += 19600;
var buffer = new byte[frameMarkerToUse.Length];
while(framePosition + 19600 < fs.Length)
{
progress = (totalFrames % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.LookingForMoreFrames}", progress);
for(int ab = audioStart; ab < buffer.Length; ab += 10) buffer[ab] = 0;
if(!buffer.SequenceEqual(frameMarkerToUse))
{ {
EmitIndex1 = true, FramesPerSecond = 18 Console.Write("\r \r");
}; Console.WriteLine(Localization.FrameAndNextAreNotAligned, totalFrames);
long expectedFramePosition = framePosition;
IAviVideoStream videoStream = aviWriter.AddVideoStream(144, 80, BitsPerPixel.Bpp24); while(framePosition < fs.Length)
videoStream.Codec = CodecIds.Uncompressed; {
IAviAudioStream audioStream = aviWriter.AddAudioStream(2, 17640, 8); fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
for(int ab = audioStart; ab < buffer.Length; ab += 10) buffer[ab] = 0;
if(buffer.SequenceEqual(frameMarkerToUse))
{
Console.Write("\r \r");
fs.Position = framePosition;
frameBuffer = new byte[19600];
fs.Read(frameBuffer, 0, frameBuffer.Length);
if(!swapped) frameBuffer = Swapping.SwapBuffer(frameBuffer);
outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10)
{
progress = (i / 10 % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.ExtractingAudio}", progress);
outFs.WriteByte(frameBuffer[i]);
}
videoFrame = DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
totalFrames++;
Console.Write("\r \r");
Console.WriteLine(Localization.FrameFoundAtPosition,
framePosition,
totalFrames,
framePosition - expectedFramePosition);
Console.WriteLine(framePosition % 2352 == 0
? Localization.FrameIsAtSectorBoundary
: Localization.FrameIsNotAtSectorBoundary,
totalFrames);
framePosition += 19600;
break;
}
framePosition++;
}
continue;
}
if(framePosition % 2352 == 0)
{
Console.Write("\r \r");
Console.WriteLine(Localization.FrameIsAtSectorBoundary, totalFrames);
}
Console.Write("\r \r");
fs.Position = framePosition; fs.Position = framePosition;
var frameBuffer = new byte[19600]; frameBuffer = new byte[19600];
fs.Read(frameBuffer, 0, frameBuffer.Length); fs.Read(frameBuffer, 0, frameBuffer.Length);
int audioStart = swapped ? 9 : 8; if(!swapped) frameBuffer = Swapping.SwapBuffer(frameBuffer);
byte[] frameMarkerToUse = swapped ? SwappedFrameMarker : FrameMarker;
if(!swapped) outFs = new MemoryStream();
frameBuffer = Swapping.SwapBuffer(frameBuffer);
var outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10) for(var i = 9; i <= frameBuffer.Length; i += 10)
{ {
@@ -106,116 +226,42 @@ namespace Aaru.VideoNow
outFs.WriteByte(frameBuffer[i]); outFs.WriteByte(frameBuffer[i]);
} }
byte[] videoFrame = DecodeFrame(frameBuffer); videoFrame = DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length); videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length); audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
var totalFrames = 1; totalFrames++;
fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
framePosition += 19600; framePosition += 19600;
var buffer = new byte[frameMarkerToUse.Length]; }
while(framePosition + 19600 < fs.Length) Console.Write("\r \r");
Console.WriteLine(Localization.FramesFound, totalFrames);
outFs.Close();
aviWriter.Close();
}
public static byte[] DecodeFrame(byte[] frameBuffer)
{
var progress = ' ';
var videoFs = new MemoryStream();
Array.Reverse(frameBuffer);
byte r, g, b;
var index = 1;
int indexBlock2;
for(var i = 0; i < 19200; i += 240)
{
for(var k = 0; k < 120; k += 10)
{ {
progress = (totalFrames % 4) switch for(var j = 1; j < 9; j += 3)
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.LookingForMoreFrames}", progress);
for(int ab = audioStart; ab < buffer.Length; ab += 10)
buffer[ab] = 0;
if(!buffer.SequenceEqual(frameMarkerToUse))
{ {
Console.Write("\r \r"); indexBlock2 = index + 120;
Console.WriteLine(Localization.FrameAndNextAreNotAligned, totalFrames);
long expectedFramePosition = framePosition;
while(framePosition < fs.Length) progress = (index / 10 % 4) switch
{
fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
for(int ab = audioStart; ab < buffer.Length; ab += 10)
buffer[ab] = 0;
if(buffer.SequenceEqual(frameMarkerToUse))
{
Console.Write("\r \r");
fs.Position = framePosition;
frameBuffer = new byte[19600];
fs.Read(frameBuffer, 0, frameBuffer.Length);
if(!swapped)
frameBuffer = Swapping.SwapBuffer(frameBuffer);
outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10)
{
progress = (i / 10 % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.ExtractingAudio}", progress);
outFs.WriteByte(frameBuffer[i]);
}
videoFrame = DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
totalFrames++;
Console.Write("\r \r");
Console.WriteLine(Localization.FrameFoundAtPosition, framePosition, totalFrames,
framePosition - expectedFramePosition);
Console.
WriteLine(framePosition % 2352 == 0 ? Localization.FrameIsAtSectorBoundary : Localization.FrameIsNotAtSectorBoundary,
totalFrames);
framePosition += 19600;
break;
}
framePosition++;
}
continue;
}
if(framePosition % 2352 == 0)
{
Console.Write("\r \r");
Console.WriteLine(Localization.FrameIsAtSectorBoundary, totalFrames);
}
Console.Write("\r \r");
fs.Position = framePosition;
frameBuffer = new byte[19600];
fs.Read(frameBuffer, 0, frameBuffer.Length);
if(!swapped)
frameBuffer = Swapping.SwapBuffer(frameBuffer);
outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10)
{
progress = (i / 10 % 4) switch
{ {
0 => '-', 0 => '-',
1 => '\\', 1 => '\\',
@@ -224,111 +270,57 @@ namespace Aaru.VideoNow
_ => progress _ => progress
}; };
Console.Write($"\r{Localization.ExtractingAudio}", progress); Console.Write($"\r{Localization.ExtractingVideo}", progress);
outFs.WriteByte(frameBuffer[i]); r = (byte)((frameBuffer[index] & 0xF0) + ((frameBuffer[index] & 0xF0) >> 4));
b = (byte)((frameBuffer[indexBlock2] & 0xF0) + ((frameBuffer[indexBlock2] & 0xF0) >> 4));
g = (byte)((frameBuffer[indexBlock2] & 0x0F) + ((frameBuffer[indexBlock2] & 0x0F) << 4));
videoFs.WriteByte(r);
videoFs.WriteByte(g);
videoFs.WriteByte(b);
r = (byte)((frameBuffer[indexBlock2 + 1] & 0xF0) + ((frameBuffer[indexBlock2 + 1] & 0xF0) >> 4));
b = (byte)((frameBuffer[index] & 0x0F) + ((frameBuffer[index] & 0x0F) << 4));
g = (byte)((frameBuffer[index + 1] & 0xF0) + ((frameBuffer[index + 1] & 0xF0) >> 4));
videoFs.WriteByte(r);
videoFs.WriteByte(g);
videoFs.WriteByte(b);
r = (byte)((frameBuffer[index + 1] & 0x0F) + ((frameBuffer[index + 1] & 0x0F) << 4));
b = (byte)((frameBuffer[indexBlock2 + 1] & 0x0F) + ((frameBuffer[indexBlock2 + 1] & 0x0F) << 4));
g = (byte)((frameBuffer[indexBlock2 + 2] & 0xF0) + ((frameBuffer[indexBlock2 + 2] & 0xF0) >> 4));
videoFs.WriteByte(r);
videoFs.WriteByte(g);
videoFs.WriteByte(b);
r = (byte)((frameBuffer[index + 120 + 2] & 0x0F) + ((frameBuffer[index + 120 + 2] & 0x0F) << 4));
b = (byte)((frameBuffer[index + 2] & 0xF0) + ((frameBuffer[index + 2] & 0xF0) >> 4));
g = (byte)((frameBuffer[index + 2] & 0x0F) + ((frameBuffer[index + 2] & 0x0F) << 4));
videoFs.WriteByte(r);
videoFs.WriteByte(g);
videoFs.WriteByte(b);
index += 3;
} }
videoFrame = DecodeFrame(frameBuffer); index += 1;
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
totalFrames++;
fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
framePosition += 19600;
} }
Console.Write("\r \r"); index += 120;
Console.WriteLine(Localization.FramesFound, totalFrames);
outFs.Close();
aviWriter.Close();
} }
public static byte[] DecodeFrame(byte[] frameBuffer) frameBuffer = new byte[videoFs.Length];
byte[] frameBuffer2 = videoFs.ToArray();
for(var row = 0; row < 80; row++)
{ {
var progress = ' '; for(var p = 0; p < 432; p++) frameBuffer[row * 432 + p] = frameBuffer2[row * 432 + (431 - p)];
var videoFs = new MemoryStream();
Array.Reverse(frameBuffer);
byte r, g, b;
var index = 1;
int indexBlock2;
for(var i = 0; i < 19200; i += 240)
{
for(var k = 0; k < 120; k += 10)
{
for(var j = 1; j < 9; j += 3)
{
indexBlock2 = index + 120;
progress = (index / 10 % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.ExtractingVideo}", progress);
r = (byte)((frameBuffer[index] & 0xF0) + ((frameBuffer[index] & 0xF0) >> 4));
b = (byte)((frameBuffer[indexBlock2] & 0xF0) + ((frameBuffer[indexBlock2] & 0xF0) >> 4));
g = (byte)((frameBuffer[indexBlock2] & 0x0F) + ((frameBuffer[indexBlock2] & 0x0F) << 4));
videoFs.WriteByte(r);
videoFs.WriteByte(g);
videoFs.WriteByte(b);
r = (byte)((frameBuffer[indexBlock2 + 1] & 0xF0) +
((frameBuffer[indexBlock2 + 1] & 0xF0) >> 4));
b = (byte)((frameBuffer[index] & 0x0F) + ((frameBuffer[index] & 0x0F) << 4));
g = (byte)((frameBuffer[index + 1] & 0xF0) + ((frameBuffer[index + 1] & 0xF0) >> 4));
videoFs.WriteByte(r);
videoFs.WriteByte(g);
videoFs.WriteByte(b);
r = (byte)((frameBuffer[index + 1] & 0x0F) + ((frameBuffer[index + 1] & 0x0F) << 4));
b = (byte)((frameBuffer[indexBlock2 + 1] & 0x0F) +
((frameBuffer[indexBlock2 + 1] & 0x0F) << 4));
g = (byte)((frameBuffer[indexBlock2 + 2] & 0xF0) +
((frameBuffer[indexBlock2 + 2] & 0xF0) >> 4));
videoFs.WriteByte(r);
videoFs.WriteByte(g);
videoFs.WriteByte(b);
r = (byte)((frameBuffer[index + 120 + 2] & 0x0F) +
((frameBuffer[index + 120 + 2] & 0x0F) << 4));
b = (byte)((frameBuffer[index + 2] & 0xF0) + ((frameBuffer[index + 2] & 0xF0) >> 4));
g = (byte)((frameBuffer[index + 2] & 0x0F) + ((frameBuffer[index + 2] & 0x0F) << 4));
videoFs.WriteByte(r);
videoFs.WriteByte(g);
videoFs.WriteByte(b);
index += 3;
}
index += 1;
}
index += 120;
}
frameBuffer = new byte[videoFs.Length];
byte[] frameBuffer2 = videoFs.ToArray();
for(var row = 0; row < 80; row++)
{
for(var p = 0; p < 432; p++)
frameBuffer[row * 432 + p] = frameBuffer2[row * 432 + (431 - p)];
}
return frameBuffer;
} }
return frameBuffer;
} }
} }

View File

@@ -37,178 +37,166 @@ using System.Reflection;
// ReSharper disable LocalizableElement // ReSharper disable LocalizableElement
namespace Aaru.VideoNow namespace Aaru.VideoNow;
static class MainClass
{ {
internal static class MainClass const int MAX_SIZE = 635040000;
static string _assemblyCopyright;
static string _assemblyTitle;
static AssemblyInformationalVersionAttribute _assemblyVersion;
static readonly byte[] FrameStart = [0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81];
static readonly byte[] SwappedFrameStart = [0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3];
public static void Main(string[] args)
{ {
const int MAX_SIZE = 635040000; object[] attributes = typeof(MainClass).Assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
static string _assemblyCopyright; _assemblyTitle = ((AssemblyTitleAttribute)attributes[0]).Title;
static string _assemblyTitle; attributes = typeof(MainClass).Assembly.GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
static AssemblyInformationalVersionAttribute _assemblyVersion;
static readonly byte[] FrameStart = _assemblyVersion =
[ Attribute.GetCustomAttribute(typeof(MainClass).Assembly, typeof(AssemblyInformationalVersionAttribute)) as
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81 AssemblyInformationalVersionAttribute;
];
static readonly byte[] SwappedFrameStart = _assemblyCopyright = ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
[
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3
];
public static void Main(string[] args) PrintCopyright();
if(args.Length != 1)
{ {
object[] attributes = typeof(MainClass).Assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false); Console.WriteLine(Localization.Usage);
_assemblyTitle = ((AssemblyTitleAttribute)attributes[0]).Title;
attributes = typeof(MainClass).Assembly.GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
_assemblyVersion = return;
Attribute.GetCustomAttribute(typeof(MainClass).Assembly, typeof(AssemblyInformationalVersionAttribute)) }
as AssemblyInformationalVersionAttribute;
_assemblyCopyright = ((AssemblyCopyrightAttribute)attributes[0]).Copyright; if(!File.Exists(args[0]))
{
Console.WriteLine(Localization.FileDoesNotExist);
PrintCopyright(); return;
}
if(args.Length != 1) FileStream fs;
try
{
fs = File.Open(args[0], FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch
{
Console.WriteLine(Localization.FileCannotBeOpened);
return;
}
if(fs.Length > MAX_SIZE)
{
Console.WriteLine(Localization.FileIsTooBig);
return;
}
Console.WriteLine(Localization.FileName, args[0]);
Console.WriteLine(Localization.SearchingFirstFrame);
long framePosition = 0;
var buffer = new byte[Color.FrameMarker.Length];
var swappedBuffer = new byte[Color.FrameMarker.Length];
var swapped = false;
var xp = false;
var startBuffer = new byte[FrameStart.Length];
var xpBuffer = new byte[Xp.FrameMarker.Length];
var xpSwappedBuffer = new byte[Xp.FrameMarker.Length];
while(framePosition < 19760)
{
fs.Position = framePosition;
fs.Read(startBuffer, 0, startBuffer.Length);
if(!startBuffer.SequenceEqual(FrameStart) && !startBuffer.SequenceEqual(SwappedFrameStart))
{ {
Console.WriteLine(Localization.Usage);
return;
}
if(!File.Exists(args[0]))
{
Console.WriteLine(Localization.FileDoesNotExist);
return;
}
FileStream fs;
try
{
fs = File.Open(args[0], FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch
{
Console.WriteLine(Localization.FileCannotBeOpened);
return;
}
if(fs.Length > MAX_SIZE)
{
Console.WriteLine(Localization.FileIsTooBig);
return;
}
Console.WriteLine(Localization.FileName, args[0]);
Console.WriteLine(Localization.SearchingFirstFrame);
long framePosition = 0;
var buffer = new byte[Color.FrameMarker.Length];
var swappedBuffer = new byte[Color.FrameMarker.Length];
var swapped = false;
var xp = false;
var startBuffer = new byte[FrameStart.Length];
var xpBuffer = new byte[Xp.FrameMarker.Length];
var xpSwappedBuffer = new byte[Xp.FrameMarker.Length];
while(framePosition < 19760)
{
fs.Position = framePosition;
fs.Read(startBuffer, 0, startBuffer.Length);
if(!startBuffer.SequenceEqual(FrameStart) &&
!startBuffer.SequenceEqual(SwappedFrameStart))
{
framePosition++;
continue;
}
fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
for(var ab = 8; ab < buffer.Length; ab += 10)
buffer[ab] = 0;
if(buffer.SequenceEqual(Color.FrameMarker))
break;
fs.Position = framePosition;
fs.Read(swappedBuffer, 0, swappedBuffer.Length);
for(var ab = 9; ab < swappedBuffer.Length; ab += 10)
swappedBuffer[ab] = 0;
if(swappedBuffer.SequenceEqual(Color.SwappedFrameMarker))
{
swapped = true;
break;
}
fs.Position = framePosition;
fs.Read(xpBuffer, 0, xpBuffer.Length);
for(var i = 0; i < xpBuffer.Length; i++)
xpBuffer[i] &= Xp.FrameMask[i];
if(xpBuffer.SequenceEqual(Xp.FrameMarker))
{
xp = true;
break;
}
fs.Position = framePosition;
fs.Read(xpSwappedBuffer, 0, xpSwappedBuffer.Length);
for(var i = 0; i < xpSwappedBuffer.Length; i++)
xpSwappedBuffer[i] &= Xp.SwappedFrameMask[i];
if(xpSwappedBuffer.SequenceEqual(Xp.SwappedFrameMarker))
{
swapped = true;
xp = true;
break;
}
framePosition++; framePosition++;
continue;
} }
if(!buffer.SequenceEqual(Color.FrameMarker) && fs.Position = framePosition;
!swappedBuffer.SequenceEqual(Color.SwappedFrameMarker) && fs.Read(buffer, 0, buffer.Length);
!xpBuffer.SequenceEqual(Xp.FrameMarker) &&
!xpSwappedBuffer.SequenceEqual(Xp.SwappedFrameMarker)) for(var ab = 8; ab < buffer.Length; ab += 10) buffer[ab] = 0;
if(buffer.SequenceEqual(Color.FrameMarker)) break;
fs.Position = framePosition;
fs.Read(swappedBuffer, 0, swappedBuffer.Length);
for(var ab = 9; ab < swappedBuffer.Length; ab += 10) swappedBuffer[ab] = 0;
if(swappedBuffer.SequenceEqual(Color.SwappedFrameMarker))
{ {
Console.WriteLine(Localization.NoFrameFound); swapped = true;
return; break;
} }
Console.WriteLine(Localization.FirstFrameFoundAt, framePosition); fs.Position = framePosition;
fs.Read(xpBuffer, 0, xpBuffer.Length);
Console.WriteLine(framePosition % 2352 == 0 ? Localization.FirstFrameIsAtSectorBoundary for(var i = 0; i < xpBuffer.Length; i++) xpBuffer[i] &= Xp.FrameMask[i];
: Localization.FirstFrameIsNotAtSectorBoundary);
if(xp) if(xpBuffer.SequenceEqual(Xp.FrameMarker))
Xp.Decode(args[0], fs, swapped, framePosition); {
else xp = true;
Color.Decode(args[0], fs, swapped, framePosition);
fs.Close(); break;
}
fs.Position = framePosition;
fs.Read(xpSwappedBuffer, 0, xpSwappedBuffer.Length);
for(var i = 0; i < xpSwappedBuffer.Length; i++) xpSwappedBuffer[i] &= Xp.SwappedFrameMask[i];
if(xpSwappedBuffer.SequenceEqual(Xp.SwappedFrameMarker))
{
swapped = true;
xp = true;
break;
}
framePosition++;
} }
static void PrintCopyright() if(!buffer.SequenceEqual(Color.FrameMarker) &&
!swappedBuffer.SequenceEqual(Color.SwappedFrameMarker) &&
!xpBuffer.SequenceEqual(Xp.FrameMarker) &&
!xpSwappedBuffer.SequenceEqual(Xp.SwappedFrameMarker))
{ {
Console.WriteLine("{0} {1}", _assemblyTitle, _assemblyVersion?.InformationalVersion); Console.WriteLine(Localization.NoFrameFound);
Console.WriteLine("{0}", _assemblyCopyright);
Console.WriteLine(); return;
} }
Console.WriteLine(Localization.FirstFrameFoundAt, framePosition);
Console.WriteLine(framePosition % 2352 == 0
? Localization.FirstFrameIsAtSectorBoundary
: Localization.FirstFrameIsNotAtSectorBoundary);
if(xp)
Xp.Decode(args[0], fs, swapped, framePosition);
else
Color.Decode(args[0], fs, swapped, framePosition);
fs.Close();
}
static void PrintCopyright()
{
Console.WriteLine("{0} {1}", _assemblyTitle, _assemblyVersion?.InformationalVersion);
Console.WriteLine("{0}", _assemblyCopyright);
Console.WriteLine();
} }
} }

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Uso: Aaru.VideoNow dump.raw</value> <value>Uso: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>El archivo especificado no existe.</value> <value>El archivo especificado no existe.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>No se pudo abrir el archivo especificado.</value> <value>No se pudo abrir el archivo especificado.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>El archivo es demasiado grande, no se puede continuar.</value> <value>El archivo es demasiado grande, no se puede continuar.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>Archivo: {0}</value> <value>Archivo: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Buscando el primer fotograma....</value> <value>Buscando el primer fotograma....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>¡No se pudo encontrar ningún fotograma!</value> <value>¡No se pudo encontrar ningún fotograma!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Se encontró el primer fotograma en {0}</value> <value>Se encontró el primer fotograma en {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>El primer fotograma está al comienzo de un sector</value> <value>El primer fotograma está al comienzo de un sector</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>El primer fotograma no está al comienzo de un sector</value> <value>El primer fotograma no está al comienzo de un sector</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Extrayendo sonido {0} </value> <value>Extrayendo sonido {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Buscando más fotogramas {0}</value> <value>Buscando más fotogramas {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>El fotograma {0} y el siguiente no están alineados...</value> <value>El fotograma {0} y el siguiente no están alineados...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Fotograma {1} encontrado en {0}, separado por {2} bytes</value> <value>Fotograma {1} encontrado en {0}, separado por {2} bytes</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>El fotograma {0} está al comienzo de un sector</value> <value>El fotograma {0} está al comienzo de un sector</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>El fotograma {0} no está al comienzo de un sector</value> <value>El fotograma {0} no está al comienzo de un sector</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>Encontrados {0} fotogramas</value> <value>Encontrados {0} fotogramas</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Extrayendo video {0} </value> <value>Extrayendo video {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Usage: Aaru.VideoNow dump.raw</value> <value>Usage: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>Le fichier spécifié n'existe pas.</value> <value>Le fichier spécifié n'existe pas.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Impossible d'ouvrir le fichier spécifié.</value> <value>Impossible d'ouvrir le fichier spécifié.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>Le fichier est trop grand, ne peut pas continuer.</value> <value>Le fichier est trop grand, ne peut pas continuer.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>Fichier: {0}</value> <value>Fichier: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Cherchant le premier cadre....</value> <value>Cherchant le premier cadre....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Aucun cadre trouvé!</value> <value>Aucun cadre trouvé!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Premier cadre trouvé à {0}</value> <value>Premier cadre trouvé à {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>Premier cadre est à la limite du secteur</value> <value>Premier cadre est à la limite du secteur</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Premier cadre n'est pas à la limite du secteur</value> <value>Premier cadre n'est pas à la limite du secteur</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Extraire l'audio {0} </value> <value>Extraire l'audio {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Vous cherchez plus de cadres {0}</value> <value>Vous cherchez plus de cadres {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Cadre {0} et le suivant ne sont pas alignés...</value> <value>Cadre {0} et le suivant ne sont pas alignés...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Cadre {1} trouvé à {0}, {2} bytes apart</value> <value>Cadre {1} trouvé à {0}, {2} bytes apart</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Cadre {0} est à la limite du secteur</value> <value>Cadre {0} est à la limite du secteur</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Cadre {0} n'est pas à la limite du secteur</value> <value>Cadre {0} n'est pas à la limite du secteur</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>{0} cadres trouvés</value> <value>{0} cadres trouvés</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Extraire la vidéo {0} </value> <value>Extraire la vidéo {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Utilizzo: Aaru.VideoNow dump.raw</value> <value>Utilizzo: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>Il file specificato non esiste.</value> <value>Il file specificato non esiste.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Impossible aprire il file specificato.</value> <value>Impossible aprire il file specificato.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>File troppo grande, impossibile continuare.</value> <value>File troppo grande, impossibile continuare.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>File: {0}</value> <value>File: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Ricerca primo fotogramma....</value> <value>Ricerca primo fotogramma....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Nessun fotogramma trovato!</value> <value>Nessun fotogramma trovato!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Primo fotogramma trovato a {0}</value> <value>Primo fotogramma trovato a {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>Primo fotogramma al confine del settore</value> <value>Primo fotogramma al confine del settore</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Primo fotogramma non al confine del settore</value> <value>Primo fotogramma non al confine del settore</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Estrazione audio {0} </value> <value>Estrazione audio {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Buscando más fotogramas {0}</value> <value>Buscando más fotogramas {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Fotogramma {0} e il successivo non allineati...</value> <value>Fotogramma {0} e il successivo non allineati...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Fotogramma {1} trovato a {0}, dopo {2} bytes</value> <value>Fotogramma {1} trovato a {0}, dopo {2} bytes</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Fotogramma {0} al confine del settore</value> <value>Fotogramma {0} al confine del settore</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Fotogramma {0} non al confine del settore</value> <value>Fotogramma {0} non al confine del settore</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>Trovati {0} fotogrammi</value> <value>Trovati {0} fotogrammi</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Estrazione video {0} </value> <value>Estrazione video {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Usage: Aaru.VideoNow dump.raw</value> <value>Usage: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>Opgegeven bestand kan niet worden gevonden.</value> <value>Opgegeven bestand kan niet worden gevonden.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Kon opgegeven bestand niet openen.</value> <value>Kon opgegeven bestand niet openen.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>Bestand is te groot, afgebroken.</value> <value>Bestand is te groot, afgebroken.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>Bestand: {0}</value> <value>Bestand: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Eerste frame aan het zoeken....</value> <value>Eerste frame aan het zoeken....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Geen frame gevonden!</value> <value>Geen frame gevonden!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Eerste frame gevonden op {0}</value> <value>Eerste frame gevonden op {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>Eerste frame is op een sector-grens</value> <value>Eerste frame is op een sector-grens</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Eerste frame is niet op een sector-grens</value> <value>Eerste frame is niet op een sector-grens</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Uitlezen van audio-data {0} </value> <value>Uitlezen van audio-data {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Zoekend naar (nog meer) frames {0}</value> <value>Zoekend naar (nog meer) frames {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Frame {0} en het volgende frame zijn niet aan elkaar gebonden...</value> <value>Frame {0} en het volgende frame zijn niet aan elkaar gebonden...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Frame {1} gevonden op {0}, {2} bytes van elkaar verwijderd</value> <value>Frame {1} gevonden op {0}, {2} bytes van elkaar verwijderd</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Frame {0} is op een sector-grens</value> <value>Frame {0} is op een sector-grens</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Frame {0} is niet op een sector-grens</value> <value>Frame {0} is niet op een sector-grens</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>{0} Frames gevonden</value> <value>{0} Frames gevonden</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Uitlezen van video-data {0} </value> <value>Uitlezen van video-data {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Utilização: Aaru.VideoNow dump.raw</value> <value>Utilização: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>O ficheiro especificado não existe.</value> <value>O ficheiro especificado não existe.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Não conseguiu abrir o ficheiro especificado.</value> <value>Não conseguiu abrir o ficheiro especificado.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>Ficheiro é demasiado grande, não continuando.</value> <value>Ficheiro é demasiado grande, não continuando.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>Ficheiro: {0}</value> <value>Ficheiro: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Procurando primeiro frame....</value> <value>Procurando primeiro frame....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Não conseguiu encontrar nenhum frame!</value> <value>Não conseguiu encontrar nenhum frame!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Primeiro frame encontrado em {0}</value> <value>Primeiro frame encontrado em {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>Primeiro frame está numa fronteira de setor</value> <value>Primeiro frame está numa fronteira de setor</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Primeiro frame não está numa fronteira de setor</value> <value>Primeiro frame não está numa fronteira de setor</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Extraindo aúdio {0} </value> <value>Extraindo aúdio {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Procurando mais frames {0}</value> <value>Procurando mais frames {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Frame {0} e o seguinte não estão alinhados...</value> <value>Frame {0} e o seguinte não estão alinhados...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Frame {1} encontrado em {0}, distância de {2} bytes</value> <value>Frame {1} encontrado em {0}, distância de {2} bytes</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Frame {1} encontrado em {0}, distância de {2} bytes</value> <value>Frame {1} encontrado em {0}, distância de {2} bytes</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Frame {0} não está numa fronteira de setor</value> <value>Frame {0} não está numa fronteira de setor</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>Encontrados {0} fotogramas</value> <value>Encontrados {0} fotogramas</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Extraindo vídeo {0} </value> <value>Extraindo vídeo {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Utilização: Aaru.VideoNow dump.raw</value> <value>Utilização: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>O ficheiro especificado não existe.</value> <value>O ficheiro especificado não existe.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Não conseguiu abrir o ficheiro especificado.</value> <value>Não conseguiu abrir o ficheiro especificado.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>Ficheiro é demasiado grande, não continuando.</value> <value>Ficheiro é demasiado grande, não continuando.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>Ficheiro: {0}</value> <value>Ficheiro: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Procurando primeiro frame....</value> <value>Procurando primeiro frame....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Não conseguiu encontrar nenhum frame!</value> <value>Não conseguiu encontrar nenhum frame!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Primeiro frame encontrado em {0}</value> <value>Primeiro frame encontrado em {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>Primeiro frame está numa fronteira de setor</value> <value>Primeiro frame está numa fronteira de setor</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Primeiro frame não está numa fronteira de setor</value> <value>Primeiro frame não está numa fronteira de setor</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Extraindo aúdio {0} </value> <value>Extraindo aúdio {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Procurando mais frames {0}</value> <value>Procurando mais frames {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Frame {0} e o seguinte não estão alinhados...</value> <value>Frame {0} e o seguinte não estão alinhados...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Frame {1} encontrado em {0}, distância de {2} bytes</value> <value>Frame {1} encontrado em {0}, distância de {2} bytes</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Frame {1} encontrado em {0}, distância de {2} bytes</value> <value>Frame {1} encontrado em {0}, distância de {2} bytes</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Frame {0} não está numa fronteira de setor</value> <value>Frame {0} não está numa fronteira de setor</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>Encontrados {0} fotogramas</value> <value>Encontrados {0} fotogramas</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Extraindo vídeo {0} </value> <value>Extraindo vídeo {0} </value>
</data> </data>
</root> </root>

View File

@@ -59,73 +59,78 @@
--> -->
<root> <root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"></xsd:element> xmlns="">
</xsd:schema> <xsd:element name="root" msdata:IsDataSet="true"></xsd:element>
<resheader name="resmimetype"> </xsd:schema>
<value>text/microsoft-resx</value> <resheader name="resmimetype">
</resheader> <value>text/microsoft-resx</value>
<resheader name="version"> </resheader>
<value>1.3</value> <resheader name="version">
</resheader> <value>1.3</value>
<resheader name="reader"> </resheader>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <resheader name="reader">
</resheader> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
<resheader name="writer"> PublicKeyToken=b77a5c561934e089
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </value>
</resheader> </resheader>
<data name="Usage" xml:space="preserve"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Usage: Aaru.VideoNow dump.raw</value> <value>Usage: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>Specified file does not exist.</value> <value>Specified file does not exist.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Could not open specified file.</value> <value>Could not open specified file.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>File is too big, not continuing.</value> <value>File is too big, not continuing.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>File: {0}</value> <value>File: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Searching for first frame....</value> <value>Searching for first frame....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Could not find any frame!</value> <value>Could not find any frame!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>First frame found at {0}</value> <value>First frame found at {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>First frame is at a sector boundary</value> <value>First frame is at a sector boundary</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>First frame is not at a sector boundary</value> <value>First frame is not at a sector boundary</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Extracting audio {0} </value> <value>Extracting audio {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Looking for more frames {0}</value> <value>Looking for more frames {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Frame {0} and the next one are not aligned...</value> <value>Frame {0} and the next one are not aligned...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Frame {1} found at {0}, {2} bytes apart</value> <value>Frame {1} found at {0}, {2} bytes apart</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Frame {0} is at a sector boundary</value> <value>Frame {0} is at a sector boundary</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Frame {0} is not at a sector boundary</value> <value>Frame {0} is not at a sector boundary</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>Found {0} frames</value> <value>Found {0} frames</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Extracting video {0} </value> <value>Extracting video {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Folosire: Aaru.VideoNow dump.raw</value> <value>Folosire: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>Fișierul specificat nu există.</value> <value>Fișierul specificat nu există.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Fișierul specificat nu poate fi deschis.</value> <value>Fișierul specificat nu poate fi deschis.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>Fișierul este prea mare, imposibil de continuat.</value> <value>Fișierul este prea mare, imposibil de continuat.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>Fișier: {0}</value> <value>Fișier: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Caut primul cadru....</value> <value>Caut primul cadru....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Nu am putut găsi nici un cadru!</value> <value>Nu am putut găsi nici un cadru!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Primul cardu a fost găsit la {0}</value> <value>Primul cardu a fost găsit la {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>Primul cadru este la limita sectorului</value> <value>Primul cadru este la limita sectorului</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Primul cadru nu este la limita sectorului</value> <value>Primul cadru nu este la limita sectorului</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Extrag audio {0} </value> <value>Extrag audio {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Caut mai multe cardre {0}</value> <value>Caut mai multe cardre {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Cadrul {0} și următorul nu sunt aliniate...</value> <value>Cadrul {0} și următorul nu sunt aliniate...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Cadrul {1} găsit la {0}, {2} bytes distanta</value> <value>Cadrul {1} găsit la {0}, {2} bytes distanta</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Cadrul {0} este la limita sectorului</value> <value>Cadrul {0} este la limita sectorului</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Cadrul nu este la limita secorului</value> <value>Cadrul nu este la limita secorului</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>{0} cadre găsite</value> <value>{0} cadre găsite</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Extrag video {0} </value> <value>Extrag video {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Использование: Aaru.VideoNow dump.raw</value> <value>Использование: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>Указанный файл не существует.</value> <value>Указанный файл не существует.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Невозможно открыть указанный файл.</value> <value>Невозможно открыть указанный файл.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>Файл слишком большой, операция прекращена.</value> <value>Файл слишком большой, операция прекращена.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>Файл: {0}</value> <value>Файл: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Поиск первого фрейма....</value> <value>Поиск первого фрейма....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Невозможно найти ни один фрейм!</value> <value>Невозможно найти ни один фрейм!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Первый фрейм найден по смещению {0}</value> <value>Первый фрейм найден по смещению {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>Первый фрейм на границе сектора</value> <value>Первый фрейм на границе сектора</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Первый фрейм не на границе сектора</value> <value>Первый фрейм не на границе сектора</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Извлечение аудио {0} </value> <value>Извлечение аудио {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Продолжение поиска фреймов {0}</value> <value>Продолжение поиска фреймов {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Фрейм {0} и следующий за ним не выровнены...</value> <value>Фрейм {0} и следующий за ним не выровнены...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Фрейм {1} найден по смещению {0}, на расстоянии {2} байт</value> <value>Фрейм {1} найден по смещению {0}, на расстоянии {2} байт</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Фрейм {0} на границе сектора</value> <value>Фрейм {0} на границе сектора</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Фрейм {0} не на границе сектора</value> <value>Фрейм {0} не на границе сектора</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>Найдено {0} фреймов</value> <value>Найдено {0} фреймов</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Извлечение видео {0} </value> <value>Извлечение видео {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,155 +1,160 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 1.3 Version 1.3
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader> <resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data> <data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object] [base64 mime encoded serialized .NET Framework object]
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object]
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"
<xsd:element name="root" msdata:IsDataSet="true"> xmlns="">
<xsd:complexType> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:choice maxOccurs="unbounded">
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="data">
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:complexType>
</xsd:sequence> <xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> </xsd:schema>
<xsd:complexType> <resheader name="resmimetype">
<xsd:sequence> <value>text/microsoft-resx</value>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </resheader>
</xsd:sequence> <resheader name="version">
<xsd:attribute name="name" type="xsd:string" use="required" /> <value>1.3</value>
</xsd:complexType> </resheader>
</xsd:element> <resheader name="reader">
</xsd:choice> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</xsd:complexType> PublicKeyToken=b77a5c561934e089
</xsd:element> </value>
</xsd:schema> </resheader>
<resheader name="resmimetype"> <resheader name="writer">
<value>text/microsoft-resx</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral,
</resheader> PublicKeyToken=b77a5c561934e089
<resheader name="version"> </value>
<value>1.3</value> </resheader>
</resheader> <data name="Usage" xml:space="preserve">
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Usage" xml:space="preserve">
<value>Användning: Aaru.VideoNow dump.raw</value> <value>Användning: Aaru.VideoNow dump.raw</value>
</data> </data>
<data name="FileDoesNotExist" xml:space="preserve"> <data name="FileDoesNotExist" xml:space="preserve">
<value>Angivna filen finns inte.</value> <value>Angivna filen finns inte.</value>
</data> </data>
<data name="FileCannotBeOpened" xml:space="preserve"> <data name="FileCannotBeOpened" xml:space="preserve">
<value>Kunde inte öppna den angivna filen.</value> <value>Kunde inte öppna den angivna filen.</value>
</data> </data>
<data name="FileIsTooBig" xml:space="preserve"> <data name="FileIsTooBig" xml:space="preserve">
<value>Filen är för stor, avbryter.</value> <value>Filen är för stor, avbryter.</value>
</data> </data>
<data name="FileName" xml:space="preserve"> <data name="FileName" xml:space="preserve">
<value>Fil: {0}</value> <value>Fil: {0}</value>
</data> </data>
<data name="SearchingFirstFrame" xml:space="preserve"> <data name="SearchingFirstFrame" xml:space="preserve">
<value>Söker efter första bilden....</value> <value>Söker efter första bilden....</value>
</data> </data>
<data name="NoFrameFound" xml:space="preserve"> <data name="NoFrameFound" xml:space="preserve">
<value>Kunde inte hitta några bilder!</value> <value>Kunde inte hitta några bilder!</value>
</data> </data>
<data name="FirstFrameFoundAt" xml:space="preserve"> <data name="FirstFrameFoundAt" xml:space="preserve">
<value>Första bilden hittad på {0}</value> <value>Första bilden hittad på {0}</value>
</data> </data>
<data name="FirstFrameIsAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsAtSectorBoundary" xml:space="preserve">
<value>Första bilden funnen vid en sektorgräns</value> <value>Första bilden funnen vid en sektorgräns</value>
</data> </data>
<data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FirstFrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Första bilden finns ej vid en sektorgräns</value> <value>Första bilden finns ej vid en sektorgräns</value>
</data> </data>
<data name="ExtractingAudio" xml:space="preserve"> <data name="ExtractingAudio" xml:space="preserve">
<value>Extraherar audio {0} </value> <value>Extraherar audio {0} </value>
</data> </data>
<data name="LookingForMoreFrames" xml:space="preserve"> <data name="LookingForMoreFrames" xml:space="preserve">
<value>Letar efter fler bilder {0}</value> <value>Letar efter fler bilder {0}</value>
</data> </data>
<data name="FrameAndNextAreNotAligned" xml:space="preserve"> <data name="FrameAndNextAreNotAligned" xml:space="preserve">
<value>Bild {0} och efterföljade bild är inte inriktad...</value> <value>Bild {0} och efterföljade bild är inte inriktad...</value>
</data> </data>
<data name="FrameFoundAtPosition" xml:space="preserve"> <data name="FrameFoundAtPosition" xml:space="preserve">
<value>Bild {1} funnen på {0}, {2} bytes från varandra</value> <value>Bild {1} funnen på {0}, {2} bytes från varandra</value>
</data> </data>
<data name="FrameIsAtSectorBoundary" xml:space="preserve"> <data name="FrameIsAtSectorBoundary" xml:space="preserve">
<value>Bild {0} funnen vid en sektorgräns</value> <value>Bild {0} funnen vid en sektorgräns</value>
</data> </data>
<data name="FrameIsNotAtSectorBoundary" xml:space="preserve"> <data name="FrameIsNotAtSectorBoundary" xml:space="preserve">
<value>Bild {0} finns ej vid en sektorgräns</value> <value>Bild {0} finns ej vid en sektorgräns</value>
</data> </data>
<data name="FramesFound" xml:space="preserve"> <data name="FramesFound" xml:space="preserve">
<value>{0} bilder funna</value> <value>{0} bilder funna</value>
</data> </data>
<data name="ExtractingVideo" xml:space="preserve"> <data name="ExtractingVideo" xml:space="preserve">
<value>Extraherar video {0} </value> <value>Extraherar video {0} </value>
</data> </data>
</root> </root>

View File

@@ -1,18 +1,17 @@
namespace Aaru.VideoNow namespace Aaru.VideoNow;
public static class Swapping
{ {
public static class Swapping public static byte[] SwapBuffer(byte[] buffer)
{ {
public static byte[] SwapBuffer(byte[] buffer) var tmp = new byte[buffer.Length];
for(var i = 0; i < buffer.Length; i += 2)
{ {
var tmp = new byte[buffer.Length]; tmp[i] = buffer[i + 1];
tmp[i + 1] = buffer[i];
for(var i = 0; i < buffer.Length; i += 2)
{
tmp[i] = buffer[i + 1];
tmp[i + 1] = buffer[i];
}
return tmp;
} }
return tmp;
} }
} }

View File

@@ -4,179 +4,299 @@ using System.Linq;
using SharpAvi; using SharpAvi;
using SharpAvi.Output; using SharpAvi.Output;
namespace Aaru.VideoNow namespace Aaru.VideoNow;
public static class Xp
{ {
public static class Xp public static readonly byte[] FrameMask =
[
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00
];
public static readonly byte[] SwappedFrameMask =
[
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF
];
public static readonly byte[] FrameMarker =
[
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3,
0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00,
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3,
0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00,
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00
];
public static readonly byte[] SwappedFrameMarker =
[
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81,
0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7,
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81,
0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7,
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF
];
public static void Decode(string filename, Stream fs, bool swapped, long framePosition)
{ {
public static readonly byte[] FrameMask = var progress = ' ';
[
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00
];
public static readonly byte[] SwappedFrameMask = var aviWriter = new AviWriter(filename + ".avi")
[
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF
];
public static readonly byte[] FrameMarker =
[
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3,
0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00,
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7,
0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3,
0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00,
0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3,
0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81, 0x81, 0xE3, 0xC7, 0x00, 0x81, 0xE3, 0xE3, 0xC7, 0xC7, 0x81,
0x81, 0xE3, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x00
];
public static readonly byte[] SwappedFrameMarker =
[
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81,
0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7,
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3,
0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81,
0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7,
0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81,
0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0x00, 0xC7, 0xE3, 0x81, 0xC7, 0xE3, 0x81, 0xC7,
0xE3, 0x81, 0x00, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF
];
public static void Decode(string filename, Stream fs, bool swapped, long framePosition)
{ {
var progress = ' '; EmitIndex1 = true, FramesPerSecond = 18
};
var aviWriter = new AviWriter(filename + ".avi") IAviVideoStream videoStream = aviWriter.AddVideoStream(144, 80, BitsPerPixel.Bpp24);
videoStream.Codec = CodecIds.Uncompressed;
IAviAudioStream audioStream = aviWriter.AddAudioStream(2, 17784, 8);
fs.Position = framePosition;
var frameBuffer = new byte[19760];
fs.Read(frameBuffer, 0, frameBuffer.Length);
int audioStart = swapped ? 9 : 8;
byte[] frameMarkerToUse = swapped ? SwappedFrameMarker : FrameMarker;
byte[] frameMaskToUse = swapped ? SwappedFrameMask : FrameMask;
if(swapped) frameBuffer = Swapping.SwapBuffer(frameBuffer);
var outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10)
{
progress = (i / 10 % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.ExtractingAudio}", progress);
outFs.WriteByte(frameBuffer[i]);
}
byte[] videoFrame = Color.DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
var totalFrames = 1;
framePosition += 19760;
var buffer = new byte[frameMarkerToUse.Length];
while(framePosition + 19760 < fs.Length)
{
progress = (totalFrames % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.LookingForMoreFrames}", progress);
for(var i = 0; i < buffer.Length; i++) buffer[i] &= frameMaskToUse[i];
if(!buffer.SequenceEqual(frameMarkerToUse))
{ {
EmitIndex1 = true, FramesPerSecond = 18 Console.Write("\r \r");
}; Console.WriteLine(Localization.FrameAndNextAreNotAligned, totalFrames);
long expectedFramePosition = framePosition;
IAviVideoStream videoStream = aviWriter.AddVideoStream(144, 80, BitsPerPixel.Bpp24); while(framePosition < fs.Length)
videoStream.Codec = CodecIds.Uncompressed; {
IAviAudioStream audioStream = aviWriter.AddAudioStream(2, 17784, 8); fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
for(var i = 0; i < buffer.Length; i++) buffer[i] &= frameMaskToUse[i];
if(buffer.SequenceEqual(frameMarkerToUse))
{
Console.Write("\r \r");
fs.Position = framePosition;
frameBuffer = new byte[19760];
fs.Read(frameBuffer, 0, frameBuffer.Length);
if(swapped) frameBuffer = Swapping.SwapBuffer(frameBuffer);
outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10)
{
progress = (i / 10 % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.ExtractingAudio}", progress);
outFs.WriteByte(frameBuffer[i]);
}
videoFrame = Color.DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
totalFrames++;
Console.Write("\r \r");
Console.WriteLine(Localization.FrameFoundAtPosition,
framePosition,
totalFrames,
framePosition - expectedFramePosition);
Console.WriteLine(framePosition % 2352 == 0
? Localization.FrameIsAtSectorBoundary
: Localization.FrameIsNotAtSectorBoundary,
totalFrames);
framePosition += 19760;
break;
}
framePosition++;
}
continue;
}
if(framePosition % 2352 == 0)
{
Console.Write("\r \r");
Console.WriteLine(Localization.FrameIsAtSectorBoundary, totalFrames);
}
Console.Write("\r \r");
fs.Position = framePosition; fs.Position = framePosition;
var frameBuffer = new byte[19760]; frameBuffer = new byte[19760];
fs.Read(frameBuffer, 0, frameBuffer.Length); fs.Read(frameBuffer, 0, frameBuffer.Length);
int audioStart = swapped ? 9 : 8; if(swapped) frameBuffer = Swapping.SwapBuffer(frameBuffer);
byte[] frameMarkerToUse = swapped ? SwappedFrameMarker : FrameMarker;
byte[] frameMaskToUse = swapped ? SwappedFrameMask : FrameMask;
if(swapped) outFs = new MemoryStream();
frameBuffer = Swapping.SwapBuffer(frameBuffer);
var outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10) for(var i = 9; i <= frameBuffer.Length; i += 10)
{ {
@@ -193,143 +313,20 @@ namespace Aaru.VideoNow
outFs.WriteByte(frameBuffer[i]); outFs.WriteByte(frameBuffer[i]);
} }
byte[] videoFrame = Color.DecodeFrame(frameBuffer); videoFrame = Color.DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length); videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length); audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
var totalFrames = 1; totalFrames++;
fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
framePosition += 19760; framePosition += 19760;
var buffer = new byte[frameMarkerToUse.Length];
while(framePosition + 19760 < fs.Length)
{
progress = (totalFrames % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.LookingForMoreFrames}", progress);
for(var i = 0; i < buffer.Length; i++)
buffer[i] &= frameMaskToUse[i];
if(!buffer.SequenceEqual(frameMarkerToUse))
{
Console.Write("\r \r");
Console.WriteLine(Localization.FrameAndNextAreNotAligned, totalFrames);
long expectedFramePosition = framePosition;
while(framePosition < fs.Length)
{
fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
for(var i = 0; i < buffer.Length; i++)
buffer[i] &= frameMaskToUse[i];
if(buffer.SequenceEqual(frameMarkerToUse))
{
Console.Write("\r \r");
fs.Position = framePosition;
frameBuffer = new byte[19760];
fs.Read(frameBuffer, 0, frameBuffer.Length);
if(swapped)
frameBuffer = Swapping.SwapBuffer(frameBuffer);
outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10)
{
progress = (i / 10 % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.ExtractingAudio}", progress);
outFs.WriteByte(frameBuffer[i]);
}
videoFrame = Color.DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
totalFrames++;
Console.Write("\r \r");
Console.WriteLine(Localization.FrameFoundAtPosition, framePosition, totalFrames,
framePosition - expectedFramePosition);
Console.
WriteLine(framePosition % 2352 == 0 ? Localization.FrameIsAtSectorBoundary : Localization.FrameIsNotAtSectorBoundary,
totalFrames);
framePosition += 19760;
break;
}
framePosition++;
}
continue;
}
if(framePosition % 2352 == 0)
{
Console.Write("\r \r");
Console.WriteLine(Localization.FrameIsAtSectorBoundary, totalFrames);
}
Console.Write("\r \r");
fs.Position = framePosition;
frameBuffer = new byte[19760];
fs.Read(frameBuffer, 0, frameBuffer.Length);
if(swapped)
frameBuffer = Swapping.SwapBuffer(frameBuffer);
outFs = new MemoryStream();
for(var i = 9; i <= frameBuffer.Length; i += 10)
{
progress = (i / 10 % 4) switch
{
0 => '-',
1 => '\\',
2 => '|',
3 => '/',
_ => progress
};
Console.Write($"\r{Localization.ExtractingAudio}", progress);
outFs.WriteByte(frameBuffer[i]);
}
videoFrame = Color.DecodeFrame(frameBuffer);
videoStream.WriteFrame(true, videoFrame, 0, videoFrame.Length);
audioStream.WriteBlock(outFs.ToArray(), 0, (int)outFs.Length);
totalFrames++;
fs.Position = framePosition;
fs.Read(buffer, 0, buffer.Length);
framePosition += 19760;
}
Console.Write("\r \r");
Console.WriteLine(Localization.FramesFound, totalFrames);
outFs.Close();
aviWriter.Close();
} }
Console.Write("\r \r");
Console.WriteLine(Localization.FramesFound, totalFrames);
outFs.Close();
aviWriter.Close();
} }
} }