public BrotliStream(Stream baseStream, CompressionMode mode, bool leaveOpen) { if (baseStream == null) { throw new ArgumentNullException("baseStream"); } _mode = mode; _stream = baseStream; _leaveOpen = leaveOpen; if (_mode == CompressionMode.Compress) { _state = Brolib.BrotliEncoderCreateInstance(); if (_state == IntPtr.Zero) { throw new BrotliException("Unable to create brotli encoder instance"); } Brolib.BrotliEncoderSetParameter(_state, BrotliEncoderParameter.Quality, 5); Brolib.BrotliEncoderSetParameter(_state, BrotliEncoderParameter.LGWin, 22); } else { _state = Brolib.BrotliDecoderCreateInstance(); if (_state == IntPtr.Zero) { throw new BrotliException("Unable to create brotli decoder instance"); } } _ptrInputBuffer = Marshal.AllocHGlobal(BufferSize); _ptrOutputBuffer = Marshal.AllocHGlobal(BufferSize); _ptrNextInput = _ptrInputBuffer; _ptrNextOutput = _ptrOutputBuffer; _managedBuffer = new Byte[BufferSize]; }
static IntPtr CreateDecoderInstance() { IntPtr result = Brolib.BrotliDecoderCreateInstance(); if (result == IntPtr.Zero) { throw new BrotliException("Unable to create brotli decoder instance"); } return(result); }