mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Code restyling.
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user