private IDataReader Sanitize(long startOffset, int length, ICollection <uint> sanitizedPositions) { var window = new byte[length]; _dataReader.Read(window, 0, length); //find 00 00 03 then discard the third byte (03) int dstPos = SanitizeWindow(window, sanitizedPositions); // Remove trailing zeros bytes // FIXME: this fragment contains a prevention for emtpy (zero byte) packets!! while ((dstPos > 1) && (window[dstPos - 1] == 0)) { dstPos--; } return(new ByteArrayDataReader(window, _dataReader.GetDataPacket(startOffset, dstPos))); }
public void GetStuffingBytes(int numBytes) { // Read stuffing bytes var b = new byte[numBytes]; int bytesRead = _dataReader.Read(b, 0, b.Length); _dataReader.Position += bytesRead; // In case fewer bytes were read, truncate the data if (bytesRead != b.Length) { var subArray = new byte[bytesRead]; Array.Copy(b, subArray, bytesRead); b = subArray; } // Add and verify stuffing bytes attribute Result.AddAttribute(Mpeg2SystemHeaderParser.Attribute.StuffingBytes, b, _stuffingBytesResultFormatter); }