private void UpdateStreamBitrates(
ushort PTSPID,
ulong PTS,
ulong PTSDiff)
{
if (Playlists == null) return;
foreach (ushort PID in StreamStates.Keys)
{
if (Streams.ContainsKey(PID) &&
Streams[PID].IsVideoStream &&
PID != PTSPID)
{
continue;
}
if (StreamStates[PID].WindowPackets == 0)
{
continue;
}
UpdateStreamBitrate(PID, PTSPID, PTS, PTSDiff);
}
foreach (TSPlaylistFile playlist in Playlists)
{
double packetSeconds = 0;
foreach (TSStreamClip clip in playlist.StreamClips)
{
if (clip.AngleIndex == 0)
{
packetSeconds += clip.PacketSeconds;
}
}
if (packetSeconds > 0)
{
foreach (TSStream playlistStream in playlist.SortedStreams)
{
if (playlistStream.IsVBR)
{
playlistStream.BitRate = (long)Math.Round(
((playlistStream.PayloadBytes * 8.0) / packetSeconds));
if (playlistStream.StreamType == TSStreamType.AC3_TRUE_HD_AUDIO &&
((TSAudioStream)playlistStream).CoreStream != null)
{
playlistStream.BitRate -=
((TSAudioStream)playlistStream).CoreStream.BitRate;
}
}
}
}
}
}