示例#1
0
 public static bool Validate(byte[] buffer, int offset, int length)
 {
     return(0 == ~(int)Crc32Msb.Compute(buffer, offset, length));
 }
        internal void Add(TsPacket packet)
        {
            if (null == packet)
            {
                return;
            }
            int bufferOffset = packet.BufferOffset;
            int num1         = bufferOffset;

            byte[] buffer       = packet.Buffer;
            int    bufferLength = packet.BufferLength;

            if (bufferLength < 4)
            {
                return;
            }
            byte[] numArray1 = buffer;
            int    index1    = num1;
            int    num2      = 1;
            int    num3      = index1 + num2 + (int)numArray1[index1];

            if (num3 + 4 >= bufferOffset + bufferLength)
            {
                return;
            }
            int offset1 = num3;

            byte[] numArray2 = buffer;
            int    index2    = num3;
            int    num4      = 1;
            int    index3    = index2 + num4;

            if ((int)this._tableId != (int)numArray2[index2])
            {
                return;
            }
            int  num5 = (int)buffer[index3] << 8 | (int)buffer[index3 + 1];
            int  num6 = index3 + 2;
            bool flag = 0 != (num5 & 32768);

            if (0 != (num5 & 16384))
            {
                return;
            }
            int num7 = num5 & 4095;

            if (num7 > 1021 || num7 + num6 - bufferOffset > bufferLength)
            {
                return;
            }
            int length1 = num7 + num6 - offset1;

            if (!Crc32Msb.Validate(buffer, offset1, length1))
            {
                return;
            }
            int offset2 = num6;
            int length2 = num7 - 4;

            this.ParseSection(packet, offset2, length2);
        }