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