public void Parse(IMpeg2SystemReader reader, IResultNodeState resultState) { resultState.Name = Name; resultState.ParentName = PackHeader.Name; // This header should be preceeded by a pack header, but which may have been overwritten if ((reader.State.LastHeaderName != PackHeader.Name) && reader.State.SeenPackHeader /*|| SeenPesPacket)*/) { resultState.Invalidate(); return; } reader.GetBits(16, Attribute.HeaderLength); reader.GetMarker(); uint rateBound = reader.GetBits(22, Attribute.RateBound); if (reader.State.SeenPackHeader && (rateBound < reader.State.ProgramMuxRate)) { resultState.Invalidate(); return; } reader.GetMarker(); reader.GetBits(6, Attribute.AudioBound, ab => ab <= 32); reader.GetFlag(Attribute.FixedFlag); reader.GetFlag(Attribute.CspsFlag); reader.GetFlag(Attribute.SystemAudioLockFlag); reader.GetFlag(Attribute.SystemVideoLockFlag); reader.GetMarker(); reader.GetBits(5, Attribute.VideoBound, vb => vb <= 16); reader.GetFlag(Attribute.PacketRateRestrictionFlag); reader.GetReservedBits(7); // 0x7F // Stream information (MPEG-2 only) while (resultState.Valid && (reader.ShowBits(1) == 1)) { resultState.Parse(_streamInfoAttributeParser, reader); } }