Change how ISRC and track flags are read from / written to images, to use track number instead of track start.

This commit is contained in:
2020-06-14 23:45:26 +01:00
parent 5013718280
commit d1a970698e
18 changed files with 108 additions and 91 deletions

View File

@@ -829,7 +829,7 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorTag(new[] _outputPlugin.WriteSectorTag(new[]
{ {
kvp.Value kvp.Value
}, track.TrackStartSector, SectorTagType.CdTrackFlags); }, kvp.Key, SectorTagType.CdTrackFlags);
} }
// Set MCN // Set MCN
@@ -1144,9 +1144,7 @@ namespace Aaru.Core.Devices.Dumping
foreach(KeyValuePair<byte, string> isrc in isrcs) foreach(KeyValuePair<byte, string> isrc in isrcs)
{ {
// TODO: Track tags // TODO: Track tags
Track track = tracks.First(t => t.TrackSequence == isrc.Key); if(!_outputPlugin.WriteSectorTag(Encoding.ASCII.GetBytes(isrc.Value), isrc.Key,
if(!_outputPlugin.WriteSectorTag(Encoding.ASCII.GetBytes(isrc.Value), track.TrackStartSector,
SectorTagType.CdTrackIsrc)) SectorTagType.CdTrackIsrc))
continue; continue;

View File

@@ -790,13 +790,11 @@ namespace Aaru.Gui.ViewModels.Windows
var metadata = new ImageInfo var metadata = new ImageInfo
{ {
Application = "Aaru", ApplicationVersion = Version.GetVersion(), Application = "Aaru", ApplicationVersion = Version.GetVersion(), Comments = CommentsText,
Comments = CommentsText,
Creator = CreatorText, DriveFirmwareRevision = DriveFirmwareRevisionText, Creator = CreatorText, DriveFirmwareRevision = DriveFirmwareRevisionText,
DriveManufacturer = DriveManufacturerText, DriveModel = DriveModelText, DriveManufacturer = DriveManufacturerText, DriveModel = DriveModelText,
DriveSerialNumber = DriveSerialNumberText, LastMediaSequence = (int)LastMediaSequenceValue, DriveSerialNumber = DriveSerialNumberText, LastMediaSequence = (int)LastMediaSequenceValue,
MediaBarcode = MediaBarcodeText, MediaManufacturer = MediaManufacturerText, MediaBarcode = MediaBarcodeText, MediaManufacturer = MediaManufacturerText, MediaModel = MediaModelText,
MediaModel = MediaModelText,
MediaPartNumber = MediaPartNumberText, MediaSequence = (int)MediaSequenceValue, MediaPartNumber = MediaPartNumberText, MediaSequence = (int)MediaSequenceValue,
MediaSerialNumber = MediaSerialNumberText, MediaTitle = MediaTitleText MediaSerialNumber = MediaSerialNumberText, MediaTitle = MediaTitleText
}; };
@@ -1275,8 +1273,8 @@ namespace Aaru.Gui.ViewModels.Windows
case SectorTagType.CdTrackFlags: case SectorTagType.CdTrackFlags:
case SectorTagType.CdTrackIsrc: case SectorTagType.CdTrackIsrc:
sector = inputFormat.ReadSectorTag(track.TrackStartSector, tag); sector = inputFormat.ReadSectorTag(track.TrackSequence, tag);
result = outputFormat.WriteSectorTag(sector, track.TrackStartSector, tag); result = outputFormat.WriteSectorTag(sector, track.TrackSequence, tag);
if(!result) if(!result)
if(ForceChecked) if(ForceChecked)

View File

@@ -1337,12 +1337,12 @@ namespace Aaru.DiscImages
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
case SectorTagType.CdSectorSync: break; case SectorTagType.CdSectorSync: break;
case SectorTagType.CdTrackFlags: case SectorTagType.CdTrackFlags:
return trackFlags.TryGetValue((byte)trk.TrackSequence, out byte flags) ? new[] return trackFlags.TryGetValue((byte)sectorAddress, out byte flags) ? new[]
{ {
flags flags
} : null; } : null;
case SectorTagType.CdTrackIsrc: case SectorTagType.CdTrackIsrc:
return trackIsrcs.TryGetValue((byte)trk.TrackSequence, out string isrc) return trackIsrcs.TryGetValue((byte)sectorAddress, out string isrc)
? Encoding.UTF8.GetBytes(isrc) : null; ? Encoding.UTF8.GetBytes(isrc) : null;
default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); default: throw new ArgumentException("Unsupported tag requested", nameof(tag));
} }

View File

@@ -3461,6 +3461,25 @@ namespace Aaru.DiscImages
{ {
case SectorTagType.CdTrackFlags: case SectorTagType.CdTrackFlags:
case SectorTagType.CdTrackIsrc: case SectorTagType.CdTrackIsrc:
if(imageInfo.XmlMediaType != XmlMediaType.OpticalDisc)
{
ErrorMessage = "Incorrect tag for disk type";
return false;
}
track = Tracks.FirstOrDefault(trk => sectorAddress == trk.TrackSequence);
if(track.TrackSequence == 0 &&
track.TrackStartSector == 0 &&
track.TrackEndSector == 0)
{
ErrorMessage = $"Can't find track {sectorAddress}";
return false;
}
break;
case SectorTagType.CdSectorSubchannel: case SectorTagType.CdSectorSubchannel:
if(imageInfo.XmlMediaType != XmlMediaType.OpticalDisc) if(imageInfo.XmlMediaType != XmlMediaType.OpticalDisc)
{ {
@@ -3495,7 +3514,7 @@ namespace Aaru.DiscImages
return false; return false;
} }
trackFlags.Add((byte)track.TrackSequence, data[0]); trackFlags.Add((byte)sectorAddress, data[0]);
return true; return true;
} }
@@ -3503,7 +3522,7 @@ namespace Aaru.DiscImages
case SectorTagType.CdTrackIsrc: case SectorTagType.CdTrackIsrc:
{ {
if(data != null) if(data != null)
trackIsrcs.Add((byte)track.TrackSequence, Encoding.UTF8.GetString(data)); trackIsrcs.Add((byte)sectorAddress, Encoding.UTF8.GetString(data));
return true; return true;
} }

View File

@@ -902,6 +902,9 @@ namespace Aaru.DiscImages
public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag)
{ {
if(tag == SectorTagType.CdTrackFlags)
track = (uint)sectorAddress;
if(!alcTracks.TryGetValue((int)track, out AlcoholTrack alcTrack) || if(!alcTracks.TryGetValue((int)track, out AlcoholTrack alcTrack) ||
!alcTrackExtras.TryGetValue((int)track, out AlcoholTrackExtra alcExtra)) !alcTrackExtras.TryGetValue((int)track, out AlcoholTrackExtra alcExtra))
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
@@ -1399,13 +1402,10 @@ namespace Aaru.DiscImages
1, alcTrack.startLba 1, alcTrack.startLba
} }
}, },
TrackStartSector = alcTrack.startLba, TrackStartSector = alcTrack.startLba, TrackEndSector = alcExtra.sectors - 1,
TrackEndSector = alcExtra.sectors - 1, TrackPregap = alcExtra.pregap, TrackSession = sessionNo, TrackSequence = alcTrack.point,
TrackPregap = alcExtra.pregap, TrackSession = sessionNo,
TrackSequence = alcTrack.point,
TrackType = AlcoholTrackTypeToTrackType(alcTrack.mode), TrackFilter = alcImage, TrackType = AlcoholTrackTypeToTrackType(alcTrack.mode), TrackFilter = alcImage,
TrackFile = alcImage.GetFilename(), TrackFile = alcImage.GetFilename(), TrackFileOffset = alcTrack.startOffset,
TrackFileOffset = alcTrack.startOffset,
TrackFileType = "BINARY", TrackRawBytesPerSector = alcTrack.sectorSize, TrackFileType = "BINARY", TrackRawBytesPerSector = alcTrack.sectorSize,
TrackBytesPerSector = AlcoholTrackModeToCookedBytesPerSector(alcTrack.mode) TrackBytesPerSector = AlcoholTrackModeToCookedBytesPerSector(alcTrack.mode)
}; };

View File

@@ -981,7 +981,7 @@ namespace Aaru.DiscImages
return false; return false;
} }
trackFlags.Add((byte)track.TrackSequence, data[0]); trackFlags.Add((byte)sectorAddress, data[0]);
return true; return true;
} }

View File

@@ -992,7 +992,7 @@ namespace Aaru.DiscImages
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
case SectorTagType.CdSectorSync: break; case SectorTagType.CdSectorSync: break;
case SectorTagType.CdTrackFlags: case SectorTagType.CdTrackFlags:
if(trackFlags.TryGetValue(track, out byte flag)) if(trackFlags.TryGetValue((uint)sectorAddress, out byte flag))
return new[] return new[]
{ {
flag flag

View File

@@ -1406,7 +1406,7 @@ namespace Aaru.DiscImages
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
case SectorTagType.CdSectorSync: break; case SectorTagType.CdSectorSync: break;
case SectorTagType.CdTrackFlags: case SectorTagType.CdTrackFlags:
if(trackFlags.TryGetValue(track, out byte flag)) if(trackFlags.TryGetValue((uint)sectorAddress, out byte flag))
return new[] return new[]
{ {
flag flag

View File

@@ -359,8 +359,7 @@ namespace Aaru.DiscImages
string[] lengthString = matchPregap.Groups["address"].Value.Split(':'); string[] lengthString = matchPregap.Groups["address"].Value.Split(':');
currenttrack.Pregap = (ulong.Parse(lengthString[0]) * 60 * 75) + currenttrack.Pregap = (ulong.Parse(lengthString[0]) * 60 * 75) +
(ulong.Parse(lengthString[1]) * 75) + (ulong.Parse(lengthString[1]) * 75) + ulong.Parse(lengthString[2]);
ulong.Parse(lengthString[2]);
} }
else else
currenttrack.Pregap = currenttrack.Sectors; currenttrack.Pregap = currenttrack.Sectors;
@@ -1058,6 +1057,10 @@ namespace Aaru.DiscImages
public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag)
{ {
if(tag == SectorTagType.CdTrackFlags ||
tag == SectorTagType.CdTrackIsrc)
track = (uint)sectorAddress;
var aaruTrack = new CdrdaoTrack var aaruTrack = new CdrdaoTrack
{ {
Sequence = 0 Sequence = 0

View File

@@ -659,14 +659,14 @@ namespace Aaru.DiscImages
return false; return false;
} }
trackFlags.Add((byte)track.TrackSequence, data[0]); trackFlags.Add((byte)sectorAddress, data[0]);
return true; return true;
} }
case SectorTagType.CdTrackIsrc: case SectorTagType.CdTrackIsrc:
{ {
if(data != null) if(data != null)
trackIsrcs.Add((byte)track.TrackSequence, Encoding.UTF8.GetString(data)); trackIsrcs.Add((byte)sectorAddress, Encoding.UTF8.GetString(data));
return true; return true;
} }

View File

@@ -1518,6 +1518,10 @@ namespace Aaru.DiscImages
public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag)
{ {
if(tag == SectorTagType.CdTrackFlags ||
tag == SectorTagType.CdTrackIsrc)
track = (uint)sectorAddress;
var aaruTrack = new CdrWinTrack var aaruTrack = new CdrWinTrack
{ {
Sequence = 0 Sequence = 0

View File

@@ -571,14 +571,14 @@ namespace Aaru.DiscImages
return false; return false;
} }
_trackFlags.Add((byte)track.TrackSequence, data[0]); _trackFlags.Add((byte)sectorAddress, data[0]);
return true; return true;
} }
case SectorTagType.CdTrackIsrc: case SectorTagType.CdTrackIsrc:
{ {
if(data != null) if(data != null)
_trackIsrcs.Add((byte)track.TrackSequence, Encoding.UTF8.GetString(data)); _trackIsrcs.Add((byte)sectorAddress, Encoding.UTF8.GetString(data));
return true; return true;
} }

View File

@@ -939,6 +939,9 @@ namespace Aaru.DiscImages
public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag)
{ {
if(tag == SectorTagType.CdTrackFlags)
track = (uint)sectorAddress;
var aaruTrack = new Track var aaruTrack = new Track
{ {
TrackSequence = 0 TrackSequence = 0

View File

@@ -340,12 +340,9 @@ namespace Aaru.DiscImages
// Lead-out // Lead-out
trackDescriptors.Add(new FullTOC.TrackDataDescriptor trackDescriptors.Add(new FullTOC.TrackDataDescriptor
{ {
SessionNumber = currentSession, POINT = 0xB0, ADR = 5, SessionNumber = currentSession, POINT = 0xB0, ADR = 5, CONTROL = 0,
CONTROL = 0, HOUR = 0, Min = leadoutAmsf.minute, Sec = leadoutAmsf.second, Frame = leadoutAmsf.frame,
HOUR = 0, Min = leadoutAmsf.minute, Sec = leadoutAmsf.second, PHOUR = 2, PMIN = leadoutPmsf.minute, PSEC = leadoutPmsf.second, PFRAME = leadoutPmsf.frame
Frame = leadoutAmsf.frame,
PHOUR = 2, PMIN = leadoutPmsf.minute, PSEC = leadoutPmsf.second,
PFRAME = leadoutPmsf.frame
}); });
// This seems to be constant? It should not exist on CD-ROM but CloneCD creates them anyway // This seems to be constant? It should not exist on CD-ROM but CloneCD creates them anyway
@@ -384,10 +381,8 @@ namespace Aaru.DiscImages
// Lead-out start // Lead-out start
trackDescriptors.Add(new FullTOC.TrackDataDescriptor trackDescriptors.Add(new FullTOC.TrackDataDescriptor
{ {
SessionNumber = currentSession, POINT = 0xA2, ADR = 1, SessionNumber = currentSession, POINT = 0xA2, ADR = 1, CONTROL = trackControl,
CONTROL = trackControl, PHOUR = 0, PMIN = leadinPmsf.minute, PSEC = leadinPmsf.second, PFRAME = leadinPmsf.frame
PHOUR = 0, PMIN = leadinPmsf.minute, PSEC = leadinPmsf.second,
PFRAME = leadinPmsf.frame
}); });
} }
@@ -397,8 +392,7 @@ namespace Aaru.DiscImages
trackDescriptors.Add(new FullTOC.TrackDataDescriptor trackDescriptors.Add(new FullTOC.TrackDataDescriptor
{ {
SessionNumber = (byte)track.TrackSession, POINT = (byte)track.TrackSequence, ADR = 1, SessionNumber = (byte)track.TrackSession, POINT = (byte)track.TrackSequence, ADR = 1,
CONTROL = trackControl, PHOUR = 0, PMIN = pmsf.minute, CONTROL = trackControl, PHOUR = 0, PMIN = pmsf.minute, PSEC = pmsf.second,
PSEC = pmsf.second,
PFRAME = pmsf.frame PFRAME = pmsf.frame
}); });
} }
@@ -511,7 +505,7 @@ namespace Aaru.DiscImages
return false; return false;
} }
trackFlags.Add((byte)track.TrackSequence, data[0]); trackFlags.Add((byte)sectorAddress, data[0]);
return true; return true;
} }
@@ -616,7 +610,7 @@ namespace Aaru.DiscImages
subStream.Seek((long)(track.TrackSubchannelOffset + ((sectorAddress - track.TrackStartSector) * 96)), subStream.Seek((long)(track.TrackSubchannelOffset + ((sectorAddress - track.TrackStartSector) * 96)),
SeekOrigin.Begin); SeekOrigin.Begin);
subStream.Write(Decoders.CD.Subchannel.Deinterleave(data), 0, data.Length); subStream.Write(Subchannel.Deinterleave(data), 0, data.Length);
return true; return true;
} }

View File

@@ -844,6 +844,9 @@ namespace Aaru.DiscImages
public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag)
{ {
if(tag == SectorTagType.CdTrackFlags)
track = (uint)sectorAddress;
var aaruTrack = new Track var aaruTrack = new Track
{ {
TrackSequence = 0 TrackSequence = 0

View File

@@ -479,6 +479,9 @@ namespace Aaru.DiscImages
public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag)
{ {
if(tag == SectorTagType.CdTrackFlags)
track = (uint)sectorAddress;
if(track == 0) if(track == 0)
{ {
if(sectorAddress + length > densitySeparationSectors) if(sectorAddress + length > densitySeparationSectors)
@@ -828,10 +831,8 @@ namespace Aaru.DiscImages
Indexes = new Dictionary<int, ulong>(), TrackDescription = null, Indexes = new Dictionary<int, ulong>(), TrackDescription = null,
TrackStartSector = gdiTrack.StartSector, TrackPregap = gdiTrack.Pregap, TrackStartSector = gdiTrack.StartSector, TrackPregap = gdiTrack.Pregap,
TrackSession = (ushort)(gdiTrack.HighDensity ? 2 : 1), TrackSequence = gdiTrack.Sequence, TrackSession = (ushort)(gdiTrack.HighDensity ? 2 : 1), TrackSequence = gdiTrack.Sequence,
TrackType = gdiTrack.Tracktype, TrackType = gdiTrack.Tracktype, TrackFilter = gdiTrack.Trackfilter,
TrackFilter = gdiTrack.Trackfilter, TrackFile = gdiTrack.Trackfile, TrackFileOffset = (ulong)gdiTrack.Offset,
TrackFile = gdiTrack.Trackfile,
TrackFileOffset = (ulong)gdiTrack.Offset,
TrackFileType = "BINARY", TrackRawBytesPerSector = gdiTrack.Bps, TrackFileType = "BINARY", TrackRawBytesPerSector = gdiTrack.Bps,
TrackBytesPerSector = gdiTrack.Tracktype == TrackType.Data ? 2048 : 2352, TrackBytesPerSector = gdiTrack.Tracktype == TrackType.Data ? 2048 : 2352,
TrackSubchannelType = TrackSubchannelType.None TrackSubchannelType = TrackSubchannelType.None

View File

@@ -315,10 +315,8 @@ namespace Aaru.DiscImages
var neroTrack = new NeroTrack var neroTrack = new NeroTrack
{ {
EndOfTrack = entry.EndOfTrack, Isrc = entry.Isrc, EndOfTrack = entry.EndOfTrack, Isrc = entry.Isrc,
Length = entry.EndOfTrack - entry.Index0, Mode = entry.Mode, Length = entry.EndOfTrack - entry.Index0, Mode = entry.Mode, Offset = entry.Index0,
Offset = entry.Index0, SectorSize = entry.SectorSize, StartLba = imageInfo.Sectors, Index0 = entry.Index0,
SectorSize = entry.SectorSize, StartLba = imageInfo.Sectors,
Index0 = entry.Index0,
Index1 = entry.Index1, Sequence = currenttrack Index1 = entry.Index1, Sequence = currenttrack
}; };
@@ -426,10 +424,8 @@ namespace Aaru.DiscImages
var neroTrack = new NeroTrack var neroTrack = new NeroTrack
{ {
EndOfTrack = entry.EndOfTrack, Isrc = entry.Isrc, EndOfTrack = entry.EndOfTrack, Isrc = entry.Isrc,
Length = entry.EndOfTrack - entry.Index0, Mode = entry.Mode, Length = entry.EndOfTrack - entry.Index0, Mode = entry.Mode, Offset = entry.Index0,
Offset = entry.Index0, SectorSize = entry.SectorSize, StartLba = imageInfo.Sectors, Index0 = entry.Index0,
SectorSize = entry.SectorSize, StartLba = imageInfo.Sectors,
Index0 = entry.Index0,
Index1 = entry.Index1, Sequence = currenttrack Index1 = entry.Index1, Sequence = currenttrack
}; };
@@ -960,11 +956,9 @@ namespace Aaru.DiscImages
var partition = new Partition var partition = new Partition
{ {
Description = $"Track {track.TrackSequence} Index 1", Description = $"Track {track.TrackSequence} Index 1",
Size = neroTrack.EndOfTrack - neroTrack.Index1, Size = neroTrack.EndOfTrack - neroTrack.Index1, Name = StringHandlers.CToString(neroTrack.Isrc),
Name = StringHandlers.CToString(neroTrack.Isrc),
Sequence = partitionSequence, Offset = partitionStartByte, Sequence = partitionSequence, Offset = partitionStartByte,
Start = neroTrack.StartLba + Start = neroTrack.StartLba + ((neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize),
((neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize),
Type = NeroTrackModeToTrackType((DaoMode)neroTrack.Mode).ToString() Type = NeroTrackModeToTrackType((DaoMode)neroTrack.Mode).ToString()
}; };
@@ -992,13 +986,11 @@ namespace Aaru.DiscImages
(DaoMode)neroTracks.ElementAt(i).Value.Mode == DaoMode.AudioSub); (DaoMode)neroTracks.ElementAt(i).Value.Mode == DaoMode.AudioSub);
// First track is data // First track is data
firstdata |= i == 0 && firstdata |= i == 0 && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio &&
(DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio &&
(DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub; (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub;
// Any non first track is data // Any non first track is data
data |= i != 0 && data |= i != 0 && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio &&
(DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio &&
(DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub; (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub;
// Any non first track is audio // Any non first track is audio
@@ -1226,6 +1218,10 @@ namespace Aaru.DiscImages
public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag)
{ {
if(tag == SectorTagType.CdTrackFlags ||
tag == SectorTagType.CdTrackIsrc)
track = (uint)sectorAddress;
if(!neroTracks.TryGetValue(track, out NeroTrack aaruTrack)) if(!neroTracks.TryGetValue(track, out NeroTrack aaruTrack))
throw new ArgumentOutOfRangeException(nameof(track), "Track not found"); throw new ArgumentOutOfRangeException(nameof(track), "Track not found");

View File

@@ -526,10 +526,8 @@ namespace Aaru.Commands.Image
var metadata = new ImageInfo var metadata = new ImageInfo
{ {
Application = "Aaru", Application = "Aaru", ApplicationVersion = Version.GetVersion(),
ApplicationVersion = Version.GetVersion(), Comments = comments ?? inputFormat.Info.Comments, Creator = creator ?? inputFormat.Info.Creator,
Comments = comments ?? inputFormat.Info.Comments,
Creator = creator ?? inputFormat.Info.Creator,
DriveFirmwareRevision = driveFirmwareRevision ?? inputFormat.Info.DriveFirmwareRevision, DriveFirmwareRevision = driveFirmwareRevision ?? inputFormat.Info.DriveFirmwareRevision,
DriveManufacturer = driveManufacturer ?? inputFormat.Info.DriveManufacturer, DriveManufacturer = driveManufacturer ?? inputFormat.Info.DriveManufacturer,
DriveModel = driveModel ?? inputFormat.Info.DriveModel, DriveModel = driveModel ?? inputFormat.Info.DriveModel,
@@ -729,8 +727,8 @@ namespace Aaru.Commands.Image
track.TrackSequence, track.TrackSequence,
track.TrackSequence / (double)inputOptical.Tracks.Count); track.TrackSequence / (double)inputOptical.Tracks.Count);
sector = inputFormat.ReadSectorTag(track.TrackStartSector, tag); sector = inputFormat.ReadSectorTag(track.TrackSequence, tag);
result = outputFormat.WriteSectorTag(sector, track.TrackStartSector, tag); result = outputFormat.WriteSectorTag(sector, track.TrackSequence, tag);
if(!result) if(!result)
if(force) if(force)