Fix detection of CD-i discs.

Do not take as decoded data that has merely returned the SCSI data length header.
This commit is contained in:
2020-03-06 19:24:41 +00:00
parent be9ee4bd8e
commit b14ee9bfc3
3 changed files with 25 additions and 22 deletions

View File

@@ -299,26 +299,29 @@ namespace Aaru.Core.Media.Detection
} }
} }
if(hasDataTrack && if(mediaType != MediaType.CDI)
hasAudioTrack && {
allFirstSessionTracksAreAudio && if(hasDataTrack &&
sessions == 2) hasAudioTrack &&
mediaType = MediaType.CDPLUS; allFirstSessionTracksAreAudio &&
sessions == 2)
mediaType = MediaType.CDPLUS;
if(!hasDataTrack && if(!hasDataTrack &&
hasAudioTrack && hasAudioTrack &&
sessions == 1) sessions == 1)
mediaType = MediaType.CDDA; mediaType = MediaType.CDDA;
if(hasDataTrack && if(hasDataTrack &&
!hasAudioTrack && !hasAudioTrack &&
sessions == 1) sessions == 1)
mediaType = MediaType.CDROM; mediaType = MediaType.CDROM;
if(hasVideoTrack && if(hasVideoTrack &&
!hasDataTrack && !hasDataTrack &&
sessions == 1) sessions == 1)
mediaType = MediaType.CDV; mediaType = MediaType.CDV;
}
if((mediaType == MediaType.CD || mediaType == MediaType.CDROM) && hasDataTrack) if((mediaType == MediaType.CD || mediaType == MediaType.CDROM) && hasDataTrack)
{ {

View File

@@ -1124,7 +1124,7 @@ namespace Aaru.Core.Media.Info
AaruConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: Session info\n{0}", AaruConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: Session info\n{0}",
Sense.PrettifySense(senseBuf)); Sense.PrettifySense(senseBuf));
} }
else else if(cmdBuf.Length > 4)
{ {
Session = cmdBuf; Session = cmdBuf;
DecodedSession = Decoders.CD.Session.Decode(cmdBuf); DecodedSession = Decoders.CD.Session.Decode(cmdBuf);
@@ -1143,7 +1143,7 @@ namespace Aaru.Core.Media.Info
AaruConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: Raw TOC\n{0}", AaruConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: Raw TOC\n{0}",
Sense.PrettifySense(senseBuf)); Sense.PrettifySense(senseBuf));
} }
else else if(cmdBuf.Length > 4)
{ {
RawToc = cmdBuf; RawToc = cmdBuf;
@@ -1155,7 +1155,7 @@ namespace Aaru.Core.Media.Info
if(sense) if(sense)
AaruConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: PMA\n{0}", AaruConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: PMA\n{0}",
Sense.PrettifySense(senseBuf)); Sense.PrettifySense(senseBuf));
else else if(cmdBuf.Length > 4)
Pma = cmdBuf; Pma = cmdBuf;
sense = dev.ReadCdText(out cmdBuf, out senseBuf, dev.Timeout, out _); sense = dev.ReadCdText(out cmdBuf, out senseBuf, dev.Timeout, out _);
@@ -1165,7 +1165,7 @@ namespace Aaru.Core.Media.Info
AaruConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: CD-TEXT\n{0}", AaruConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: CD-TEXT\n{0}",
Sense.PrettifySense(senseBuf)); Sense.PrettifySense(senseBuf));
} }
else else if(cmdBuf.Length > 4)
{ {
CdTextLeadIn = cmdBuf; CdTextLeadIn = cmdBuf;
DecodedCdTextLeadIn = CDTextOnLeadIn.Decode(cmdBuf); DecodedCdTextLeadIn = CDTextOnLeadIn.Decode(cmdBuf);