Refactor full CD TOC decoder.

This commit is contained in:
2018-01-07 13:25:04 +00:00
parent 5ae7cd04d3
commit d2d1842f70

View File

@@ -204,8 +204,10 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("First complete session number: {0}", response.FirstCompleteSession).AppendLine();
sb.AppendFormat("Last complete session number: {0}", response.LastCompleteSession).AppendLine();
foreach(TrackDataDescriptor descriptor in response.TrackDescriptors)
if((descriptor.CONTROL & 0x08) == 0x08 ||
descriptor.ADR != 1 && descriptor.ADR != 5 && descriptor.ADR != 4 && descriptor.ADR != 6 ||
if((descriptor.CONTROL & 0x08) ==
0x08 ||
descriptor.ADR != 1 && descriptor.ADR != 5 && descriptor.ADR != 4 &&
descriptor.ADR != 6 ||
descriptor.TNO != 0)
{
sb.AppendLine("Unknown TOC entry format, printing values as-is");
@@ -238,9 +240,7 @@ namespace DiscImageChef.Decoders.CD
{
switch(descriptor.POINT)
{
case 0xA0:
{
if(descriptor.ADR == 4)
case 0xA0 when descriptor.ADR == 4:
{
sb.AppendFormat("First video track number: {0}", descriptor.PMIN).AppendLine();
switch(descriptor.PSEC)
@@ -270,8 +270,10 @@ namespace DiscImageChef.Decoders.CD
sb.AppendLine("CD-V disc in PAL format with digital bilingual sound");
break;
}
break;
}
else
case 0xA0 when descriptor.ADR == 1:
{
sb.AppendFormat("First track number: {0} (", descriptor.PMIN);
switch((TocControl)(descriptor.CONTROL & 0x0D))
@@ -299,15 +301,12 @@ namespace DiscImageChef.Decoders.CD
sb.AppendLine(")");
sb.AppendFormat("Disc type: {0}", descriptor.PSEC).AppendLine();
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
}
break;
}
case 0xA1:
{
if(descriptor.ADR == 4)
case 0xA1 when descriptor.ADR == 4:
sb.AppendFormat("Last video track number: {0}", descriptor.PMIN).AppendLine();
else
break;
case 0xA1 when descriptor.ADR == 1:
{
sb.AppendFormat("Last track number: {0} (", descriptor.PMIN);
switch((TocControl)(descriptor.CONTROL & 0x0D))
@@ -333,7 +332,6 @@ namespace DiscImageChef.Decoders.CD
}
sb.AppendLine(")");
}
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
break;
}
@@ -469,13 +467,13 @@ namespace DiscImageChef.Decoders.CD
{
sb
.AppendFormat("Start of next possible program in the recordable area of the disc: {0:D2}:{1:D2}:{2:D2}",
descriptor.Min, descriptor.Sec, descriptor.Frame)
.AppendLine();
descriptor.Min, descriptor.Sec, descriptor.Frame).AppendLine();
sb
.AppendFormat("Maximum start of outermost Lead-out in the recordable area of the disc: {0:D2}:{1:D2}:{2:D2}",
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME)
.AppendLine();
}
break;
}
case 0xB1:
@@ -546,9 +544,9 @@ namespace DiscImageChef.Decoders.CD
.AppendLine();
sb
.AppendFormat("Stop position of inner part lead-out area: {0:D2}:{1:D2}:{2:D2}",
descriptor.Min, descriptor.Sec, descriptor.Frame)
.AppendLine();
descriptor.Min, descriptor.Sec, descriptor.Frame).AppendLine();
}
break;
}
default:
@@ -561,8 +559,7 @@ namespace DiscImageChef.Decoders.CD
.AppendLine();
sb
.AppendFormat("Ending time for interval that should be skipped: {0:D2}:{1:D2}:{2:D2}",
descriptor.Min, descriptor.Sec, descriptor.Frame)
.AppendLine();
descriptor.Min, descriptor.Sec, descriptor.Frame).AppendLine();
}
else
{
@@ -579,6 +576,7 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
}
break;
}
}