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