* DiscImageChef.CommonTypes/DiskType.cs:

Added DVD-RW DL, DVD-Download, HD DVD-R DL and HD DVD-RW DL.

	* DiscImageChef.Decoders/CD/ATIP.cs:
	  ATIP not always contain S4.
	Corrected typo.

	* DiscImageChef.Decoders/CD/Session.cs:
	  Added missing newlines.

	* DiscImageChef.Decoders/CD/TOC.cs:
	  Added missing newlines.
	Recognize Lead-Out track.

	* DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs:
	  Added structures for Disc Informations 001b and 010b.

	* DiscImageChef.Devices/Device/ScsiCommands.cs:
	  On READ TOC/PMA/ATIP and READ DISC INFORMATION if trying
	  small buffer and then real-sized buffer, some drives send
	  garbage, so get a big enough buffer and return only the
	  applicable data size.

	* DiscImageChef/Commands/MediaInfo.cs:
	  Check current profile and prettify TOC, PMA, ATIP, Session
	  and CD-TEXT.
This commit is contained in:
2015-11-24 00:40:33 +00:00
parent f9090cf09c
commit 67eb49b66e
11 changed files with 287 additions and 54 deletions

View File

@@ -231,7 +231,7 @@ namespace DiscImageChef.Decoders.CD
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
if (CDATIPResponse.Length != 32)
if (CDATIPResponse.Length != 32 && CDATIPResponse.Length != 28)
{
DicConsole.DebugWriteLine("CD ATIP decoder", "Expected CD ATIP size (32 bytes) is not received size ({0} bytes), not decoding", CDATIPResponse.Length);
return null;
@@ -267,17 +267,21 @@ namespace DiscImageChef.Decoders.CD
decoded.A1Values = new byte[3];
decoded.A2Values = new byte[3];
decoded.A3Values = new byte[3];
decoded.S4Values = new byte[3];
Array.Copy(CDATIPResponse, 16, decoded.A1Values, 0, 3);
Array.Copy(CDATIPResponse, 20, decoded.A1Values, 0, 3);
Array.Copy(CDATIPResponse, 24, decoded.A1Values, 0, 3);
Array.Copy(CDATIPResponse, 28, decoded.A1Values, 0, 3);
Array.Copy(CDATIPResponse, 20, decoded.A2Values, 0, 3);
Array.Copy(CDATIPResponse, 24, decoded.A3Values, 0, 3);
decoded.Reserved7 = CDATIPResponse[19];
decoded.Reserved8 = CDATIPResponse[23];
decoded.Reserved9 = CDATIPResponse[27];
decoded.Reserved10 = CDATIPResponse[31];
if (CDATIPResponse.Length >= 32)
{
decoded.S4Values = new byte[3];
Array.Copy(CDATIPResponse, 28, decoded.S4Values, 0, 3);
decoded.Reserved10 = CDATIPResponse[31];
}
return decoded;
}
@@ -365,7 +369,8 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("A2 value: 0x{0:X6}", (response.A2Values[0] << 16) + (response.A2Values[1] << 8) + response.A2Values[2]).AppendLine();
if(response.A3Valid)
sb.AppendFormat("A3 value: 0x{0:X6}", (response.A3Values[0] << 16) + (response.A3Values[1] << 8) + response.A3Values[2]).AppendLine();
sb.AppendFormat("S4 value: 0x{0:X6}", (response.S4Values[0] << 16) + (response.S4Values[1] << 8) + response.S4Values[2]).AppendLine();
if(response.S4Values != null)
sb.AppendFormat("S4 value: 0x{0:X6}", (response.S4Values[0] << 16) + (response.S4Values[1] << 8) + response.S4Values[2]).AppendLine();
}
return sb.ToString();

View File

@@ -158,11 +158,11 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("Last complete session number: {0}", response.LastCompleteSession).AppendLine();
foreach (TrackDataDescriptor descriptor in response.TrackDescriptors)
{
sb.AppendFormat("First track number in last complete session: {0}", descriptor.TrackNumber);
sb.AppendFormat("First track number in last complete session: {0}", descriptor.TrackNumber).AppendLine();
sb.AppendFormat("Track starts at LBA {0}, or MSF {1:X2}:{2:X2}:{3:X2}", descriptor.TrackStartAddress,
(descriptor.TrackStartAddress & 0x0000FF00) >> 8,
(descriptor.TrackStartAddress & 0x00FF0000) >> 16,
(descriptor.TrackStartAddress & 0xFF000000) >> 24);
(descriptor.TrackStartAddress & 0xFF000000) >> 24).AppendLine();
switch ((TOC_ADR)descriptor.ADR)
{

View File

@@ -158,11 +158,14 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("Last track number in last complete session: {0}", response.LastTrack).AppendLine();
foreach (CDTOCTrackDataDescriptor descriptor in response.TrackDescriptors)
{
sb.AppendFormat("Track number: {0}", descriptor.TrackNumber);
if (descriptor.TrackNumber == 0xAA)
sb.AppendLine("Track number: Lead-Out");
else
sb.AppendFormat("Track number: {0}", descriptor.TrackNumber).AppendLine();
sb.AppendFormat("Track starts at LBA {0}, or MSF {1:X2}:{2:X2}:{3:X2}", descriptor.TrackStartAddress,
(descriptor.TrackStartAddress & 0x0000FF00) >> 8,
(descriptor.TrackStartAddress & 0x00FF0000) >> 16,
(descriptor.TrackStartAddress & 0xFF000000) >> 24);
(descriptor.TrackStartAddress & 0xFF000000) >> 24).AppendLine();
switch ((TOC_ADR)descriptor.ADR)
{