mirror of
https://github.com/aaru-dps/Aaru.VideoNow.git
synced 2025-12-16 19:24:36 +00:00
Support already endian swapped images.
This commit is contained in:
@@ -77,6 +77,33 @@ namespace DiscImageChef.VideoNow
|
|||||||
0xFF, 0xFF, 0x00, 0xFF
|
0xFF, 0xFF, 0x00, 0xFF
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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 Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
object[] attributes = typeof(MainClass).Assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
|
object[] attributes = typeof(MainClass).Assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
|
||||||
@@ -130,6 +157,8 @@ namespace DiscImageChef.VideoNow
|
|||||||
|
|
||||||
long framePosition = 0;
|
long framePosition = 0;
|
||||||
byte[] buffer = new byte[FrameMarker.Length];
|
byte[] buffer = new byte[FrameMarker.Length];
|
||||||
|
byte[] swappedBuffer = new byte[FrameMarker.Length];
|
||||||
|
bool swapped = false;
|
||||||
|
|
||||||
while(framePosition < 19600)
|
while(framePosition < 19600)
|
||||||
{
|
{
|
||||||
@@ -142,13 +171,30 @@ namespace DiscImageChef.VideoNow
|
|||||||
if(buffer.SequenceEqual(FrameMarker))
|
if(buffer.SequenceEqual(FrameMarker))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
fs.Position = framePosition;
|
||||||
|
fs.Read(swappedBuffer, 0, swappedBuffer.Length);
|
||||||
|
|
||||||
|
for(int ab = 9; ab < swappedBuffer.Length; ab += 10)
|
||||||
|
swappedBuffer[ab] = 0;
|
||||||
|
|
||||||
|
if(swappedBuffer.SequenceEqual(SwappedFrameMarker))
|
||||||
|
{
|
||||||
|
swapped = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
framePosition++;
|
framePosition++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int ab = 8; ab < buffer.Length; ab += 10)
|
for(int ab = 8; ab < buffer.Length; ab += 10)
|
||||||
buffer[ab] = 0;
|
buffer[ab] = 0;
|
||||||
|
|
||||||
if(!buffer.SequenceEqual(FrameMarker))
|
for(int ab = 9; ab < swappedBuffer.Length; ab += 10)
|
||||||
|
swappedBuffer[ab] = 0;
|
||||||
|
|
||||||
|
if(!buffer.SequenceEqual(FrameMarker) &&
|
||||||
|
!swappedBuffer.SequenceEqual(SwappedFrameMarker))
|
||||||
{
|
{
|
||||||
Console.WriteLine("Could not find any frame!");
|
Console.WriteLine("Could not find any frame!");
|
||||||
|
|
||||||
@@ -171,7 +217,12 @@ namespace DiscImageChef.VideoNow
|
|||||||
fs.Position = framePosition;
|
fs.Position = framePosition;
|
||||||
byte[] frameBuffer = new byte[19600];
|
byte[] frameBuffer = new byte[19600];
|
||||||
fs.Read(frameBuffer, 0, frameBuffer.Length);
|
fs.Read(frameBuffer, 0, frameBuffer.Length);
|
||||||
frameBuffer = SwapBuffer(frameBuffer);
|
|
||||||
|
int audioStart = swapped ? 9 : 8;
|
||||||
|
byte[] frameMarkerToUse = swapped ? SwappedFrameMarker : FrameMarker;
|
||||||
|
|
||||||
|
if(!swapped)
|
||||||
|
frameBuffer = SwapBuffer(frameBuffer);
|
||||||
|
|
||||||
var outFs = new MemoryStream();
|
var outFs = new MemoryStream();
|
||||||
|
|
||||||
@@ -207,7 +258,7 @@ namespace DiscImageChef.VideoNow
|
|||||||
|
|
||||||
int totalFrames = 1;
|
int totalFrames = 1;
|
||||||
framePosition += 19600;
|
framePosition += 19600;
|
||||||
buffer = new byte[FrameMarker.Length];
|
buffer = new byte[frameMarkerToUse.Length];
|
||||||
|
|
||||||
while(framePosition + 19600 < fs.Length)
|
while(framePosition + 19600 < fs.Length)
|
||||||
{
|
{
|
||||||
@@ -233,10 +284,10 @@ namespace DiscImageChef.VideoNow
|
|||||||
|
|
||||||
Console.Write("\rLooking for more frames {0}", progress);
|
Console.Write("\rLooking for more frames {0}", progress);
|
||||||
|
|
||||||
for(int ab = 8; ab < buffer.Length; ab += 10)
|
for(int ab = audioStart; ab < buffer.Length; ab += 10)
|
||||||
buffer[ab] = 0;
|
buffer[ab] = 0;
|
||||||
|
|
||||||
if(!buffer.SequenceEqual(FrameMarker))
|
if(!buffer.SequenceEqual(frameMarkerToUse))
|
||||||
{
|
{
|
||||||
Console.Write("\r \r");
|
Console.Write("\r \r");
|
||||||
Console.WriteLine("Frame {0} and the next one are not aligned...", totalFrames);
|
Console.WriteLine("Frame {0} and the next one are not aligned...", totalFrames);
|
||||||
@@ -247,17 +298,19 @@ namespace DiscImageChef.VideoNow
|
|||||||
fs.Position = framePosition;
|
fs.Position = framePosition;
|
||||||
fs.Read(buffer, 0, buffer.Length);
|
fs.Read(buffer, 0, buffer.Length);
|
||||||
|
|
||||||
for(int ab = 8; ab < buffer.Length; ab += 10)
|
for(int ab = audioStart; ab < buffer.Length; ab += 10)
|
||||||
buffer[ab] = 0;
|
buffer[ab] = 0;
|
||||||
|
|
||||||
if(buffer.SequenceEqual(FrameMarker))
|
if(buffer.SequenceEqual(frameMarkerToUse))
|
||||||
{
|
{
|
||||||
Console.Write("\r \r");
|
Console.Write("\r \r");
|
||||||
|
|
||||||
fs.Position = framePosition;
|
fs.Position = framePosition;
|
||||||
frameBuffer = new byte[19600];
|
frameBuffer = new byte[19600];
|
||||||
fs.Read(frameBuffer, 0, frameBuffer.Length);
|
fs.Read(frameBuffer, 0, frameBuffer.Length);
|
||||||
frameBuffer = SwapBuffer(frameBuffer);
|
|
||||||
|
if(!swapped)
|
||||||
|
frameBuffer = SwapBuffer(frameBuffer);
|
||||||
|
|
||||||
outFs = new MemoryStream();
|
outFs = new MemoryStream();
|
||||||
|
|
||||||
@@ -321,7 +374,9 @@ namespace DiscImageChef.VideoNow
|
|||||||
fs.Position = framePosition;
|
fs.Position = framePosition;
|
||||||
frameBuffer = new byte[19600];
|
frameBuffer = new byte[19600];
|
||||||
fs.Read(frameBuffer, 0, frameBuffer.Length);
|
fs.Read(frameBuffer, 0, frameBuffer.Length);
|
||||||
frameBuffer = SwapBuffer(frameBuffer);
|
|
||||||
|
if(!swapped)
|
||||||
|
frameBuffer = SwapBuffer(frameBuffer);
|
||||||
|
|
||||||
outFs = new MemoryStream();
|
outFs = new MemoryStream();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user