aboutsummaryrefslogtreecommitdiff
path: root/BDInfo/TSStreamFile.cs
diff options
context:
space:
mode:
Diffstat (limited to 'BDInfo/TSStreamFile.cs')
-rw-r--r--BDInfo/TSStreamFile.cs326
1 files changed, 164 insertions, 162 deletions
diff --git a/BDInfo/TSStreamFile.cs b/BDInfo/TSStreamFile.cs
index cfd402434..ecf6609e2 100644
--- a/BDInfo/TSStreamFile.cs
+++ b/BDInfo/TSStreamFile.cs
@@ -1,4 +1,4 @@
-//============================================================================
+//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -283,7 +283,7 @@ namespace BDInfo
bool isAVC = false;
bool isMVC = false;
- foreach (TSStream finishedStream in Streams.Values)
+ foreach (var finishedStream in Streams.Values)
{
if (!finishedStream.IsInitialized)
{
@@ -327,10 +327,10 @@ namespace BDInfo
UpdateStreamBitrate(PID, PTSPID, PTS, PTSDiff);
}
- foreach (TSPlaylistFile playlist in Playlists)
+ foreach (var playlist in Playlists)
{
double packetSeconds = 0;
- foreach (TSStreamClip clip in playlist.StreamClips)
+ foreach (var clip in playlist.StreamClips)
{
if (clip.AngleIndex == 0)
{
@@ -339,7 +339,7 @@ namespace BDInfo
}
if (packetSeconds > 0)
{
- foreach (TSStream playlistStream in playlist.SortedStreams)
+ foreach (var playlistStream in playlist.SortedStreams)
{
if (playlistStream.IsVBR)
{
@@ -366,14 +366,14 @@ namespace BDInfo
{
if (Playlists == null) return;
- TSStreamState streamState = StreamStates[PID];
+ var streamState = StreamStates[PID];
double streamTime = (double)PTS / 90000;
double streamInterval = (double)PTSDiff / 90000;
double streamOffset = streamTime + streamInterval;
- foreach (TSPlaylistFile playlist in Playlists)
+ foreach (var playlist in Playlists)
{
- foreach (TSStreamClip clip in playlist.StreamClips)
+ foreach (var clip in playlist.StreamClips)
{
if (clip.Name != this.Name) continue;
@@ -390,15 +390,15 @@ namespace BDInfo
clip.PacketSeconds = streamOffset - clip.TimeIn;
}
- Dictionary<ushort, TSStream> playlistStreams = playlist.Streams;
- if (clip.AngleIndex > 0 &&
+ var playlistStreams = playlist.Streams;
+ if (clip.AngleIndex > 0 &&
clip.AngleIndex < playlist.AngleStreams.Count + 1)
{
playlistStreams = playlist.AngleStreams[clip.AngleIndex - 1];
}
if (playlistStreams.ContainsKey(PID))
{
- TSStream stream = playlistStreams[PID];
+ var stream = playlistStreams[PID];
stream.PayloadBytes += streamState.WindowBytes;
stream.PacketCount += streamState.WindowPackets;
@@ -425,13 +425,13 @@ namespace BDInfo
if (Streams.ContainsKey(PID))
{
- TSStream stream = Streams[PID];
+ var stream = Streams[PID];
stream.PayloadBytes += streamState.WindowBytes;
stream.PacketCount += streamState.WindowPackets;
-
+
if (stream.IsVideoStream)
{
- TSStreamDiagnostics diag = new TSStreamDiagnostics();
+ var diag = new TSStreamDiagnostics();
diag.Marker = (double)PTS / 90000;
diag.Interval = (double)PTSDiff / 90000;
diag.Bytes = streamState.WindowBytes;
@@ -457,7 +457,7 @@ namespace BDInfo
int dataSize = 16384;
Stream fileStream = null;
try
- {
+ {
string fileName;
if (BDInfoSettings.EnableSSIF &&
InterleavedFile != null)
@@ -482,13 +482,13 @@ namespace BDInfo
StreamStates.Clear();
StreamDiagnostics.Clear();
- TSPacketParser parser =
+ var parser =
new TSPacketParser();
-
+
long fileLength = (uint)fileStream.Length;
byte[] buffer = new byte[dataSize];
int bufferLength = 0;
- while ((bufferLength =
+ while ((bufferLength =
fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
int offset = 0;
@@ -536,80 +536,80 @@ namespace BDInfo
switch (parser.HeaderParse)
{
case 2:
- {
- parser.TransportErrorIndicator =
- (byte)((buffer[i] >> 7) & 0x1);
- parser.PayloadUnitStartIndicator =
- (byte)((buffer[i] >> 6) & 0x1);
- parser.TransportPriority =
- (byte)((buffer[i] >> 5) & 0x1);
- parser.PID =
- (ushort)((buffer[i] & 0x1f) << 8);
- }
- break;
-
- case 1:
- {
- parser.PID |= (ushort)buffer[i];
- if (Streams.ContainsKey(parser.PID))
- {
- parser.Stream = Streams[parser.PID];
- }
- else
- {
- parser.Stream = null;
- }
- if (!StreamStates.ContainsKey(parser.PID))
{
- StreamStates[parser.PID] = new TSStreamState();
+ parser.TransportErrorIndicator =
+ (byte)((buffer[i] >> 7) & 0x1);
+ parser.PayloadUnitStartIndicator =
+ (byte)((buffer[i] >> 6) & 0x1);
+ parser.TransportPriority =
+ (byte)((buffer[i] >> 5) & 0x1);
+ parser.PID =
+ (ushort)((buffer[i] & 0x1f) << 8);
}
- parser.StreamState = StreamStates[parser.PID];
- parser.StreamState.TotalPackets++;
- parser.StreamState.WindowPackets++;
- parser.TotalPackets++;
- }
- break;
-
- case 0:
- {
- parser.TransportScramblingControl =
- (byte)((buffer[i] >> 6) & 0x3);
- parser.AdaptionFieldControl =
- (byte)((buffer[i] >> 4) & 0x3);
+ break;
- if ((parser.AdaptionFieldControl & 0x2) == 0x2)
- {
- parser.AdaptionFieldState = true;
- }
- if (parser.PayloadUnitStartIndicator == 1)
+ case 1:
{
- if (parser.PID == 0)
+ parser.PID |= (ushort)buffer[i];
+ if (Streams.ContainsKey(parser.PID))
{
- parser.PATSectionStart = true;
+ parser.Stream = Streams[parser.PID];
}
- else if (parser.PID == parser.PMTPID)
+ else
{
- parser.PMTSectionStart = true;
+ parser.Stream = null;
}
- else if (parser.StreamState != null &&
- parser.StreamState.TransferState)
+ if (!StreamStates.ContainsKey(parser.PID))
{
- parser.StreamState.TransferState = false;
- parser.StreamState.TransferCount++;
+ StreamStates[parser.PID] = new TSStreamState();
+ }
+ parser.StreamState = StreamStates[parser.PID];
+ parser.StreamState.TotalPackets++;
+ parser.StreamState.WindowPackets++;
+ parser.TotalPackets++;
+ }
+ break;
- bool isFinished = ScanStream(
- parser.Stream,
- parser.StreamState,
- parser.StreamState.StreamBuffer);
+ case 0:
+ {
+ parser.TransportScramblingControl =
+ (byte)((buffer[i] >> 6) & 0x3);
+ parser.AdaptionFieldControl =
+ (byte)((buffer[i] >> 4) & 0x3);
- if (!isFullScan && isFinished)
+ if ((parser.AdaptionFieldControl & 0x2) == 0x2)
+ {
+ parser.AdaptionFieldState = true;
+ }
+ if (parser.PayloadUnitStartIndicator == 1)
+ {
+ if (parser.PID == 0)
+ {
+ parser.PATSectionStart = true;
+ }
+ else if (parser.PID == parser.PMTPID)
+ {
+ parser.PMTSectionStart = true;
+ }
+ else if (parser.StreamState != null &&
+ parser.StreamState.TransferState)
{
- return;
+ parser.StreamState.TransferState = false;
+ parser.StreamState.TransferCount++;
+
+ bool isFinished = ScanStream(
+ parser.Stream,
+ parser.StreamState,
+ parser.StreamState.StreamBuffer);
+
+ if (!isFullScan && isFinished)
+ {
+ return;
+ }
}
}
}
- }
- break;
+ break;
}
}
else if (parser.AdaptionFieldState)
@@ -670,7 +670,8 @@ namespace BDInfo
parser.PAT[parser.PATOffset++] = buffer[i++];
parser.PATSectionLength--;
parser.PacketLength--;
- } --i;
+ }
+ --i;
if (parser.PATSectionLength == 0)
{
@@ -680,10 +681,10 @@ namespace BDInfo
for (int k = 0; k < (parser.PATOffset - 4); k += 4)
{
uint programNumber = (uint)
- ((parser.PAT[k] << 8) +
+ ((parser.PAT[k] << 8) +
parser.PAT[k + 1]);
- ushort programPID = (ushort)
+ ushort programPID = (ushort)
(((parser.PAT[k + 2] & 0x1F) << 8) +
parser.PAT[k + 3]);
@@ -801,7 +802,8 @@ namespace BDInfo
PMT[parser.PMTOffset++] = buffer[i++];
--parser.PMTSectionLength;
--parser.PacketLength;
- } --i;
+ }
+ --i;
if (parser.PMTSectionLength == 0)
{
@@ -837,7 +839,7 @@ namespace BDInfo
if (!Streams.ContainsKey(streamPID))
{
- List<TSDescriptor> streamDescriptors =
+ var streamDescriptors =
new List<TSDescriptor>();
/*
@@ -985,7 +987,7 @@ namespace BDInfo
parser.PMTProgramDescriptorLength = buffer[i];
parser.PMTProgramDescriptors.Add(
new TSDescriptor(
- parser.PMTProgramDescriptor,
+ parser.PMTProgramDescriptor,
parser.PMTProgramDescriptorLength));
break;
}
@@ -994,11 +996,11 @@ namespace BDInfo
{
--parser.PMTProgramDescriptorLength;
- TSDescriptor descriptor = parser.PMTProgramDescriptors[
+ var descriptor = parser.PMTProgramDescriptors[
parser.PMTProgramDescriptors.Count - 1];
int valueIndex =
- descriptor.Value.Length -
+ descriptor.Value.Length -
parser.PMTProgramDescriptorLength - 1;
descriptor.Value[valueIndex] = buffer[i];
@@ -1020,19 +1022,19 @@ namespace BDInfo
parser.SyncState = false;
}
}
- else if (parser.Stream != null &&
- parser.StreamState != null &&
+ else if (parser.Stream != null &&
+ parser.StreamState != null &&
parser.TransportScramblingControl == 0)
{
- TSStream stream = parser.Stream;
- TSStreamState streamState = parser.StreamState;
+ var stream = parser.Stream;
+ var streamState = parser.StreamState;
streamState.Parse =
(streamState.Parse << 8) + buffer[i];
if (streamState.TransferState)
{
- if ((bufferLength - i) >= streamState.PacketLength &&
+ if ((bufferLength - i) >= streamState.PacketLength &&
streamState.PacketLength > 0)
{
offset = streamState.PacketLength;
@@ -1085,7 +1087,7 @@ namespace BDInfo
--parser.PacketLength;
bool headerFound = false;
- if (stream.IsVideoStream &&
+ if (stream.IsVideoStream &&
streamState.Parse == 0x000001FD)
{
headerFound = true;
@@ -1170,18 +1172,18 @@ namespace BDInfo
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 1:
- streamState.PESHeaderFlags =
+ streamState.PESHeaderFlags =
(byte)(streamState.Parse & 0xFF);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 0:
- streamState.PESHeaderLength =
+ streamState.PESHeaderLength =
(byte)(streamState.Parse & 0xFF);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
@@ -1211,48 +1213,48 @@ namespace BDInfo
switch (streamState.PTSParse)
{
case 4:
- streamState.PTSTemp =
+ streamState.PTSTemp =
((streamState.Parse & 0xE) << 29);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
-
+
case 3:
- streamState.PTSTemp |=
+ streamState.PTSTemp |=
((streamState.Parse & 0xFF) << 22);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 2:
- streamState.PTSTemp |=
+ streamState.PTSTemp |=
((streamState.Parse & 0xFE) << 14);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 1:
- streamState.PTSTemp |=
+ streamState.PTSTemp |=
((streamState.Parse & 0xFF) << 7);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 0:
- streamState.PTSTemp |=
+ streamState.PTSTemp |=
((streamState.Parse & 0xFE) >> 1);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
-#endif
+#endif
streamState.PTS = streamState.PTSTemp;
if (streamState.PTS > streamState.PTSLast)
@@ -1260,13 +1262,13 @@ namespace BDInfo
if (streamState.PTSLast > 0)
{
streamState.PTSTransfer = (streamState.PTS - streamState.PTSLast);
- }
+ }
streamState.PTSLast = streamState.PTS;
}
streamState.PTSDiff = streamState.PTS - streamState.DTSPrev;
- if (streamState.PTSCount > 0 &&
+ if (streamState.PTSCount > 0 &&
stream.IsVideoStream)
{
UpdateStreamBitrates(stream.PID, streamState.PTS, streamState.PTSDiff);
@@ -1280,7 +1282,7 @@ namespace BDInfo
}
Length = (double)(parser.PTSLast - parser.PTSFirst) / 90000;
}
-
+
streamState.DTSPrev = streamState.PTS;
streamState.PTSCount++;
if (streamState.PESHeaderLength == 0)
@@ -1299,46 +1301,46 @@ namespace BDInfo
switch (streamState.DTSParse)
{
case 9:
- streamState.PTSTemp =
+ streamState.PTSTemp =
((streamState.Parse & 0xE) << 29);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 8:
- streamState.PTSTemp |=
+ streamState.PTSTemp |=
((streamState.Parse & 0xFF) << 22);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 7:
- streamState.PTSTemp |=
+ streamState.PTSTemp |=
((streamState.Parse & 0xFE) << 14);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
-
+
case 6:
- streamState.PTSTemp |=
+ streamState.PTSTemp |=
((streamState.Parse & 0xFF) << 7);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 5:
- streamState.PTSTemp |=
+ streamState.PTSTemp |=
((streamState.Parse & 0xFE) >> 1);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
streamState.PTS = streamState.PTSTemp;
@@ -1347,48 +1349,48 @@ namespace BDInfo
streamState.PTSLast = streamState.PTS;
}
break;
-
+
case 4:
- streamState.DTSTemp =
+ streamState.DTSTemp =
((streamState.Parse & 0xE) << 29);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
-
+
case 3:
- streamState.DTSTemp |=
+ streamState.DTSTemp |=
((streamState.Parse & 0xFF) << 22);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
-
+
case 2:
- streamState.DTSTemp |=
+ streamState.DTSTemp |=
((streamState.Parse & 0xFE) << 14);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
-
+
case 1:
- streamState.DTSTemp |=
+ streamState.DTSTemp |=
((streamState.Parse & 0xFF) << 7);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
-
+
case 0:
- streamState.DTSTemp |=
+ streamState.DTSTemp |=
((streamState.Parse & 0xFE) >> 1);
#if DEBUG
- streamState.PESHeader[streamState.PESHeaderIndex++] =
+ streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
streamState.PTSDiff = streamState.DTSTemp - streamState.DTSPrev;
@@ -1459,7 +1461,7 @@ namespace BDInfo
ulong PTSLast = 0;
ulong PTSDiff = 0;
- foreach (TSStream stream in Streams.Values)
+ foreach (var stream in Streams.Values)
{
if (!stream.IsVideoStream) continue;
@@ -1482,8 +1484,8 @@ namespace BDInfo
}
private TSStream CreateStream(
- ushort streamPID,
- byte streamType,
+ ushort streamPID,
+ byte streamType,
List<TSDescriptor> streamDescriptors)
{
TSStream stream = null;
@@ -1495,10 +1497,10 @@ namespace BDInfo
case TSStreamType.MPEG1_VIDEO:
case TSStreamType.MPEG2_VIDEO:
case TSStreamType.VC1_VIDEO:
- {
- stream = new TSVideoStream();
- }
- break;
+ {
+ stream = new TSVideoStream();
+ }
+ break;
case TSStreamType.AC3_AUDIO:
case TSStreamType.AC3_PLUS_AUDIO:
@@ -1511,23 +1513,23 @@ namespace BDInfo
case TSStreamType.LPCM_AUDIO:
case TSStreamType.MPEG1_AUDIO:
case TSStreamType.MPEG2_AUDIO:
- {
- stream = new TSAudioStream();
- }
- break;
+ {
+ stream = new TSAudioStream();
+ }
+ break;
case TSStreamType.INTERACTIVE_GRAPHICS:
case TSStreamType.PRESENTATION_GRAPHICS:
- {
- stream = new TSGraphicsStream();
- }
- break;
+ {
+ stream = new TSGraphicsStream();
+ }
+ break;
case TSStreamType.SUBTITLE:
- {
- stream = new TSTextStream();
- }
- break;
+ {
+ stream = new TSTextStream();
+ }
+ break;
default:
break;
@@ -1548,6 +1550,6 @@ namespace BDInfo
}
return stream;
- }
+ }
}
}