From a4652c517e19da2b6cd42b2b21c4506972e038e3 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 23 Jun 2021 20:47:06 +0100 Subject: [PATCH] Decode pre-recorded information from DVD-R(W). --- Aaru.Core/Media/Info/ScsiInfo.cs | 15 ++++++++++++--- Aaru.Decoders | 2 +- Aaru/Commands/Media/Info.cs | 6 ++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Aaru.Core/Media/Info/ScsiInfo.cs b/Aaru.Core/Media/Info/ScsiInfo.cs index 3deafdf6c..b4fc06ad3 100644 --- a/Aaru.Core/Media/Info/ScsiInfo.cs +++ b/Aaru.Core/Media/Info/ScsiInfo.cs @@ -789,8 +789,10 @@ namespace Aaru.Core.Media.Info #endregion Require drive authentication, won't work #region DVD-R and DVD-RW - if(MediaType == MediaType.DVDR || - MediaType == MediaType.DVDRW) + if(MediaType == MediaType.DVDR || + MediaType == MediaType.DVDRW || + MediaType == MediaType.DVDRDL || + MediaType == MediaType.DVDRWDL) { sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, MmcDiscStructureFormat.PreRecordedInfo, 0, dev.Timeout, out _); @@ -799,7 +801,11 @@ namespace Aaru.Core.Media.Info AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Pre-Recorded Info\n{0}", Sense.PrettifySense(senseBuf)); else + { DvdPreRecordedInfo = cmdBuf; + + DecodedDvdPrePitInformation = PRI.Decode(cmdBuf); + } } #endregion DVD-R and DVD-RW @@ -808,6 +814,8 @@ namespace Aaru.Core.Media.Info #region DVD-R, DVD-RW and HD DVD-R case MediaType.DVDR: case MediaType.DVDRW: + case MediaType.DVDRDL: + case MediaType.DVDRWDL: case MediaType.HDDVDR: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, MmcDiscStructureFormat.DvdrMediaIdentifier, 0, dev.Timeout, @@ -1471,7 +1479,8 @@ namespace Aaru.Core.Media.Info MediaType = tmpType; } - public PFI.PhysicalFormatInformation? DecodedDvdrPfi { get; set; } + public PRI.PreRecordedInformation? DecodedDvdPrePitInformation { get; } + public PFI.PhysicalFormatInformation? DecodedDvdrPfi { get; } public byte[] MediaSerialNumber { get; } public byte[] XboxSecuritySector { get; } public SS.SecuritySector? DecodedXboxSecuritySector { get; } diff --git a/Aaru.Decoders b/Aaru.Decoders index 6e22b04ed..f77f3a8e5 160000 --- a/Aaru.Decoders +++ b/Aaru.Decoders @@ -1 +1 @@ -Subproject commit 6e22b04ed030a4971977e35db9c95631f32bda0a +Subproject commit f77f3a8e5b06d17b609bdfaf251f3f9d589aefcc diff --git a/Aaru/Commands/Media/Info.cs b/Aaru/Commands/Media/Info.cs index f744fb72b..6961b13f7 100644 --- a/Aaru/Commands/Media/Info.cs +++ b/Aaru/Commands/Media/Info.cs @@ -341,9 +341,15 @@ namespace Aaru.Commands.Media "SCSI READ DISC STRUCTURE", scsiInfo.LastBorderOutRmd); if(scsiInfo.DvdPreRecordedInfo != null) + { DataFile.WriteTo("Media-Info command", outputPrefix, "_readdiscstructure_dvd_pri.bin", "SCSI READ DISC STRUCTURE", scsiInfo.DvdPreRecordedInfo); + if(scsiInfo.DecodedDvdPrePitInformation.HasValue) + AaruConsole.WriteLine("DVD-R(W) Pre-Recorded Information:\n{0}", + PRI.Prettify(scsiInfo.DecodedDvdPrePitInformation)); + } + if(scsiInfo.DvdrMediaIdentifier != null) DataFile.WriteTo("Media-Info command", outputPrefix, "_readdiscstructure_dvdr_mediaid.bin", "SCSI READ DISC STRUCTURE", scsiInfo.DvdrMediaIdentifier);