public unsafe int DecodeFrame(byte[] buffer, int pos, int len) { fixed(byte *buf = buffer) { framereader.Reset(buf, pos, len); Decode_frame_header(framereader, frame); Decode_subframes(framereader, frame); framereader.Flush(); ushort crc_1 = DoCRC ? crc16.ComputeChecksum(framereader.Buffer + pos, framereader.Position - pos) : (ushort)0; ushort crc_2 = (ushort)framereader.Readbits(16); if (DoCRC && crc_1 != crc_2) { throw new Exception("frame crc mismatch"); } Restore_samples(frame); _samplesInBuffer = frame.blocksize; return(framereader.Position - pos); } }