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("");