Code restyling.

This commit is contained in:
2020-02-29 18:03:35 +00:00
parent 4ea327f0c6
commit f7e173710e
855 changed files with 43605 additions and 38045 deletions

View File

@@ -39,184 +39,95 @@ namespace Aaru.DiscImages
{
enum DaoMode : ushort
{
Data = 0x0000,
DataM2F1 = 0x0002,
DataM2F2 = 0x0003,
DataRaw = 0x0005,
DataM2Raw = 0x0006,
Audio = 0x0007,
DataRawSub = 0x000F,
AudioSub = 0x0010,
DataM2RawSub = 0x0011
Data = 0x0000, DataM2F1 = 0x0002, DataM2F2 = 0x0003,
DataRaw = 0x0005, DataM2Raw = 0x0006, Audio = 0x0007,
DataRawSub = 0x000F, AudioSub = 0x0010, DataM2RawSub = 0x0011
}
[Flags]
[SuppressMessage("ReSharper", "InconsistentNaming")]
[Flags, SuppressMessage("ReSharper", "InconsistentNaming")]
enum NeroMediaTypes : uint
{
/// <summary>
/// No media
/// </summary>
/// <summary>No media</summary>
NeroMtypNone = 0x00000,
/// <summary>
/// CD-R/RW
/// </summary>
/// <summary>CD-R/RW</summary>
NeroMtypCd = 0x00001,
/// <summary>
/// DDCD-R/RW
/// </summary>
/// <summary>DDCD-R/RW</summary>
NeroMtypDdcd = 0x00002,
/// <summary>
/// DVD-R/RW
/// </summary>
/// <summary>DVD-R/RW</summary>
NeroMtypDvdM = 0x00004,
/// <summary>
/// DVD+RW
/// </summary>
/// <summary>DVD+RW</summary>
NeroMtypDvdP = 0x00008,
/// <summary>
/// DVD-RAM
/// </summary>
/// <summary>DVD-RAM</summary>
NeroMtypDvdRam = 0x00010,
/// <summary>
/// Multi-level disc
/// </summary>
/// <summary>Multi-level disc</summary>
NeroMtypMl = 0x00020,
/// <summary>
/// Mount Rainier
/// </summary>
/// <summary>Mount Rainier</summary>
NeroMtypMrw = 0x00040,
/// <summary>
/// Exclude CD-R
/// </summary>
/// <summary>Exclude CD-R</summary>
NeroMtypNoCdr = 0x00080,
/// <summary>
/// Exclude CD-RW
/// </summary>
/// <summary>Exclude CD-RW</summary>
NeroMtypNoCdrw = 0x00100,
/// <summary>
/// CD-RW
/// </summary>
/// <summary>CD-RW</summary>
NeroMtypCdrw = NeroMtypCd | NeroMtypNoCdr,
/// <summary>
/// CD-R
/// </summary>
/// <summary>CD-R</summary>
NeroMtypCdr = NeroMtypCd | NeroMtypNoCdrw,
/// <summary>
/// DVD-ROM
/// </summary>
/// <summary>DVD-ROM</summary>
NeroMtypDvdRom = 0x00200,
/// <summary>
/// CD-ROM
/// </summary>
/// <summary>CD-ROM</summary>
NeroMtypCdrom = 0x00400,
/// <summary>
/// Exclude DVD-RW
/// </summary>
/// <summary>Exclude DVD-RW</summary>
NeroMtypNoDvdMRw = 0x00800,
/// <summary>
/// Exclude DVD-R
/// </summary>
/// <summary>Exclude DVD-R</summary>
NeroMtypNoDvdMR = 0x01000,
/// <summary>
/// Exclude DVD+RW
/// </summary>
/// <summary>Exclude DVD+RW</summary>
NeroMtypNoDvdPRw = 0x02000,
/// <summary>
/// Exclude DVD+R
/// </summary>
/// <summary>Exclude DVD+R</summary>
NeroMtypNoDvdPR = 0x04000,
/// <summary>
/// DVD-R
/// </summary>
/// <summary>DVD-R</summary>
NeroMtypDvdMR = NeroMtypDvdM | NeroMtypNoDvdMRw,
/// <summary>
/// DVD-RW
/// </summary>
/// <summary>DVD-RW</summary>
NeroMtypDvdMRw = NeroMtypDvdM | NeroMtypNoDvdMR,
/// <summary>
/// DVD+R
/// </summary>
/// <summary>DVD+R</summary>
NeroMtypDvdPR = NeroMtypDvdP | NeroMtypNoDvdPRw,
/// <summary>
/// DVD+RW
/// </summary>
/// <summary>DVD+RW</summary>
NeroMtypDvdPRw = NeroMtypDvdP | NeroMtypNoDvdPR,
/// <summary>
/// Packet-writing (fixed)
/// </summary>
/// <summary>Packet-writing (fixed)</summary>
NeroMtypFpacket = 0x08000,
/// <summary>
/// Packet-writing (variable)
/// </summary>
/// <summary>Packet-writing (variable)</summary>
NeroMtypVpacket = 0x10000,
/// <summary>
/// Packet-writing (any)
/// </summary>
/// <summary>Packet-writing (any)</summary>
NeroMtypPacketw = NeroMtypMrw | NeroMtypFpacket | NeroMtypVpacket,
/// <summary>
/// HD-Burn
/// </summary>
/// <summary>HD-Burn</summary>
NeroMtypHdb = 0x20000,
/// <summary>
/// DVD+R DL
/// </summary>
/// <summary>DVD+R DL</summary>
NeroMtypDvdPR9 = 0x40000,
/// <summary>
/// DVD-R DL
/// </summary>
/// <summary>DVD-R DL</summary>
NeroMtypDvdMR9 = 0x80000,
/// <summary>
/// Any DVD double-layer
/// </summary>
/// <summary>Any DVD double-layer</summary>
NeroMtypDvdAnyR9 = NeroMtypDvdPR9 | NeroMtypDvdMR9,
/// <summary>
/// Any DVD
/// </summary>
/// <summary>Any DVD</summary>
NeroMtypDvdAny = NeroMtypDvdM | NeroMtypDvdP | NeroMtypDvdRam | NeroMtypDvdAnyR9,
/// <summary>
/// BD-ROM
/// </summary>
/// <summary>BD-ROM</summary>
NeroMtypBdRom = 0x100000,
/// <summary>
/// BD-R
/// </summary>
/// <summary>BD-R</summary>
NeroMtypBdR = 0x200000,
/// <summary>
/// BD-RE
/// </summary>
/// <summary>BD-RE</summary>
NeroMtypBdRe = 0x400000,
/// <summary>
/// BD-R/RE
/// </summary>
/// <summary>BD-R/RE</summary>
NeroMtypBd = NeroMtypBdR | NeroMtypBdRe,
/// <summary>
/// Any BD
/// </summary>
/// <summary>Any BD</summary>
NeroMtypBdAny = NeroMtypBd | NeroMtypBdRom,
/// <summary>
/// HD DVD-ROM
/// </summary>
/// <summary>HD DVD-ROM</summary>
NeroMtypHdDvdRom = 0x0800000,
/// <summary>
/// HD DVD-R
/// </summary>
/// <summary>HD DVD-R</summary>
NeroMtypHdDvdR = 0x1000000,
/// <summary>
/// HD DVD-RW
/// </summary>
/// <summary>HD DVD-RW</summary>
NeroMtypHdDvdRw = 0x2000000,
/// <summary>
/// HD DVD-R/RW
/// </summary>
/// <summary>HD DVD-R/RW</summary>
NeroMtypHdDvd = NeroMtypHdDvdR | NeroMtypHdDvdRw,
/// <summary>
/// Any HD DVD
/// </summary>
/// <summary>Any HD DVD</summary>
NeroMtypHdDvdAny = NeroMtypHdDvd | NeroMtypHdDvdRom,
/// <summary>
/// Any DVD, old
/// </summary>
/// <summary>Any DVD, old</summary>
NeroMtypDvdAnyOld = NeroMtypDvdM | NeroMtypDvdP | NeroMtypDvdRam
}
}

View File

@@ -41,8 +41,8 @@ namespace Aaru.DiscImages
public bool Identify(IFilter imageFilter)
{
imageStream = imageFilter.GetDataForkStream();
NeroV1Footer footerV1 = new NeroV1Footer();
NeroV2Footer footerV2 = new NeroV2Footer();
var footerV1 = new NeroV1Footer();
var footerV2 = new NeroV2Footer();
imageStream.Seek(-8, SeekOrigin.End);
byte[] buffer = new byte[8];
@@ -56,13 +56,15 @@ namespace Aaru.DiscImages
footerV2.ChunkId = BigEndianBitConverter.ToUInt32(buffer, 0);
footerV2.FirstChunkOffset = BigEndianBitConverter.ToUInt64(buffer, 4);
AaruConsole.DebugWriteLine("Nero plugin", "imageStream.Length = {0}", imageStream.Length);
AaruConsole.DebugWriteLine("Nero plugin", "footerV1.ChunkID = 0x{0:X8}", footerV1.ChunkId);
AaruConsole.DebugWriteLine("Nero plugin", "imageStream.Length = {0}", imageStream.Length);
AaruConsole.DebugWriteLine("Nero plugin", "footerV1.ChunkID = 0x{0:X8}", footerV1.ChunkId);
AaruConsole.DebugWriteLine("Nero plugin", "footerV1.FirstChunkOffset = {0}", footerV1.FirstChunkOffset);
AaruConsole.DebugWriteLine("Nero plugin", "footerV2.ChunkID = 0x{0:X8}", footerV2.ChunkId);
AaruConsole.DebugWriteLine("Nero plugin", "footerV2.ChunkID = 0x{0:X8}", footerV2.ChunkId);
AaruConsole.DebugWriteLine("Nero plugin", "footerV2.FirstChunkOffset = {0}", footerV2.FirstChunkOffset);
if(footerV2.ChunkId == NERO_FOOTER_V2 && footerV2.FirstChunkOffset < (ulong)imageStream.Length) return true;
if(footerV2.ChunkId == NERO_FOOTER_V2 &&
footerV2.FirstChunkOffset < (ulong)imageStream.Length)
return true;
return footerV1.ChunkId == NERO_FOOTER_V1 && footerV1.FirstChunkOffset < (ulong)imageStream.Length;
}

View File

@@ -43,38 +43,40 @@ using Aaru.CommonTypes.Structs;
namespace Aaru.DiscImages
{
[SuppressMessage("ReSharper", "NotAccessedField.Local")]
[SuppressMessage("ReSharper", "CollectionNeverQueried.Local")]
[SuppressMessage("ReSharper", "NotAccessedField.Local"),
SuppressMessage("ReSharper", "CollectionNeverQueried.Local")]
public partial class Nero : IOpticalMediaImage
{
bool imageNewFormat;
Stream imageStream;
ImageInfo imageInfo;
NeroCdText neroCdtxt;
NeroV1Cuesheet neroCuesheetV1;
NeroV2Cuesheet neroCuesheetV2;
NeroV1Dao neroDaov1;
NeroV2Dao neroDaov2;
NeroDiscInformation neroDiscInfo;
IFilter neroFilter;
NeroMediaType neroMediaTyp;
NeroReloChunk neroRelo;
Dictionary<ushort, uint> neroSessions;
NeroV1Tao neroTaov1;
NeroV2Tao neroTaov2;
NeroTocChunk neroToc;
Dictionary<uint, NeroTrack> neroTracks;
Dictionary<uint, ulong> offsetmap;
Dictionary<uint, byte[]> trackIsrCs;
byte[] upc;
bool imageNewFormat;
Stream imageStream;
ImageInfo imageInfo;
NeroCdText neroCdtxt;
NeroV1Cuesheet neroCuesheetV1;
NeroV2Cuesheet neroCuesheetV2;
NeroV1Dao neroDaov1;
NeroV2Dao neroDaov2;
NeroDiscInformation neroDiscInfo;
IFilter neroFilter;
NeroMediaType neroMediaTyp;
NeroReloChunk neroRelo;
readonly Dictionary<ushort, uint> neroSessions;
NeroV1Tao neroTaov1;
NeroV2Tao neroTaov2;
NeroTocChunk neroToc;
readonly Dictionary<uint, NeroTrack> neroTracks;
readonly Dictionary<uint, ulong> offsetmap;
Dictionary<uint, byte[]> trackIsrCs;
byte[] upc;
public Nero()
{
imageNewFormat = false;
imageInfo = new ImageInfo
{
ReadableSectorTags = new List<SectorTagType>(), ReadableMediaTags = new List<MediaTagType>()
};
neroSessions = new Dictionary<ushort, uint>();
neroTracks = new Dictionary<uint, NeroTrack>();
offsetmap = new Dictionary<uint, ulong>();

View File

@@ -71,12 +71,12 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "imageStream.Length = {0}", imageStream.Length);
AaruConsole.DebugWriteLine("Nero plugin", "footerV1.ChunkID = 0x{0:X8} (\"{1}\")", footerV1.ChunkId,
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV1.ChunkId)));
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV1.ChunkId)));
AaruConsole.DebugWriteLine("Nero plugin", "footerV1.FirstChunkOffset = {0}", footerV1.FirstChunkOffset);
AaruConsole.DebugWriteLine("Nero plugin", "footerV2.ChunkID = 0x{0:X8} (\"{1}\")", footerV2.ChunkId,
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV2.ChunkId)));
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV2.ChunkId)));
AaruConsole.DebugWriteLine("Nero plugin", "footerV2.FirstChunkOffset = {0}", footerV2.FirstChunkOffset);
@@ -118,7 +118,7 @@ namespace Aaru.DiscImages
uint chunkLength = BigEndianBitConverter.ToUInt32(chunkHeaderBuffer, 4);
AaruConsole.DebugWriteLine("Nero plugin", "ChunkID = 0x{0:X8} (\"{1}\")", chunkId,
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(chunkId)));
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(chunkId)));
AaruConsole.DebugWriteLine("Nero plugin", "ChunkLength = {0}", chunkLength);
@@ -127,7 +127,7 @@ namespace Aaru.DiscImages
case NERO_CUE_V1:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"CUES\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroCuesheetV1 = new NeroV1Cuesheet
{
@@ -151,25 +151,25 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "Cuesheet entry {0}", (i / 8) + 1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1:X2}", (i / 8) + 1,
entry.Mode);
entry.Mode);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].TrackNumber = {1:X2}",
(i / 8) + 1, entry.TrackNumber);
(i / 8) + 1, entry.TrackNumber);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].IndexNumber = {1:X2}",
(i / 8) + 1, entry.IndexNumber);
(i / 8) + 1, entry.IndexNumber);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Dummy = {1:X4}", (i / 8) + 1,
entry.Dummy);
entry.Dummy);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Minute = {1:X2}", (i / 8) + 1,
entry.Minute);
entry.Minute);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Second = {1:X2}", (i / 8) + 1,
entry.Second);
entry.Second);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Frame = {1:X2}", (i / 8) + 1,
entry.Frame);
entry.Frame);
neroCuesheetV1.Entries.Add(entry);
}
@@ -180,7 +180,7 @@ namespace Aaru.DiscImages
case NERO_CUE_V2:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"CUEX\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroCuesheetV2 = new NeroV2Cuesheet
{
@@ -202,19 +202,19 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "Cuesheet entry {0}", (i / 8) + 1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = 0x{1:X2}", (i / 8) + 1,
entry.Mode);
entry.Mode);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].TrackNumber = {1:X2}",
(i / 8) + 1, entry.TrackNumber);
(i / 8) + 1, entry.TrackNumber);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].IndexNumber = {1:X2}",
(i / 8) + 1, entry.IndexNumber);
(i / 8) + 1, entry.IndexNumber);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Dummy = {1:X2}", (i / 8) + 1,
entry.Dummy);
entry.Dummy);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].LBAStart = {1}", (i / 8) + 1,
entry.LbaStart);
entry.LbaStart);
neroCuesheetV2.Entries.Add(entry);
}
@@ -225,7 +225,7 @@ namespace Aaru.DiscImages
case NERO_DAO_V1:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"DAOI\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroDaov1 = new NeroV1Dao
{
@@ -249,15 +249,16 @@ namespace Aaru.DiscImages
imageInfo.ReadableSectorTags.Add(SectorTagType.CdTrackIsrc);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV1.ChunkSizeLe = {0} bytes",
neroDaov1.ChunkSizeLe);
neroDaov1.ChunkSizeLe);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV1.UPC = \"{0}\"",
StringHandlers.CToString(neroDaov1.Upc));
StringHandlers.CToString(neroDaov1.Upc));
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV1.TocType = 0x{0:X4}", neroDaov1.TocType);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV1.TocType = 0x{0:X4}",
neroDaov1.TocType);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV1.FirstTrack = {0}",
neroDaov1.FirstTrack);
neroDaov1.FirstTrack);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV1.LastTrack = {0}", neroDaov1.LastTrack);
@@ -281,25 +282,25 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "Disc-At-Once entry {0}", (i / 32) + 1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].ISRC = \"{1}\"", (i / 32) + 1,
StringHandlers.CToString(entry.Isrc));
StringHandlers.CToString(entry.Isrc));
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].SectorSize = {1}",
(i / 32) + 1, entry.SectorSize);
(i / 32) + 1, entry.SectorSize);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1} (0x{2:X4})",
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Unknown = 0x{1:X4}",
(i / 32) + 1, entry.Unknown);
(i / 32) + 1, entry.Unknown);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index0 = {1}", (i / 32) + 1,
entry.Index0);
entry.Index0);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index1 = {1}", (i / 32) + 1,
entry.Index1);
entry.Index1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].EndOfTrack = {1}",
(i / 32) + 1, entry.EndOfTrack);
(i / 32) + 1, entry.EndOfTrack);
neroDaov1.Tracks.Add(entry);
@@ -335,7 +336,7 @@ namespace Aaru.DiscImages
case NERO_DAO_V2:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"DAOX\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroDaov2 = new NeroV2Dao
{
@@ -361,15 +362,16 @@ namespace Aaru.DiscImages
upc = neroDaov2.Upc;
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV2.ChunkSizeLe = {0} bytes",
neroDaov2.ChunkSizeLe);
neroDaov2.ChunkSizeLe);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV2.UPC = \"{0}\"",
StringHandlers.CToString(neroDaov2.Upc));
StringHandlers.CToString(neroDaov2.Upc));
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV2.TocType = 0x{0:X4}", neroDaov2.TocType);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV2.TocType = 0x{0:X4}",
neroDaov2.TocType);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV2.FirstTrack = {0}",
neroDaov2.FirstTrack);
neroDaov2.FirstTrack);
AaruConsole.DebugWriteLine("Nero plugin", "neroDAOV2.LastTrack = {0}", neroDaov2.LastTrack);
@@ -391,25 +393,25 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "Disc-At-Once entry {0}", (i / 32) + 1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].ISRC = \"{1}\"", (i / 32) + 1,
StringHandlers.CToString(entry.Isrc));
StringHandlers.CToString(entry.Isrc));
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].SectorSize = {1}",
(i / 32) + 1, entry.SectorSize);
(i / 32) + 1, entry.SectorSize);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1} (0x{2:X4})",
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Unknown = {1:X2}",
(i / 32) + 1, entry.Unknown);
(i / 32) + 1, entry.Unknown);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index0 = {1}", (i / 32) + 1,
entry.Index0);
entry.Index0);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index1 = {1}", (i / 32) + 1,
entry.Index1);
entry.Index1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].EndOfTrack = {1}",
(i / 32) + 1, entry.EndOfTrack);
(i / 32) + 1, entry.EndOfTrack);
neroDaov2.Tracks.Add(entry);
@@ -445,7 +447,7 @@ namespace Aaru.DiscImages
case NERO_CDTEXT:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"CDTX\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroCdtxt = new NeroCdText
{
@@ -470,22 +472,22 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "CD-TEXT entry {0}", (i / 18) + 1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].PackType = 0x{1:X2}",
(i / 18) + 1, entry.PackType);
(i / 18) + 1, entry.PackType);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].TrackNumber = 0x{1:X2}",
(i / 18) + 1, entry.TrackNumber);
(i / 18) + 1, entry.TrackNumber);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].PackNumber = 0x{1:X2}",
(i / 18) + 1, entry.PackNumber);
(i / 18) + 1, entry.PackNumber);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].BlockNumber = 0x{1:X2}",
(i / 18) + 1, entry.BlockNumber);
(i / 18) + 1, entry.BlockNumber);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Text = \"{1}\"", (i / 18) + 1,
StringHandlers.CToString(entry.Text));
StringHandlers.CToString(entry.Text));
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].CRC = 0x{1:X4}", (i / 18) + 1,
entry.Crc);
entry.Crc);
neroCdtxt.Packs.Add(entry);
}
@@ -496,7 +498,7 @@ namespace Aaru.DiscImages
case NERO_TAO_V1:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"ETNF\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroTaov1 = new NeroV1Tao
{
@@ -519,19 +521,19 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "Track-at-Once entry {0}", (i / 20) + 1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Offset = {1}", (i / 20) + 1,
entry.Offset);
entry.Offset);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Length = {1} bytes",
(i / 20) + 1, entry.Length);
(i / 20) + 1, entry.Length);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1} (0x{2:X4})",
(i / 20) + 1, (DaoMode)entry.Mode, entry.Mode);
(i / 20) + 1, (DaoMode)entry.Mode, entry.Mode);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].StartLBA = {1}", (i / 20) + 1,
entry.StartLba);
entry.StartLba);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Unknown = 0x{1:X4}",
(i / 20) + 1, entry.Unknown);
(i / 20) + 1, entry.Unknown);
neroTaov1.Tracks.Add(entry);
@@ -563,7 +565,7 @@ namespace Aaru.DiscImages
case NERO_TAO_V2:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"ETN2\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroTaov2 = new NeroV2Tao
{
@@ -587,22 +589,22 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "Track-at-Once entry {0}", (i / 32) + 1);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Offset = {1}", (i / 32) + 1,
entry.Offset);
entry.Offset);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Length = {1} bytes",
(i / 32) + 1, entry.Length);
(i / 32) + 1, entry.Length);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1} (0x{2:X4})",
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].StartLBA = {1}", (i / 32) + 1,
entry.StartLba);
entry.StartLba);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Unknown = 0x{1:X4}",
(i / 32) + 1, entry.Unknown);
(i / 32) + 1, entry.Unknown);
AaruConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Sectors = {1}", (i / 32) + 1,
entry.Sectors);
entry.Sectors);
neroTaov2.Tracks.Add(entry);
@@ -636,7 +638,7 @@ namespace Aaru.DiscImages
case NERO_SESSION:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"SINF\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
byte[] tmpbuffer = new byte[4];
imageStream.Read(tmpbuffer, 0, 4);
@@ -644,7 +646,7 @@ namespace Aaru.DiscImages
neroSessions.Add(currentsession, sessionTracks);
AaruConsole.DebugWriteLine("Nero plugin", "\tSession {0} has {1} tracks", currentsession,
sessionTracks);
sessionTracks);
currentsession++;
@@ -654,7 +656,7 @@ namespace Aaru.DiscImages
case NERO_DISC_TYPE:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"MTYP\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroMediaTyp = new NeroMediaType
{
@@ -666,7 +668,7 @@ namespace Aaru.DiscImages
neroMediaTyp.Type = BigEndianBitConverter.ToUInt32(tmpbuffer, 0);
AaruConsole.DebugWriteLine("Nero plugin", "\tMedia type is {0} ({1})",
(NeroMediaTypes)neroMediaTyp.Type, neroMediaTyp.Type);
(NeroMediaTypes)neroMediaTyp.Type, neroMediaTyp.Type);
imageInfo.MediaType = NeroMediaTypeToMediaType((NeroMediaTypes)neroMediaTyp.Type);
@@ -676,7 +678,7 @@ namespace Aaru.DiscImages
case NERO_DISC_INFO:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"DINF\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroDiscInfo = new NeroDiscInformation
{
@@ -688,7 +690,7 @@ namespace Aaru.DiscImages
neroDiscInfo.Unknown = BigEndianBitConverter.ToUInt32(tmpbuffer, 0);
AaruConsole.DebugWriteLine("Nero plugin", "\tneroDiscInfo.Unknown = 0x{0:X4} ({0})",
neroDiscInfo.Unknown);
neroDiscInfo.Unknown);
break;
}
@@ -696,7 +698,7 @@ namespace Aaru.DiscImages
case NERO_RELOCATION:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"RELO\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroRelo = new NeroReloChunk
{
@@ -708,7 +710,7 @@ namespace Aaru.DiscImages
neroRelo.Unknown = BigEndianBitConverter.ToUInt32(tmpbuffer, 0);
AaruConsole.DebugWriteLine("Nero plugin", "\tneroRELO.Unknown = 0x{0:X4} ({0})",
neroRelo.Unknown);
neroRelo.Unknown);
break;
}
@@ -716,7 +718,7 @@ namespace Aaru.DiscImages
case NERO_TOC:
{
AaruConsole.DebugWriteLine("Nero plugin", "Found \"TOCT\" chunk, parsing {0} bytes",
chunkLength);
chunkLength);
neroToc = new NeroTocChunk
{
@@ -728,7 +730,7 @@ namespace Aaru.DiscImages
neroToc.Unknown = BigEndianBitConverter.ToUInt16(tmpbuffer, 0);
AaruConsole.DebugWriteLine("Nero plugin", "\tneroTOC.Unknown = 0x{0:X4} ({0})",
neroToc.Unknown);
neroToc.Unknown);
break;
}
@@ -744,8 +746,8 @@ namespace Aaru.DiscImages
default:
{
AaruConsole.DebugWriteLine("Nero plugin", "Unknown chunk ID \"{0}\", skipping...",
Encoding.ASCII.GetString(BigEndianBitConverter.
GetBytes(chunkId)));
Encoding.ASCII.GetString(BigEndianBitConverter.
GetBytes(chunkId)));
imageStream.Seek(chunkLength, SeekOrigin.Current);
@@ -809,7 +811,7 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "\tcurrentsessionmaxtrack = {0}", currentsessionmaxtrack);
AaruConsole.DebugWriteLine("Nero plugin", "\tcurrentsessioncurrenttrack = {0}",
currentsessioncurrenttrack);
currentsessioncurrenttrack);
var track = new Track();
@@ -825,8 +827,7 @@ namespace Aaru.DiscImages
track.TrackDescription = StringHandlers.CToString(neroTrack.Isrc);
track.TrackEndSector = ((neroTrack.Length / neroTrack.SectorSize) + neroTrack.StartLba) - 1;
track.TrackPregap = (neroTrack.Index1 - neroTrack.Index0) /
neroTrack.SectorSize;
track.TrackPregap = (neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize;
track.TrackSequence = neroTrack.Sequence;
track.TrackSession = currentsession;
@@ -896,7 +897,7 @@ namespace Aaru.DiscImages
Tracks.Add(track);
AaruConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackDescription = {0}",
track.TrackDescription);
track.TrackDescription);
AaruConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackEndSector = {0}", track.TrackEndSector);
AaruConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackPregap = {0}", track.TrackPregap);
@@ -904,7 +905,7 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackSession = {0}", track.TrackSession);
AaruConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackStartSector = {0}",
track.TrackStartSector);
track.TrackStartSector);
AaruConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackType = {0}", track.TrackType);
@@ -939,7 +940,7 @@ namespace Aaru.DiscImages
offsetmap.Add(track.TrackSequence, track.TrackStartSector);
AaruConsole.DebugWriteLine("Nero plugin", "\t\t Offset[{0}]: {1}", track.TrackSequence,
track.TrackStartSector);
track.TrackStartSector);
/*if(_neroTrack.Index0 < _neroTrack.Index1)
{
@@ -1188,8 +1189,9 @@ namespace Aaru.DiscImages
imageStream = neroFilter.GetDataForkStream();
var br = new BinaryReader(imageStream);
br.BaseStream.Seek((long)aaruTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
br.BaseStream.
Seek((long)aaruTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
if(mode2)
{
@@ -1468,8 +1470,9 @@ namespace Aaru.DiscImages
imageStream = neroFilter.GetDataForkStream();
var br = new BinaryReader(imageStream);
br.BaseStream.Seek((long)aaruTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
br.BaseStream.
Seek((long)aaruTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
if(sectorOffset == 0 &&
sectorSkip == 0)
@@ -1565,8 +1568,9 @@ namespace Aaru.DiscImages
imageStream = neroFilter.GetDataForkStream();
var br = new BinaryReader(imageStream);
br.BaseStream.Seek((long)aaruTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
br.BaseStream.
Seek((long)aaruTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)),
SeekOrigin.Begin);
if(sectorOffset == 0 &&
sectorSkip == 0)

View File

@@ -38,542 +38,352 @@ namespace Aaru.DiscImages
{
struct NeroV1Footer
{
/// <summary>
/// "NERO"
/// </summary>
/// <summary>"NERO"</summary>
public uint ChunkId;
/// <summary>
/// Offset of first chunk in file
/// </summary>
/// <summary>Offset of first chunk in file</summary>
public uint FirstChunkOffset;
}
struct NeroV2Footer
{
/// <summary>
/// "NER5"
/// </summary>
/// <summary>"NER5"</summary>
public uint ChunkId;
/// <summary>
/// Offset of first chunk in file
/// </summary>
/// <summary>Offset of first chunk in file</summary>
public ulong FirstChunkOffset;
}
struct NeroV2CueEntry
{
/// <summary>
/// Track mode. 0x01 for audio, 0x21 for copy-protected audio, 0x41 for data
/// </summary>
/// <summary>Track mode. 0x01 for audio, 0x21 for copy-protected audio, 0x41 for data</summary>
public byte Mode;
/// <summary>
/// Track number in BCD
/// </summary>
/// <summary>Track number in BCD</summary>
public byte TrackNumber;
/// <summary>
/// Index number in BCD
/// </summary>
/// <summary>Index number in BCD</summary>
public byte IndexNumber;
/// <summary>
/// Always zero
/// </summary>
/// <summary>Always zero</summary>
public byte Dummy;
/// <summary>
/// LBA sector start for this entry
/// </summary>
/// <summary>LBA sector start for this entry</summary>
public int LbaStart;
}
struct NeroV2Cuesheet
{
/// <summary>
/// "CUEX"
/// </summary>
/// <summary>"CUEX"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// Cuesheet entries
/// </summary>
/// <summary>Cuesheet entries</summary>
public List<NeroV2CueEntry> Entries;
}
struct NeroV1CueEntry
{
/// <summary>
/// Track mode. 0x01 for audio, 0x21 for copy-protected audio, 0x41 for data
/// </summary>
/// <summary>Track mode. 0x01 for audio, 0x21 for copy-protected audio, 0x41 for data</summary>
public byte Mode;
/// <summary>
/// Track number in BCD
/// </summary>
/// <summary>Track number in BCD</summary>
public byte TrackNumber;
/// <summary>
/// Index number in BCD
/// </summary>
/// <summary>Index number in BCD</summary>
public byte IndexNumber;
/// <summary>
/// Always zero
/// </summary>
/// <summary>Always zero</summary>
public ushort Dummy;
/// <summary>
/// MSF start sector's minute for this entry
/// </summary>
/// <summary>MSF start sector's minute for this entry</summary>
public byte Minute;
/// <summary>
/// MSF start sector's second for this entry
/// </summary>
/// <summary>MSF start sector's second for this entry</summary>
public byte Second;
/// <summary>
/// MSF start sector's frame for this entry
/// </summary>
/// <summary>MSF start sector's frame for this entry</summary>
public byte Frame;
}
struct NeroV1Cuesheet
{
/// <summary>
/// "CUES"
/// </summary>
/// <summary>"CUES"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// Cuesheet entries
/// </summary>
/// <summary>Cuesheet entries</summary>
public List<NeroV1CueEntry> Entries;
}
struct NeroV1DaoEntry
{
/// <summary>
/// ISRC (12 bytes)
/// </summary>
/// <summary>ISRC (12 bytes)</summary>
public byte[] Isrc;
/// <summary>
/// Size of sector inside image (in bytes)
/// </summary>
/// <summary>Size of sector inside image (in bytes)</summary>
public ushort SectorSize;
/// <summary>
/// Sector mode in image
/// </summary>
/// <summary>Sector mode in image</summary>
public ushort Mode;
/// <summary>
/// Unknown
/// </summary>
/// <summary>Unknown</summary>
public ushort Unknown;
/// <summary>
/// Index 0 start
/// </summary>
/// <summary>Index 0 start</summary>
public uint Index0;
/// <summary>
/// Index 1 start
/// </summary>
/// <summary>Index 1 start</summary>
public uint Index1;
/// <summary>
/// End of track + 1
/// </summary>
/// <summary>End of track + 1</summary>
public uint EndOfTrack;
}
struct NeroV1Dao
{
/// <summary>
/// "DAOI"
/// </summary>
/// <summary>"DAOI"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size (big endian)
/// </summary>
/// <summary>Chunk size (big endian)</summary>
public uint ChunkSizeBe;
/// <summary>
/// Chunk size (little endian)
/// </summary>
/// <summary>Chunk size (little endian)</summary>
public uint ChunkSizeLe;
/// <summary>
/// UPC (14 bytes, null-padded)
/// </summary>
/// <summary>UPC (14 bytes, null-padded)</summary>
public byte[] Upc;
/// <summary>
/// TOC type
/// </summary>
/// <summary>TOC type</summary>
public ushort TocType;
/// <summary>
/// First track
/// </summary>
/// <summary>First track</summary>
public byte FirstTrack;
/// <summary>
/// Last track
/// </summary>
/// <summary>Last track</summary>
public byte LastTrack;
/// <summary>
/// Tracks
/// </summary>
/// <summary>Tracks</summary>
public List<NeroV1DaoEntry> Tracks;
}
struct NeroV2DaoEntry
{
/// <summary>
/// ISRC (12 bytes)
/// </summary>
/// <summary>ISRC (12 bytes)</summary>
public byte[] Isrc;
/// <summary>
/// Size of sector inside image (in bytes)
/// </summary>
/// <summary>Size of sector inside image (in bytes)</summary>
public ushort SectorSize;
/// <summary>
/// Sector mode in image
/// </summary>
/// <summary>Sector mode in image</summary>
public ushort Mode;
/// <summary>
/// Seems to be always 0.
/// </summary>
/// <summary>Seems to be always 0.</summary>
public ushort Unknown;
/// <summary>
/// Index 0 start
/// </summary>
/// <summary>Index 0 start</summary>
public ulong Index0;
/// <summary>
/// Index 1 start
/// </summary>
/// <summary>Index 1 start</summary>
public ulong Index1;
/// <summary>
/// End of track + 1
/// </summary>
/// <summary>End of track + 1</summary>
public ulong EndOfTrack;
}
struct NeroV2Dao
{
/// <summary>
/// "DAOX"
/// </summary>
/// <summary>"DAOX"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size (big endian)
/// </summary>
/// <summary>Chunk size (big endian)</summary>
public uint ChunkSizeBe;
/// <summary>
/// Chunk size (little endian)
/// </summary>
/// <summary>Chunk size (little endian)</summary>
public uint ChunkSizeLe;
/// <summary>
/// UPC (14 bytes, null-padded)
/// </summary>
/// <summary>UPC (14 bytes, null-padded)</summary>
public byte[] Upc;
/// <summary>
/// TOC type
/// </summary>
/// <summary>TOC type</summary>
public ushort TocType;
/// <summary>
/// First track
/// </summary>
/// <summary>First track</summary>
public byte FirstTrack;
/// <summary>
/// Last track
/// </summary>
/// <summary>Last track</summary>
public byte LastTrack;
/// <summary>
/// Tracks
/// </summary>
/// <summary>Tracks</summary>
public List<NeroV2DaoEntry> Tracks;
}
struct NeroCdTextPack
{
/// <summary>
/// Pack type
/// </summary>
/// <summary>Pack type</summary>
public byte PackType;
/// <summary>
/// Track number
/// </summary>
/// <summary>Track number</summary>
public byte TrackNumber;
/// <summary>
/// Pack number in block
/// </summary>
/// <summary>Pack number in block</summary>
public byte PackNumber;
/// <summary>
/// Block number
/// </summary>
/// <summary>Block number</summary>
public byte BlockNumber;
/// <summary>
/// 12 bytes of data
/// </summary>
/// <summary>12 bytes of data</summary>
public byte[] Text;
/// <summary>
/// CRC
/// </summary>
/// <summary>CRC</summary>
public ushort Crc;
}
struct NeroCdText
{
/// <summary>
/// "CDTX"
/// </summary>
/// <summary>"CDTX"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// CD-TEXT packs
/// </summary>
/// <summary>CD-TEXT packs</summary>
public List<NeroCdTextPack> Packs;
}
struct NeroV1TaoEntry
{
/// <summary>
/// Offset of track on image
/// </summary>
/// <summary>Offset of track on image</summary>
public uint Offset;
/// <summary>
/// Length of track in bytes
/// </summary>
/// <summary>Length of track in bytes</summary>
public uint Length;
/// <summary>
/// Track mode
/// </summary>
/// <summary>Track mode</summary>
public uint Mode;
/// <summary>
/// LBA track start (plus 150 lead in sectors)
/// </summary>
/// <summary>LBA track start (plus 150 lead in sectors)</summary>
public uint StartLba;
/// <summary>
/// Unknown
/// </summary>
/// <summary>Unknown</summary>
public uint Unknown;
}
struct NeroV1Tao
{
/// <summary>
/// "ETNF"
/// </summary>
/// <summary>"ETNF"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// CD-TEXT packs
/// </summary>
/// <summary>CD-TEXT packs</summary>
public List<NeroV1TaoEntry> Tracks;
}
struct NeroV2TaoEntry
{
/// <summary>
/// Offset of track on image
/// </summary>
/// <summary>Offset of track on image</summary>
public ulong Offset;
/// <summary>
/// Length of track in bytes
/// </summary>
/// <summary>Length of track in bytes</summary>
public ulong Length;
/// <summary>
/// Track mode
/// </summary>
/// <summary>Track mode</summary>
public uint Mode;
/// <summary>
/// LBA track start (plus 150 lead in sectors)
/// </summary>
/// <summary>LBA track start (plus 150 lead in sectors)</summary>
public uint StartLba;
/// <summary>
/// Unknown
/// </summary>
/// <summary>Unknown</summary>
public uint Unknown;
/// <summary>
/// Track length in sectors
/// </summary>
/// <summary>Track length in sectors</summary>
public uint Sectors;
}
struct NeroV2Tao
{
/// <summary>
/// "ETN2"
/// </summary>
/// <summary>"ETN2"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// CD-TEXT packs
/// </summary>
/// <summary>CD-TEXT packs</summary>
public List<NeroV2TaoEntry> Tracks;
}
struct NeroSession
{
/// <summary>
/// "SINF"
/// </summary>
/// <summary>"SINF"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// Tracks in session
/// </summary>
/// <summary>Tracks in session</summary>
public uint Tracks;
}
struct NeroMediaType
{
/// <summary>
/// "MTYP"
/// </summary>
/// <summary>"MTYP"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// Media type
/// </summary>
/// <summary>Media type</summary>
public uint Type;
}
struct NeroDiscInformation
{
/// <summary>
/// "DINF"
/// </summary>
/// <summary>"DINF"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// Unknown
/// </summary>
/// <summary>Unknown</summary>
public uint Unknown;
}
struct NeroTocChunk
{
/// <summary>
/// "TOCT"
/// </summary>
/// <summary>"TOCT"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// Unknown
/// </summary>
/// <summary>Unknown</summary>
public ushort Unknown;
}
struct NeroReloChunk
{
/// <summary>
/// "RELO"
/// </summary>
/// <summary>"RELO"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
/// <summary>
/// Unknown
/// </summary>
/// <summary>Unknown</summary>
public uint Unknown;
}
struct NeroEndOfChunkChain
{
/// <summary>
/// "END!"
/// </summary>
/// <summary>"END!"</summary>
public uint ChunkId;
/// <summary>
/// Chunk size
/// </summary>
/// <summary>Chunk size</summary>
public uint ChunkSize;
}

View File

@@ -41,16 +41,18 @@ namespace Aaru.DiscImages
public bool? VerifySector(ulong sectorAddress)
{
byte[] buffer = ReadSectorLong(sectorAddress);
return CdChecksums.CheckCdSector(buffer);
}
public bool? VerifySector(ulong sectorAddress, uint track)
{
byte[] buffer = ReadSectorLong(sectorAddress, track);
return CdChecksums.CheckCdSector(buffer);
}
public bool? VerifySectors(ulong sectorAddress, uint length, out List<ulong> failingLbas,
public bool? VerifySectors(ulong sectorAddress, uint length, out List<ulong> failingLbas,
out List<ulong> unknownLbas)
{
byte[] buffer = ReadSectorsLong(sectorAddress, length);
@@ -68,19 +70,22 @@ namespace Aaru.DiscImages
{
case null:
unknownLbas.Add((ulong)i + sectorAddress);
break;
case false:
failingLbas.Add((ulong)i + sectorAddress);
break;
}
}
if(unknownLbas.Count > 0) return null;
if(unknownLbas.Count > 0)
return null;
return failingLbas.Count <= 0;
}
public bool? VerifySectors(ulong sectorAddress, uint length, uint track, out List<ulong> failingLbas,
public bool? VerifySectors(ulong sectorAddress, uint length, uint track, out List<ulong> failingLbas,
out List<ulong> unknownLbas)
{
byte[] buffer = ReadSectorsLong(sectorAddress, length, track);
@@ -98,14 +103,17 @@ namespace Aaru.DiscImages
{
case null:
unknownLbas.Add((ulong)i + sectorAddress);
break;
case false:
failingLbas.Add((ulong)i + sectorAddress);
break;
}
}
if(unknownLbas.Count > 0) return null;
if(unknownLbas.Count > 0)
return null;
return failingLbas.Count <= 0;
}