From 75857860f255111cc93eeb90470d022ba75ee47e Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 6 Jan 2020 23:41:56 +0000 Subject: [PATCH] Save disc offset in metadata. --- DiscImageChef.Core/Devices/Dumping/CompactDisc/Dump.cs | 6 ++++-- DiscImageChef.Core/Devices/Dumping/Metadata.cs | 10 +++++++++- .../Devices/Dumping/PlayStationPortable.cs | 4 +--- DiscImageChef.Core/Devices/Dumping/SBC.cs | 2 +- DiscImageChef.Core/Devices/Dumping/XGD.cs | 2 +- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc/Dump.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc/Dump.cs index 577083131..8644a7530 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc/Dump.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc/Dump.cs @@ -71,6 +71,7 @@ namespace DiscImageChef.Core.Devices.Dumping byte[] cmdBuf; // Data buffer DumpHardwareType currentTry = null; // Current dump hardware try double currentSpeed = 0; // Current read speed + int? discOffset = null; // Disc write offset DateTime dumpStart = DateTime.UtcNow; // Time of dump start DateTime end; // Time of operation end ExtentsULong extents = null; // Extents @@ -919,7 +920,7 @@ namespace DiscImageChef.Core.Devices.Dumping _dumpLog.WriteLine($"Drive reading offset is {driveOffset} bytes ({driveOffset / 4} samples)."); UpdateStatus?.Invoke($"Drive reading offset is {driveOffset} bytes ({driveOffset / 4} samples)."); - int? discOffset = offsetBytes - driveOffset; + discOffset = offsetBytes - driveOffset; _dumpLog.WriteLine($"Disc offsets is {discOffset} bytes ({discOffset / 4} samples)"); @@ -1057,7 +1058,8 @@ namespace DiscImageChef.Core.Devices.Dumping double totalChkDuration = 0; if(_metadata) - WriteOpticalSidecar(blockSize, blocks, dskType, null, mediaTags, sessions, out totalChkDuration); + WriteOpticalSidecar(blockSize, blocks, dskType, null, mediaTags, sessions, out totalChkDuration, + discOffset); end = DateTime.UtcNow; UpdateStatus?.Invoke(""); diff --git a/DiscImageChef.Core/Devices/Dumping/Metadata.cs b/DiscImageChef.Core/Devices/Dumping/Metadata.cs index 7ed94002c..b33f91775 100644 --- a/DiscImageChef.Core/Devices/Dumping/Metadata.cs +++ b/DiscImageChef.Core/Devices/Dumping/Metadata.cs @@ -54,8 +54,10 @@ namespace DiscImageChef.Core.Devices.Dumping /// Media tags /// Disc sessions /// Total time spent doing checksums + /// Disc write offset void WriteOpticalSidecar(uint blockSize, ulong blocks, MediaType mediaType, LayersType layers, - Dictionary mediaTags, int sessions, out double totalChkDuration) + Dictionary mediaTags, int sessions, out double totalChkDuration, + int? discOffset) { _dumpLog.WriteLine("Creating sidecar."); var filters = new FiltersList(); @@ -120,6 +122,12 @@ namespace DiscImageChef.Core.Devices.Dumping sidecar.OpticalDisc[0].Sessions = (uint)sessions; sidecar.OpticalDisc[0].Layers = layers; + if(discOffset.HasValue) + { + sidecar.OpticalDisc[0].Offset = (int)(discOffset / 4); + sidecar.OpticalDisc[0].OffsetSpecified = true; + } + if(mediaTags != null) foreach(KeyValuePair tag in mediaTags.Where(tag => _outputPlugin. SupportedMediaTags. diff --git a/DiscImageChef.Core/Devices/Dumping/PlayStationPortable.cs b/DiscImageChef.Core/Devices/Dumping/PlayStationPortable.cs index 02b27c01a..0451b0e0a 100644 --- a/DiscImageChef.Core/Devices/Dumping/PlayStationPortable.cs +++ b/DiscImageChef.Core/Devices/Dumping/PlayStationPortable.cs @@ -652,9 +652,7 @@ namespace DiscImageChef.Core.Devices.Dumping double totalChkDuration = 0; if(_metadata) - { - WriteOpticalSidecar(BLOCK_SIZE, blocks, DSK_TYPE, null, null, 1, out totalChkDuration); - } + WriteOpticalSidecar(BLOCK_SIZE, blocks, DSK_TYPE, null, null, 1, out totalChkDuration, null); UpdateStatus?.Invoke(""); diff --git a/DiscImageChef.Core/Devices/Dumping/SBC.cs b/DiscImageChef.Core/Devices/Dumping/SBC.cs index ba13e49b2..2d83e6606 100644 --- a/DiscImageChef.Core/Devices/Dumping/SBC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SBC.cs @@ -990,7 +990,7 @@ namespace DiscImageChef.Core.Devices.Dumping { // TODO: Layers if(opticalDisc) - WriteOpticalSidecar(blockSize, blocks, dskType, null, mediaTags, 1, out totalChkDuration); + WriteOpticalSidecar(blockSize, blocks, dskType, null, mediaTags, 1, out totalChkDuration, null); else { UpdateStatus?.Invoke("Creating sidecar."); diff --git a/DiscImageChef.Core/Devices/Dumping/XGD.cs b/DiscImageChef.Core/Devices/Dumping/XGD.cs index 318445917..810a035fe 100644 --- a/DiscImageChef.Core/Devices/Dumping/XGD.cs +++ b/DiscImageChef.Core/Devices/Dumping/XGD.cs @@ -1179,7 +1179,7 @@ namespace DiscImageChef.Core.Devices.Dumping Value = layerBreak }; - WriteOpticalSidecar(BLOCK_SIZE, blocks, dskType, layers, mediaTags, 1, out totalChkDuration); + WriteOpticalSidecar(BLOCK_SIZE, blocks, dskType, layers, mediaTags, 1, out totalChkDuration, null); } UpdateStatus?.Invoke("");