Do not calculate pregaps on non-CD optical disc images. Fixes #371

This commit is contained in:
2020-07-12 23:13:05 +01:00
parent 6f3f324742
commit a5f5517007
8 changed files with 169 additions and 9 deletions

View File

@@ -1230,6 +1230,54 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("Aaru Format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false));
if(imageInfo.XmlMediaType != XmlMediaType.OpticalDisc)
return true;
if(imageInfo.MediaType != MediaType.CD &&
imageInfo.MediaType != MediaType.CDDA &&
imageInfo.MediaType != MediaType.CDG &&
imageInfo.MediaType != MediaType.CDEG &&
imageInfo.MediaType != MediaType.CDI &&
imageInfo.MediaType != MediaType.CDROM &&
imageInfo.MediaType != MediaType.CDROMXA &&
imageInfo.MediaType != MediaType.CDPLUS &&
imageInfo.MediaType != MediaType.CDMO &&
imageInfo.MediaType != MediaType.CDR &&
imageInfo.MediaType != MediaType.CDRW &&
imageInfo.MediaType != MediaType.CDMRW &&
imageInfo.MediaType != MediaType.VCD &&
imageInfo.MediaType != MediaType.SVCD &&
imageInfo.MediaType != MediaType.PCD &&
imageInfo.MediaType != MediaType.DTSCD &&
imageInfo.MediaType != MediaType.CDMIDI &&
imageInfo.MediaType != MediaType.CDV &&
imageInfo.MediaType != MediaType.CDIREADY &&
imageInfo.MediaType != MediaType.FMTOWNS &&
imageInfo.MediaType != MediaType.PS1CD &&
imageInfo.MediaType != MediaType.PS2CD &&
imageInfo.MediaType != MediaType.MEGACD &&
imageInfo.MediaType != MediaType.SATURNCD &&
imageInfo.MediaType != MediaType.GDROM &&
imageInfo.MediaType != MediaType.GDR &&
imageInfo.MediaType != MediaType.MilCD &&
imageInfo.MediaType != MediaType.SuperCDROM2 &&
imageInfo.MediaType != MediaType.JaguarCD &&
imageInfo.MediaType != MediaType.ThreeDO &&
imageInfo.MediaType != MediaType.PCFX &&
imageInfo.MediaType != MediaType.NeoGeoCD &&
imageInfo.MediaType != MediaType.CDTV &&
imageInfo.MediaType != MediaType.CD32 &&
imageInfo.MediaType != MediaType.Playdia &&
imageInfo.MediaType != MediaType.Pippin &&
imageInfo.MediaType != MediaType.VideoNow &&
imageInfo.MediaType != MediaType.VideoNowColor &&
imageInfo.MediaType != MediaType.VideoNowXp)
foreach(Track track in Tracks)
{
track.TrackPregap = 0;
track.Indexes?.Clear();
}
return true;
}

View File

@@ -50,6 +50,7 @@ namespace Aaru.DiscImages
FileStream descriptorStream;
byte[] dmi;
byte[] fullToc;
AlcoholHeader header;
ImageInfo imageInfo;
Stream imageStream;
bool isDvd;
@@ -61,14 +62,10 @@ namespace Aaru.DiscImages
public Alcohol120() => imageInfo = new ImageInfo
{
ReadableSectorTags = new List<SectorTagType>(), ReadableMediaTags = new List<MediaTagType>(),
HasPartitions = true, HasSessions = true, Version = null,
Application = null,
ApplicationVersion = null, Creator = null, Comments = null,
MediaManufacturer = null,
MediaModel = null, MediaSerialNumber = null, MediaBarcode = null,
MediaPartNumber = null,
MediaSequence = 0, LastMediaSequence = 0, DriveManufacturer = null,
DriveModel = null,
HasPartitions = true, HasSessions = true, Version = null, Application = null,
ApplicationVersion = null, Creator = null, Comments = null, MediaManufacturer = null,
MediaModel = null, MediaSerialNumber = null, MediaBarcode = null, MediaPartNumber = null,
MediaSequence = 0, LastMediaSequence = 0, DriveManufacturer = null, DriveModel = null,
DriveSerialNumber = null, DriveFirmwareRevision = null
};
}

View File

@@ -108,6 +108,14 @@ namespace Aaru.DiscImages
break;
}
if(header.type != AlcoholMediumType.CD &&
header.type != AlcoholMediumType.CDR &&
header.type != AlcoholMediumType.CDRW)
{
aaruTrack.TrackPregap = 0;
aaruTrack.Indexes?.Clear();
}
tracks.Add(aaruTrack);
}

View File

@@ -62,7 +62,7 @@ namespace Aaru.DiscImages
isDvd = false;
byte[] hdr = new byte[88];
stream.Read(hdr, 0, 88);
AlcoholHeader header = Marshal.ByteArrayToStructureLittleEndian<AlcoholHeader>(hdr);
header = Marshal.ByteArrayToStructureLittleEndian<AlcoholHeader>(hdr);
AaruConsole.DebugWriteLine("Alcohol 120% plugin", "header.signature = {0}",
Encoding.ASCII.GetString(header.signature));

View File

@@ -1131,6 +1131,15 @@ namespace Aaru.DiscImages
AaruConsole.VerboseWriteLine("BlindWrite image describes a disc of type {0}", imageInfo.MediaType);
if(header.profile != ProfileNumber.CDR &&
header.profile != ProfileNumber.CDRW &&
header.profile != ProfileNumber.CDROM)
foreach(Track track in Tracks)
{
track.TrackPregap = 0;
track.Indexes?.Clear();
}
return true;
}

View File

@@ -125,6 +125,50 @@ namespace Aaru.DiscImages
else
aaruTrack.TrackSubchannelType = TrackSubchannelType.None;
if(_imageInfo.MediaType != MediaType.CD &&
_imageInfo.MediaType != MediaType.CDDA &&
_imageInfo.MediaType != MediaType.CDG &&
_imageInfo.MediaType != MediaType.CDEG &&
_imageInfo.MediaType != MediaType.CDI &&
_imageInfo.MediaType != MediaType.CDROM &&
_imageInfo.MediaType != MediaType.CDROMXA &&
_imageInfo.MediaType != MediaType.CDPLUS &&
_imageInfo.MediaType != MediaType.CDMO &&
_imageInfo.MediaType != MediaType.CDR &&
_imageInfo.MediaType != MediaType.CDRW &&
_imageInfo.MediaType != MediaType.CDMRW &&
_imageInfo.MediaType != MediaType.VCD &&
_imageInfo.MediaType != MediaType.SVCD &&
_imageInfo.MediaType != MediaType.PCD &&
_imageInfo.MediaType != MediaType.DTSCD &&
_imageInfo.MediaType != MediaType.CDMIDI &&
_imageInfo.MediaType != MediaType.CDV &&
_imageInfo.MediaType != MediaType.CDIREADY &&
_imageInfo.MediaType != MediaType.FMTOWNS &&
_imageInfo.MediaType != MediaType.PS1CD &&
_imageInfo.MediaType != MediaType.PS2CD &&
_imageInfo.MediaType != MediaType.MEGACD &&
_imageInfo.MediaType != MediaType.SATURNCD &&
_imageInfo.MediaType != MediaType.GDROM &&
_imageInfo.MediaType != MediaType.GDR &&
_imageInfo.MediaType != MediaType.MilCD &&
_imageInfo.MediaType != MediaType.SuperCDROM2 &&
_imageInfo.MediaType != MediaType.JaguarCD &&
_imageInfo.MediaType != MediaType.ThreeDO &&
_imageInfo.MediaType != MediaType.PCFX &&
_imageInfo.MediaType != MediaType.NeoGeoCD &&
_imageInfo.MediaType != MediaType.CDTV &&
_imageInfo.MediaType != MediaType.CD32 &&
_imageInfo.MediaType != MediaType.Playdia &&
_imageInfo.MediaType != MediaType.Pippin &&
_imageInfo.MediaType != MediaType.VideoNow &&
_imageInfo.MediaType != MediaType.VideoNowColor &&
_imageInfo.MediaType != MediaType.VideoNowXp)
{
aaruTrack.TrackPregap = 0;
aaruTrack.Indexes?.Clear();
}
tracks.Add(aaruTrack);
previousStartSector = aaruTrack.TrackEndSector + 1;
}

View File

@@ -657,6 +657,8 @@ namespace Aaru.DiscImages
AaruConsole.DebugWriteLine("DiscJuggler plugin", "End position = {0}", position);
imageInfo.MediaType = DecodeCdiMediumType(mediumType);
if(imageInfo.MediaType == MediaType.CDROM)
{
bool data = false;
@@ -714,6 +716,13 @@ namespace Aaru.DiscImages
_sectorBuilder = new SectorBuilder();
if(mediumType != 152)
foreach(Track track in Tracks)
{
track.TrackPregap = 0;
track.Indexes?.Clear();
}
return true;
}

View File

@@ -1090,6 +1090,51 @@ namespace Aaru.DiscImages
_sectorBuilder = new SectorBuilder();
if(imageInfo.MediaType != MediaType.CD &&
imageInfo.MediaType != MediaType.CDDA &&
imageInfo.MediaType != MediaType.CDG &&
imageInfo.MediaType != MediaType.CDEG &&
imageInfo.MediaType != MediaType.CDI &&
imageInfo.MediaType != MediaType.CDROM &&
imageInfo.MediaType != MediaType.CDROMXA &&
imageInfo.MediaType != MediaType.CDPLUS &&
imageInfo.MediaType != MediaType.CDMO &&
imageInfo.MediaType != MediaType.CDR &&
imageInfo.MediaType != MediaType.CDRW &&
imageInfo.MediaType != MediaType.CDMRW &&
imageInfo.MediaType != MediaType.VCD &&
imageInfo.MediaType != MediaType.SVCD &&
imageInfo.MediaType != MediaType.PCD &&
imageInfo.MediaType != MediaType.DTSCD &&
imageInfo.MediaType != MediaType.CDMIDI &&
imageInfo.MediaType != MediaType.CDV &&
imageInfo.MediaType != MediaType.CDIREADY &&
imageInfo.MediaType != MediaType.FMTOWNS &&
imageInfo.MediaType != MediaType.PS1CD &&
imageInfo.MediaType != MediaType.PS2CD &&
imageInfo.MediaType != MediaType.MEGACD &&
imageInfo.MediaType != MediaType.SATURNCD &&
imageInfo.MediaType != MediaType.GDROM &&
imageInfo.MediaType != MediaType.GDR &&
imageInfo.MediaType != MediaType.MilCD &&
imageInfo.MediaType != MediaType.SuperCDROM2 &&
imageInfo.MediaType != MediaType.JaguarCD &&
imageInfo.MediaType != MediaType.ThreeDO &&
imageInfo.MediaType != MediaType.PCFX &&
imageInfo.MediaType != MediaType.NeoGeoCD &&
imageInfo.MediaType != MediaType.CDTV &&
imageInfo.MediaType != MediaType.CD32 &&
imageInfo.MediaType != MediaType.Playdia &&
imageInfo.MediaType != MediaType.Pippin &&
imageInfo.MediaType != MediaType.VideoNow &&
imageInfo.MediaType != MediaType.VideoNowColor &&
imageInfo.MediaType != MediaType.VideoNowXp)
foreach(Track track in Tracks)
{
track.TrackPregap = 0;
track.Indexes?.Clear();
}
return true;
}
catch