Add detection and media type for Ultra HD Blu-ray.

This commit is contained in:
2021-02-10 16:41:08 +00:00
parent 518d85eb12
commit 06910eabce
9 changed files with 60 additions and 42 deletions

View File

@@ -5,13 +5,6 @@
<inspection_tool class="GraziCommit" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>
<component name="GithubSharedProjectSettings">
<option name="branchProtectionPatterns">
<list>
<option value="master" />
</list>
</option>
</component>
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/Aaru.Checksums" vcs="Git" />

View File

@@ -46,9 +46,9 @@ using Aaru.Devices;
using Schemas;
using DDS = Aaru.Decoders.DVD.DDS;
using DMI = Aaru.Decoders.Xbox.DMI;
using DVDDecryption = Aaru.Decryption.DVD.Dump;
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
using Spare = Aaru.Decoders.DVD.Spare;
using DVDDecryption = Aaru.Decryption.DVD.Dump;
// ReSharper disable JoinDeclarationAndInitializer
@@ -768,6 +768,7 @@ namespace Aaru.Core.Devices.Dumping
case MediaType.BDROM:
case MediaType.BDRXL:
case MediaType.BDREXL:
case MediaType.UHDBD:
_dumpLog.WriteLine("Reading Disc Information.");
sense = _dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0,
@@ -800,6 +801,7 @@ namespace Aaru.Core.Devices.Dumping
{
#region BD-ROM only
case MediaType.BDROM:
case MediaType.UHDBD:
_dumpLog.WriteLine("Reading Burst Cutting Area.");
sense = _dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0,

View File

@@ -1003,8 +1003,10 @@ namespace Aaru.Core.Media.Detection
case MediaType.DVDROM:
case MediaType.HDDVDROM:
case MediaType.BDROM:
case MediaType.UHDBD:
case MediaType.Unknown:
if(mediaType == MediaType.BDROM)
if(mediaType == MediaType.BDROM ||
mediaType == MediaType.UHDBD)
{
sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0,
MmcDiscStructureFormat.DiscInformation, 0, dev.Timeout, out _);
@@ -1112,11 +1114,11 @@ namespace Aaru.Core.Media.Detection
}
}
if(mediaType == MediaType.DVDROM)
if(mediaType == MediaType.DVDROM)
{
sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0,
MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout,
out _);
MmcDiscStructureFormat.DiscManufacturingInformation, 0,
dev.Timeout, out _);
if(!sense)
{
@@ -1129,9 +1131,9 @@ namespace Aaru.Core.Media.Detection
return;
}
if(DMI.IsXbox360(cmdBuf))
{
// All XGD3 all have the same number of blocks
if(blocks == 25063 || // Locked (or non compatible drive)
blocks == 4229664 || // Xtreme unlock
@@ -1141,15 +1143,20 @@ namespace Aaru.Core.Media.Detection
"Found Xbox 360 DMI with {0} blocks, setting disc type to Xbox 360 Game Disc 3 (XGD3).");
mediaType = MediaType.XGD3;
return;
}
AaruConsole.DebugWriteLine("Media detection",
"Found Xbox 360 DMI with {0} blocks, setting disc type to Xbox 360 Game Disc 2 (XGD2).");
mediaType = MediaType.XGD2;
return;
return;
}
}
}
break;
// Recordables will be checked for PhotoCD only
@@ -2232,6 +2239,7 @@ namespace Aaru.Core.Media.Detection
case MediaType.DVDROM:
case MediaType.HDDVDROM:
case MediaType.BDROM:
case MediaType.UHDBD:
case MediaType.Unknown:
// TODO: Nuon requires reading the filesystem, searching for a file called "/NUON/NUON.RUN"
if(ps2BootSectors != null &&
@@ -2302,12 +2310,24 @@ namespace Aaru.Core.Media.Detection
{
string blurayType = StringHandlers.CToString(blurayDi?.Units[0].DiscTypeIdentifier);
if(blurayType == "XG4")
switch(blurayType)
{
AaruConsole.DebugWriteLine("Media detection",
"Blu-ray type set to \"XG4\", setting disc type to Xbox One Disc (XGD4).");
case "XG4":
AaruConsole.DebugWriteLine("Media detection",
"Blu-ray type set to \"XG4\", setting disc type to Xbox One Disc (XGD4).");
mediaType = MediaType.XGD4;
mediaType = MediaType.XGD4;
break;
// TODO: PS5
case "BDU":
AaruConsole.DebugWriteLine("Media detection",
"Blu-ray type set to \"BDU\", setting disc type to Ultra HD Blu-ray.");
mediaType = MediaType.UHDBD;
break;
}
}

View File

@@ -45,12 +45,11 @@ using Aaru.Decoders.SCSI;
using Aaru.Decoders.SCSI.MMC;
using Aaru.Decoders.SCSI.SSC;
using Aaru.Decoders.Xbox;
using Aaru.Decryption.DVD;
using Aaru.Devices;
using DeviceInfo = Aaru.Core.Devices.Info.DeviceInfo;
using DMI = Aaru.Decoders.Xbox.DMI;
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
using DVDDecryption = Aaru.Decryption.DVD.Dump;
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
namespace Aaru.Core.Media.Info
{
@@ -714,7 +713,7 @@ namespace Aaru.Core.Media.Info
#endregion DVD-R and HD DVD-R
}
var dvdDecrypt = new Dump(dev);
var dvdDecrypt = new DVDDecryption(dev);
sense = dvdDecrypt.ReadBusKey(out cmdBuf, out senseBuf, CopyrightType.CSS, dev.Timeout, out _);
if(!sense)
@@ -724,7 +723,7 @@ namespace Aaru.Core.Media.Info
if(sense)
AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Disc Key\n{0}",
Decoders.SCSI.Sense.PrettifySense(senseBuf));
Sense.PrettifySense(senseBuf));
else
DvdDiscKey = cmdBuf;
@@ -734,7 +733,7 @@ namespace Aaru.Core.Media.Info
if(sense)
AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Sector CMI\n{0}",
Decoders.SCSI.Sense.PrettifySense(senseBuf));
Sense.PrettifySense(senseBuf));
else
DvdSectorCmi = cmdBuf;
}
@@ -968,6 +967,7 @@ namespace Aaru.Core.Media.Info
case MediaType.BDR:
case MediaType.BDRE:
case MediaType.BDROM:
case MediaType.UHDBD:
case MediaType.BDRXL:
case MediaType.BDREXL:
sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0,
@@ -996,6 +996,7 @@ namespace Aaru.Core.Media.Info
{
#region BD-ROM only
case MediaType.BDROM:
case MediaType.UHDBD:
sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0,
MmcDiscStructureFormat.BdBurstCuttingArea, 0, dev.Timeout, out _);

View File

@@ -183,6 +183,7 @@ namespace Aaru.DiscImages
case MediaType.HDDVDRDL:
case MediaType.HDDVDRWDL:
case MediaType.BDROM:
case MediaType.UHDBD:
case MediaType.BDR:
case MediaType.BDRE:
case MediaType.BDRXL:

View File

@@ -145,10 +145,10 @@ namespace Aaru.DiscImages
};
public IEnumerable<MediaType> SupportedMediaTypes => new[]
{
MediaType.BDR, MediaType.BDRE, MediaType.BDREXL, MediaType.BDROM, MediaType.BDRXL, MediaType.CBHD,
MediaType.CD, MediaType.CDDA, MediaType.CDEG, MediaType.CDG, MediaType.CDI, MediaType.CDMIDI,
MediaType.CDMRW, MediaType.CDPLUS, MediaType.CDR, MediaType.CDROM, MediaType.CDROMXA, MediaType.CDRW,
MediaType.CDV, MediaType.DVDDownload, MediaType.DVDPR, MediaType.DVDPRDL, MediaType.DVDPRW,
MediaType.BDR, MediaType.BDRE, MediaType.BDREXL, MediaType.BDROM, MediaType.UHDBD, MediaType.BDRXL,
MediaType.CBHD, MediaType.CD, MediaType.CDDA, MediaType.CDEG, MediaType.CDG, MediaType.CDI,
MediaType.CDMIDI, MediaType.CDMRW, MediaType.CDPLUS, MediaType.CDR, MediaType.CDROM, MediaType.CDROMXA,
MediaType.CDRW, MediaType.CDV, MediaType.DVDDownload, MediaType.DVDPR, MediaType.DVDPRDL, MediaType.DVDPRW,
MediaType.DVDPRWDL, MediaType.DVDR, MediaType.DVDRAM, MediaType.DVDRDL, MediaType.DVDROM, MediaType.DVDRW,
MediaType.DVDRWDL, MediaType.EVD, MediaType.FDDVD, MediaType.DTSCD, MediaType.FVD, MediaType.HDDVDR,
MediaType.HDDVDRAM, MediaType.HDDVDRDL, MediaType.HDDVDROM, MediaType.HDDVDRW, MediaType.HDDVDRWDL,

View File

@@ -145,7 +145,7 @@ namespace Aaru.DiscImages
}
static (byte minute, byte second, byte frame) LbaToMsf(ulong sector) =>
((byte)(sector / 75 / 60), (byte)((sector / 75) % 60), (byte)(sector % 75));
((byte)(sector / 75 / 60), (byte)(sector / 75 % 60), (byte)(sector % 75));
static string GetTrackMode(Track track)
{
@@ -177,6 +177,7 @@ namespace Aaru.DiscImages
case MediaType.BDREXL:
case MediaType.BDRE: return CDRWIN_DISK_TYPE_BDRE;
case MediaType.BDROM:
case MediaType.UHDBD:
case MediaType.CBHD:
case MediaType.PS3BD:
case MediaType.PS4BD:

View File

@@ -198,19 +198,19 @@ namespace Aaru.DiscImages
};
public IEnumerable<MediaType> SupportedMediaTypes => new[]
{
MediaType.BDR, MediaType.BDRE, MediaType.BDREXL, MediaType.BDROM, MediaType.BDRXL, MediaType.CBHD,
MediaType.CD, MediaType.CDDA, MediaType.CDEG, MediaType.CDG, MediaType.CDI, MediaType.CDMIDI,
MediaType.CDMRW, MediaType.CDPLUS, MediaType.CDR, MediaType.CDROM, MediaType.CDROMXA, MediaType.CDRW,
MediaType.CDV, MediaType.DDCD, MediaType.DDCDR, MediaType.DDCDRW, MediaType.DVDDownload, MediaType.DVDPR,
MediaType.DVDPRDL, MediaType.DVDPRW, MediaType.DVDPRWDL, MediaType.DVDR, MediaType.DVDRAM, MediaType.DVDRDL,
MediaType.DVDROM, MediaType.DVDRW, MediaType.DVDRWDL, MediaType.EVD, MediaType.FDDVD, MediaType.DTSCD,
MediaType.FVD, MediaType.HDDVDR, MediaType.HDDVDRAM, MediaType.HDDVDRDL, MediaType.HDDVDROM,
MediaType.HDDVDRW, MediaType.HDDVDRWDL, MediaType.HDVMD, MediaType.HVD, MediaType.JaguarCD,
MediaType.MEGACD, MediaType.PS1CD, MediaType.PS2CD, MediaType.PS2DVD, MediaType.PS3BD, MediaType.PS3DVD,
MediaType.PS4BD, MediaType.SuperCDROM2, MediaType.SVCD, MediaType.SVOD, MediaType.SATURNCD,
MediaType.ThreeDO, MediaType.UDO, MediaType.UDO2, MediaType.UDO2_WORM, MediaType.UMD, MediaType.VCD,
MediaType.VCDHD, MediaType.NeoGeoCD, MediaType.PCFX, MediaType.CDTV, MediaType.CD32, MediaType.Nuon,
MediaType.Playdia, MediaType.Pippin, MediaType.FMTOWNS, MediaType.MilCD, MediaType.VideoNow,
MediaType.BDR, MediaType.BDRE, MediaType.BDREXL, MediaType.BDROM, MediaType.UHDBD, MediaType.BDRXL,
MediaType.CBHD, MediaType.CD, MediaType.CDDA, MediaType.CDEG, MediaType.CDG, MediaType.CDI,
MediaType.CDMIDI, MediaType.CDMRW, MediaType.CDPLUS, MediaType.CDR, MediaType.CDROM, MediaType.CDROMXA,
MediaType.CDRW, MediaType.CDV, MediaType.DDCD, MediaType.DDCDR, MediaType.DDCDRW, MediaType.DVDDownload,
MediaType.DVDPR, MediaType.DVDPRDL, MediaType.DVDPRW, MediaType.DVDPRWDL, MediaType.DVDR, MediaType.DVDRAM,
MediaType.DVDRDL, MediaType.DVDROM, MediaType.DVDRW, MediaType.DVDRWDL, MediaType.EVD, MediaType.FDDVD,
MediaType.DTSCD, MediaType.FVD, MediaType.HDDVDR, MediaType.HDDVDRAM, MediaType.HDDVDRDL,
MediaType.HDDVDROM, MediaType.HDDVDRW, MediaType.HDDVDRWDL, MediaType.HDVMD, MediaType.HVD,
MediaType.JaguarCD, MediaType.MEGACD, MediaType.PS1CD, MediaType.PS2CD, MediaType.PS2DVD, MediaType.PS3BD,
MediaType.PS3DVD, MediaType.PS4BD, MediaType.SuperCDROM2, MediaType.SVCD, MediaType.SVOD,
MediaType.SATURNCD, MediaType.ThreeDO, MediaType.UDO, MediaType.UDO2, MediaType.UDO2_WORM, MediaType.UMD,
MediaType.VCD, MediaType.VCDHD, MediaType.NeoGeoCD, MediaType.PCFX, MediaType.CDTV, MediaType.CD32,
MediaType.Nuon, MediaType.Playdia, MediaType.Pippin, MediaType.FMTOWNS, MediaType.MilCD, MediaType.VideoNow,
MediaType.VideoNowColor, MediaType.VideoNowXp, MediaType.CVD, MediaType.PCD
};
public IEnumerable<(string name, Type type, string description, object @default)> SupportedOptions => new[]