public override void Parse(byte[] data)
{
// for (i = 0; i < N; i++) {
// program_number // 16
// reserved // 3
// if (program_number == 0)
// network_PID // 13
// else
// program_map_PID // 13
// }
// CRC_32
base.Parse(data);
programIds.Clear();
for (int offset = 8; offset < this.SectionLength - 1; offset += 4)
{
Data patData = new Data();
patData.ProgramNumber = (ushort)((data[offset] << 8) | data[offset+1]);
patData.Reserved = (byte)(data[offset+2] >> 5);
patData.Pid = (ushort)(((data[offset+2] & 0x1F) << 8) | data[offset+3]);
patData.IsNetworkPID = (patData.ProgramNumber == 0);
programIds.Add(patData);
programIdsByProgramNumber[patData.ProgramNumber] = patData;
}
}