diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs index 91b47588c..12c46597b 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs @@ -829,7 +829,7 @@ namespace Aaru.Core.Devices.Dumping _outputPlugin.WriteSectorTag(new[] { kvp.Value - }, track.TrackStartSector, SectorTagType.CdTrackFlags); + }, kvp.Key, SectorTagType.CdTrackFlags); } // Set MCN @@ -1144,9 +1144,7 @@ namespace Aaru.Core.Devices.Dumping foreach(KeyValuePair isrc in isrcs) { // TODO: Track tags - Track track = tracks.First(t => t.TrackSequence == isrc.Key); - - if(!_outputPlugin.WriteSectorTag(Encoding.ASCII.GetBytes(isrc.Value), track.TrackStartSector, + if(!_outputPlugin.WriteSectorTag(Encoding.ASCII.GetBytes(isrc.Value), isrc.Key, SectorTagType.CdTrackIsrc)) continue; diff --git a/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs b/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs index 0f1f22dce..e15523469 100644 --- a/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs @@ -790,15 +790,13 @@ namespace Aaru.Gui.ViewModels.Windows var metadata = new ImageInfo { - Application = "Aaru", ApplicationVersion = Version.GetVersion(), - Comments = CommentsText, - Creator = CreatorText, DriveFirmwareRevision = DriveFirmwareRevisionText, - DriveManufacturer = DriveManufacturerText, DriveModel = DriveModelText, + Application = "Aaru", ApplicationVersion = Version.GetVersion(), Comments = CommentsText, + Creator = CreatorText, DriveFirmwareRevision = DriveFirmwareRevisionText, + DriveManufacturer = DriveManufacturerText, DriveModel = DriveModelText, DriveSerialNumber = DriveSerialNumberText, LastMediaSequence = (int)LastMediaSequenceValue, - MediaBarcode = MediaBarcodeText, MediaManufacturer = MediaManufacturerText, - MediaModel = MediaModelText, - MediaPartNumber = MediaPartNumberText, MediaSequence = (int)MediaSequenceValue, - MediaSerialNumber = MediaSerialNumberText, MediaTitle = MediaTitleText + MediaBarcode = MediaBarcodeText, MediaManufacturer = MediaManufacturerText, MediaModel = MediaModelText, + MediaPartNumber = MediaPartNumberText, MediaSequence = (int)MediaSequenceValue, + MediaSerialNumber = MediaSerialNumberText, MediaTitle = MediaTitleText }; if(!cancel) @@ -1275,8 +1273,8 @@ namespace Aaru.Gui.ViewModels.Windows case SectorTagType.CdTrackFlags: case SectorTagType.CdTrackIsrc: - sector = inputFormat.ReadSectorTag(track.TrackStartSector, tag); - result = outputFormat.WriteSectorTag(sector, track.TrackStartSector, tag); + sector = inputFormat.ReadSectorTag(track.TrackSequence, tag); + result = outputFormat.WriteSectorTag(sector, track.TrackSequence, tag); if(!result) if(ForceChecked) diff --git a/Aaru.Images/AaruFormat/Read.cs b/Aaru.Images/AaruFormat/Read.cs index ab96fb1aa..52f6413b9 100644 --- a/Aaru.Images/AaruFormat/Read.cs +++ b/Aaru.Images/AaruFormat/Read.cs @@ -1337,12 +1337,12 @@ namespace Aaru.DiscImages case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSync: break; case SectorTagType.CdTrackFlags: - return trackFlags.TryGetValue((byte)trk.TrackSequence, out byte flags) ? new[] + return trackFlags.TryGetValue((byte)sectorAddress, out byte flags) ? new[] { flags } : null; 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; default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } diff --git a/Aaru.Images/AaruFormat/Write.cs b/Aaru.Images/AaruFormat/Write.cs index a8598057f..0f5a1b60b 100644 --- a/Aaru.Images/AaruFormat/Write.cs +++ b/Aaru.Images/AaruFormat/Write.cs @@ -3461,6 +3461,25 @@ namespace Aaru.DiscImages { case SectorTagType.CdTrackFlags: 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: if(imageInfo.XmlMediaType != XmlMediaType.OpticalDisc) { @@ -3495,7 +3514,7 @@ namespace Aaru.DiscImages return false; } - trackFlags.Add((byte)track.TrackSequence, data[0]); + trackFlags.Add((byte)sectorAddress, data[0]); return true; } @@ -3503,7 +3522,7 @@ namespace Aaru.DiscImages case SectorTagType.CdTrackIsrc: { if(data != null) - trackIsrcs.Add((byte)track.TrackSequence, Encoding.UTF8.GetString(data)); + trackIsrcs.Add((byte)sectorAddress, Encoding.UTF8.GetString(data)); return true; } diff --git a/Aaru.Images/Alcohol120/Read.cs b/Aaru.Images/Alcohol120/Read.cs index cf2c0355d..14bf11f0a 100644 --- a/Aaru.Images/Alcohol120/Read.cs +++ b/Aaru.Images/Alcohol120/Read.cs @@ -902,6 +902,9 @@ namespace Aaru.DiscImages 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) || !alcTrackExtras.TryGetValue((int)track, out AlcoholTrackExtra alcExtra)) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); @@ -1399,13 +1402,10 @@ namespace Aaru.DiscImages 1, alcTrack.startLba } }, - TrackStartSector = alcTrack.startLba, - TrackEndSector = alcExtra.sectors - 1, - TrackPregap = alcExtra.pregap, TrackSession = sessionNo, - TrackSequence = alcTrack.point, + TrackStartSector = alcTrack.startLba, TrackEndSector = alcExtra.sectors - 1, + TrackPregap = alcExtra.pregap, TrackSession = sessionNo, TrackSequence = alcTrack.point, TrackType = AlcoholTrackTypeToTrackType(alcTrack.mode), TrackFilter = alcImage, - TrackFile = alcImage.GetFilename(), - TrackFileOffset = alcTrack.startOffset, + TrackFile = alcImage.GetFilename(), TrackFileOffset = alcTrack.startOffset, TrackFileType = "BINARY", TrackRawBytesPerSector = alcTrack.sectorSize, TrackBytesPerSector = AlcoholTrackModeToCookedBytesPerSector(alcTrack.mode) }; diff --git a/Aaru.Images/Alcohol120/Write.cs b/Aaru.Images/Alcohol120/Write.cs index 2f046566c..b519b3c08 100644 --- a/Aaru.Images/Alcohol120/Write.cs +++ b/Aaru.Images/Alcohol120/Write.cs @@ -981,7 +981,7 @@ namespace Aaru.DiscImages return false; } - trackFlags.Add((byte)track.TrackSequence, data[0]); + trackFlags.Add((byte)sectorAddress, data[0]); return true; } diff --git a/Aaru.Images/BlindWrite4/Read.cs b/Aaru.Images/BlindWrite4/Read.cs index 06e8d4343..66501c6f9 100644 --- a/Aaru.Images/BlindWrite4/Read.cs +++ b/Aaru.Images/BlindWrite4/Read.cs @@ -992,7 +992,7 @@ namespace Aaru.DiscImages case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSync: break; case SectorTagType.CdTrackFlags: - if(trackFlags.TryGetValue(track, out byte flag)) + if(trackFlags.TryGetValue((uint)sectorAddress, out byte flag)) return new[] { flag diff --git a/Aaru.Images/BlindWrite5/Read.cs b/Aaru.Images/BlindWrite5/Read.cs index 9e7b8bcb4..19d5f81a1 100644 --- a/Aaru.Images/BlindWrite5/Read.cs +++ b/Aaru.Images/BlindWrite5/Read.cs @@ -1406,7 +1406,7 @@ namespace Aaru.DiscImages case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSync: break; case SectorTagType.CdTrackFlags: - if(trackFlags.TryGetValue(track, out byte flag)) + if(trackFlags.TryGetValue((uint)sectorAddress, out byte flag)) return new[] { flag diff --git a/Aaru.Images/CDRDAO/Read.cs b/Aaru.Images/CDRDAO/Read.cs index e9b3b1bad..22e7adf39 100644 --- a/Aaru.Images/CDRDAO/Read.cs +++ b/Aaru.Images/CDRDAO/Read.cs @@ -359,8 +359,7 @@ namespace Aaru.DiscImages string[] lengthString = matchPregap.Groups["address"].Value.Split(':'); currenttrack.Pregap = (ulong.Parse(lengthString[0]) * 60 * 75) + - (ulong.Parse(lengthString[1]) * 75) + - ulong.Parse(lengthString[2]); + (ulong.Parse(lengthString[1]) * 75) + ulong.Parse(lengthString[2]); } else currenttrack.Pregap = currenttrack.Sectors; @@ -1058,6 +1057,10 @@ namespace Aaru.DiscImages 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 { Sequence = 0 diff --git a/Aaru.Images/CDRDAO/Write.cs b/Aaru.Images/CDRDAO/Write.cs index 7e2dc3d7f..921a82a4d 100644 --- a/Aaru.Images/CDRDAO/Write.cs +++ b/Aaru.Images/CDRDAO/Write.cs @@ -659,14 +659,14 @@ namespace Aaru.DiscImages return false; } - trackFlags.Add((byte)track.TrackSequence, data[0]); + trackFlags.Add((byte)sectorAddress, data[0]); return true; } case SectorTagType.CdTrackIsrc: { if(data != null) - trackIsrcs.Add((byte)track.TrackSequence, Encoding.UTF8.GetString(data)); + trackIsrcs.Add((byte)sectorAddress, Encoding.UTF8.GetString(data)); return true; } diff --git a/Aaru.Images/CDRWin/Read.cs b/Aaru.Images/CDRWin/Read.cs index fea7cb7d7..6bbef912e 100644 --- a/Aaru.Images/CDRWin/Read.cs +++ b/Aaru.Images/CDRWin/Read.cs @@ -1518,6 +1518,10 @@ namespace Aaru.DiscImages 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 { Sequence = 0 diff --git a/Aaru.Images/CDRWin/Write.cs b/Aaru.Images/CDRWin/Write.cs index 86097d48e..ea220b9b0 100644 --- a/Aaru.Images/CDRWin/Write.cs +++ b/Aaru.Images/CDRWin/Write.cs @@ -571,14 +571,14 @@ namespace Aaru.DiscImages return false; } - _trackFlags.Add((byte)track.TrackSequence, data[0]); + _trackFlags.Add((byte)sectorAddress, data[0]); return true; } case SectorTagType.CdTrackIsrc: { if(data != null) - _trackIsrcs.Add((byte)track.TrackSequence, Encoding.UTF8.GetString(data)); + _trackIsrcs.Add((byte)sectorAddress, Encoding.UTF8.GetString(data)); return true; } diff --git a/Aaru.Images/CloneCD/Read.cs b/Aaru.Images/CloneCD/Read.cs index ae9162381..27536217a 100644 --- a/Aaru.Images/CloneCD/Read.cs +++ b/Aaru.Images/CloneCD/Read.cs @@ -939,6 +939,9 @@ namespace Aaru.DiscImages public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { + if(tag == SectorTagType.CdTrackFlags) + track = (uint)sectorAddress; + var aaruTrack = new Track { TrackSequence = 0 diff --git a/Aaru.Images/CloneCD/Write.cs b/Aaru.Images/CloneCD/Write.cs index 247624e7c..a361aea4c 100644 --- a/Aaru.Images/CloneCD/Write.cs +++ b/Aaru.Images/CloneCD/Write.cs @@ -340,12 +340,9 @@ namespace Aaru.DiscImages // Lead-out trackDescriptors.Add(new FullTOC.TrackDataDescriptor { - SessionNumber = currentSession, POINT = 0xB0, ADR = 5, - CONTROL = 0, - HOUR = 0, Min = leadoutAmsf.minute, Sec = leadoutAmsf.second, - Frame = leadoutAmsf.frame, - PHOUR = 2, PMIN = leadoutPmsf.minute, PSEC = leadoutPmsf.second, - PFRAME = leadoutPmsf.frame + SessionNumber = currentSession, POINT = 0xB0, ADR = 5, CONTROL = 0, + HOUR = 0, Min = leadoutAmsf.minute, Sec = leadoutAmsf.second, 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 @@ -384,10 +381,8 @@ namespace Aaru.DiscImages // Lead-out start trackDescriptors.Add(new FullTOC.TrackDataDescriptor { - SessionNumber = currentSession, POINT = 0xA2, ADR = 1, - CONTROL = trackControl, - PHOUR = 0, PMIN = leadinPmsf.minute, PSEC = leadinPmsf.second, - PFRAME = leadinPmsf.frame + SessionNumber = currentSession, POINT = 0xA2, ADR = 1, CONTROL = trackControl, + PHOUR = 0, PMIN = leadinPmsf.minute, PSEC = leadinPmsf.second, PFRAME = leadinPmsf.frame }); } @@ -397,8 +392,7 @@ namespace Aaru.DiscImages trackDescriptors.Add(new FullTOC.TrackDataDescriptor { SessionNumber = (byte)track.TrackSession, POINT = (byte)track.TrackSequence, ADR = 1, - CONTROL = trackControl, PHOUR = 0, PMIN = pmsf.minute, - PSEC = pmsf.second, + CONTROL = trackControl, PHOUR = 0, PMIN = pmsf.minute, PSEC = pmsf.second, PFRAME = pmsf.frame }); } @@ -511,7 +505,7 @@ namespace Aaru.DiscImages return false; } - trackFlags.Add((byte)track.TrackSequence, data[0]); + trackFlags.Add((byte)sectorAddress, data[0]); return true; } @@ -616,7 +610,7 @@ namespace Aaru.DiscImages subStream.Seek((long)(track.TrackSubchannelOffset + ((sectorAddress - track.TrackStartSector) * 96)), SeekOrigin.Begin); - subStream.Write(Decoders.CD.Subchannel.Deinterleave(data), 0, data.Length); + subStream.Write(Subchannel.Deinterleave(data), 0, data.Length); return true; } diff --git a/Aaru.Images/DiscJuggler/Read.cs b/Aaru.Images/DiscJuggler/Read.cs index dc9198382..faf786a7d 100644 --- a/Aaru.Images/DiscJuggler/Read.cs +++ b/Aaru.Images/DiscJuggler/Read.cs @@ -844,6 +844,9 @@ namespace Aaru.DiscImages public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { + if(tag == SectorTagType.CdTrackFlags) + track = (uint)sectorAddress; + var aaruTrack = new Track { TrackSequence = 0 diff --git a/Aaru.Images/GDI/Read.cs b/Aaru.Images/GDI/Read.cs index 15df3b8ae..b83b948fd 100644 --- a/Aaru.Images/GDI/Read.cs +++ b/Aaru.Images/GDI/Read.cs @@ -479,6 +479,9 @@ namespace Aaru.DiscImages public byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { + if(tag == SectorTagType.CdTrackFlags) + track = (uint)sectorAddress; + if(track == 0) { if(sectorAddress + length > densitySeparationSectors) @@ -825,13 +828,11 @@ namespace Aaru.DiscImages { var track = new Track { - Indexes = new Dictionary(), TrackDescription = null, - TrackStartSector = gdiTrack.StartSector, TrackPregap = gdiTrack.Pregap, + Indexes = new Dictionary(), TrackDescription = null, + TrackStartSector = gdiTrack.StartSector, TrackPregap = gdiTrack.Pregap, TrackSession = (ushort)(gdiTrack.HighDensity ? 2 : 1), TrackSequence = gdiTrack.Sequence, - TrackType = gdiTrack.Tracktype, - TrackFilter = gdiTrack.Trackfilter, - TrackFile = gdiTrack.Trackfile, - TrackFileOffset = (ulong)gdiTrack.Offset, + TrackType = gdiTrack.Tracktype, TrackFilter = gdiTrack.Trackfilter, + TrackFile = gdiTrack.Trackfile, TrackFileOffset = (ulong)gdiTrack.Offset, TrackFileType = "BINARY", TrackRawBytesPerSector = gdiTrack.Bps, TrackBytesPerSector = gdiTrack.Tracktype == TrackType.Data ? 2048 : 2352, TrackSubchannelType = TrackSubchannelType.None diff --git a/Aaru.Images/Nero/Read.cs b/Aaru.Images/Nero/Read.cs index 3756c71b5..d22342649 100644 --- a/Aaru.Images/Nero/Read.cs +++ b/Aaru.Images/Nero/Read.cs @@ -314,12 +314,10 @@ namespace Aaru.DiscImages var neroTrack = new NeroTrack { - EndOfTrack = entry.EndOfTrack, Isrc = entry.Isrc, - Length = entry.EndOfTrack - entry.Index0, Mode = entry.Mode, - Offset = entry.Index0, - SectorSize = entry.SectorSize, StartLba = imageInfo.Sectors, - Index0 = entry.Index0, - Index1 = entry.Index1, Sequence = currenttrack + EndOfTrack = entry.EndOfTrack, Isrc = entry.Isrc, + Length = entry.EndOfTrack - entry.Index0, Mode = entry.Mode, Offset = entry.Index0, + SectorSize = entry.SectorSize, StartLba = imageInfo.Sectors, Index0 = entry.Index0, + Index1 = entry.Index1, Sequence = currenttrack }; neroTrack.Sectors = neroTrack.Length / entry.SectorSize; @@ -425,12 +423,10 @@ namespace Aaru.DiscImages var neroTrack = new NeroTrack { - EndOfTrack = entry.EndOfTrack, Isrc = entry.Isrc, - Length = entry.EndOfTrack - entry.Index0, Mode = entry.Mode, - Offset = entry.Index0, - SectorSize = entry.SectorSize, StartLba = imageInfo.Sectors, - Index0 = entry.Index0, - Index1 = entry.Index1, Sequence = currenttrack + EndOfTrack = entry.EndOfTrack, Isrc = entry.Isrc, + Length = entry.EndOfTrack - entry.Index0, Mode = entry.Mode, Offset = entry.Index0, + SectorSize = entry.SectorSize, StartLba = imageInfo.Sectors, Index0 = entry.Index0, + Index1 = entry.Index1, Sequence = currenttrack }; neroTrack.Sectors = neroTrack.Length / entry.SectorSize; @@ -960,11 +956,9 @@ namespace Aaru.DiscImages var partition = new Partition { Description = $"Track {track.TrackSequence} Index 1", - Size = neroTrack.EndOfTrack - neroTrack.Index1, - Name = StringHandlers.CToString(neroTrack.Isrc), - Sequence = partitionSequence, Offset = partitionStartByte, - Start = neroTrack.StartLba + - ((neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize), + Size = neroTrack.EndOfTrack - neroTrack.Index1, Name = StringHandlers.CToString(neroTrack.Isrc), + Sequence = partitionSequence, Offset = partitionStartByte, + Start = neroTrack.StartLba + ((neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize), Type = NeroTrackModeToTrackType((DaoMode)neroTrack.Mode).ToString() }; @@ -992,13 +986,11 @@ namespace Aaru.DiscImages (DaoMode)neroTracks.ElementAt(i).Value.Mode == DaoMode.AudioSub); // First track is data - firstdata |= i == 0 && - (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio && + firstdata |= i == 0 && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub; // Any non first track is data - data |= i != 0 && - (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio && + data |= i != 0 && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub; // Any non first track is audio @@ -1226,6 +1218,10 @@ namespace Aaru.DiscImages 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)) throw new ArgumentOutOfRangeException(nameof(track), "Track not found"); diff --git a/Aaru/Commands/Image/Convert.cs b/Aaru/Commands/Image/Convert.cs index 9ad6178ac..cf24038eb 100644 --- a/Aaru/Commands/Image/Convert.cs +++ b/Aaru/Commands/Image/Convert.cs @@ -526,22 +526,20 @@ namespace Aaru.Commands.Image var metadata = new ImageInfo { - Application = "Aaru", - ApplicationVersion = Version.GetVersion(), - Comments = comments ?? inputFormat.Info.Comments, - Creator = creator ?? inputFormat.Info.Creator, + Application = "Aaru", ApplicationVersion = Version.GetVersion(), + Comments = comments ?? inputFormat.Info.Comments, Creator = creator ?? inputFormat.Info.Creator, DriveFirmwareRevision = driveFirmwareRevision ?? inputFormat.Info.DriveFirmwareRevision, - DriveManufacturer = driveManufacturer ?? inputFormat.Info.DriveManufacturer, - DriveModel = driveModel ?? inputFormat.Info.DriveModel, - DriveSerialNumber = driveSerialNumber ?? inputFormat.Info.DriveSerialNumber, - LastMediaSequence = lastMediaSequence != 0 ? lastMediaSequence : inputFormat.Info.LastMediaSequence, - MediaBarcode = mediaBarcode ?? inputFormat.Info.MediaBarcode, - MediaManufacturer = mediaManufacturer ?? inputFormat.Info.MediaManufacturer, - MediaModel = mediaModel ?? inputFormat.Info.MediaModel, - MediaPartNumber = mediaPartNumber ?? inputFormat.Info.MediaPartNumber, - MediaSequence = mediaSequence != 0 ? mediaSequence : inputFormat.Info.MediaSequence, - MediaSerialNumber = mediaSerialNumber ?? inputFormat.Info.MediaSerialNumber, - MediaTitle = mediaTitle ?? inputFormat.Info.MediaTitle + DriveManufacturer = driveManufacturer ?? inputFormat.Info.DriveManufacturer, + DriveModel = driveModel ?? inputFormat.Info.DriveModel, + DriveSerialNumber = driveSerialNumber ?? inputFormat.Info.DriveSerialNumber, + LastMediaSequence = lastMediaSequence != 0 ? lastMediaSequence : inputFormat.Info.LastMediaSequence, + MediaBarcode = mediaBarcode ?? inputFormat.Info.MediaBarcode, + MediaManufacturer = mediaManufacturer ?? inputFormat.Info.MediaManufacturer, + MediaModel = mediaModel ?? inputFormat.Info.MediaModel, + MediaPartNumber = mediaPartNumber ?? inputFormat.Info.MediaPartNumber, + MediaSequence = mediaSequence != 0 ? mediaSequence : inputFormat.Info.MediaSequence, + MediaSerialNumber = mediaSerialNumber ?? inputFormat.Info.MediaSerialNumber, + MediaTitle = mediaTitle ?? inputFormat.Info.MediaTitle }; if(!outputFormat.SetMetadata(metadata)) @@ -729,8 +727,8 @@ namespace Aaru.Commands.Image track.TrackSequence, track.TrackSequence / (double)inputOptical.Tracks.Count); - sector = inputFormat.ReadSectorTag(track.TrackStartSector, tag); - result = outputFormat.WriteSectorTag(sector, track.TrackStartSector, tag); + sector = inputFormat.ReadSectorTag(track.TrackSequence, tag); + result = outputFormat.WriteSectorTag(sector, track.TrackSequence, tag); if(!result) if(force)