Add support for XA interleaved files.

This commit is contained in:
2020-03-10 22:47:01 +00:00
parent 09bd6baa61
commit 96ca77f496

View File

@@ -208,7 +208,7 @@ namespace Aaru.Decoders.CD
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static byte[] GetUserData(byte[] data) public static byte[] GetUserData(byte[] data, bool interleaved = false, byte fileNumber = 0)
{ {
switch(data.Length) switch(data.Length)
{ {
@@ -224,16 +224,16 @@ namespace Aaru.Decoders.CD
Array.Copy(data, 16, sector, 0, 2048); Array.Copy(data, 16, sector, 0, 2048);
return sector; return sector;
case 2: return GetUserDataFromMode2(data); case 2: return GetUserDataFromMode2(data, interleaved, fileNumber);
default: return data; default: return data;
} }
case 2336: return GetUserDataFromMode2(data); case 2336: return GetUserDataFromMode2(data, interleaved, fileNumber);
default: return data; default: return data;
} }
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static byte[] GetUserDataFromMode2(byte[] data) public static byte[] GetUserDataFromMode2(byte[] data, bool interleaved = false, byte fileNumber = 0)
{ {
if(data.Length != 2352 && if(data.Length != 2352 &&
data.Length != 2336) data.Length != 2336)
@@ -261,6 +261,10 @@ namespace Aaru.Decoders.CD
pos = 16; pos = 16;
} }
// This is not the sector you are looking for
if(interleaved && data[pos] != fileNumber)
return null;
int len = (data[pos + 2] & 0x20) == 0x20 ? 2324 : 2048; int len = (data[pos + 2] & 0x20) == 0x20 ? 2324 : 2048;
pos += 8; pos += 8;