From 96ca77f496e9bf8e1a86ffe0e79b11b3552b979c Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 10 Mar 2020 22:47:01 +0000 Subject: [PATCH] Add support for XA interleaved files. --- CD/Sector.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CD/Sector.cs b/CD/Sector.cs index 266ed44..db07b5e 100644 --- a/CD/Sector.cs +++ b/CD/Sector.cs @@ -208,7 +208,7 @@ namespace Aaru.Decoders.CD } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static byte[] GetUserData(byte[] data) + public static byte[] GetUserData(byte[] data, bool interleaved = false, byte fileNumber = 0) { switch(data.Length) { @@ -224,16 +224,16 @@ namespace Aaru.Decoders.CD Array.Copy(data, 16, sector, 0, 2048); return sector; - case 2: return GetUserDataFromMode2(data); + case 2: return GetUserDataFromMode2(data, interleaved, fileNumber); default: return data; } - case 2336: return GetUserDataFromMode2(data); + case 2336: return GetUserDataFromMode2(data, interleaved, fileNumber); default: return data; } } [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 && data.Length != 2336) @@ -261,6 +261,10 @@ namespace Aaru.Decoders.CD 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; pos += 8;