예제 #1
0
        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];
        }
예제 #2
0
        static IntPtr CreateDecoderInstance()
        {
            IntPtr result = Brolib.BrotliDecoderCreateInstance();

            if (result == IntPtr.Zero)
            {
                throw new BrotliException("Unable to create brotli decoder instance");
            }

            return(result);
        }