internal static extern bool BrotliEncoderCompress(int quality, int lgwin, BrotliEncoderMode mode, nuint input_size, IntPtr input_buffer, ref nuint encoded_size, IntPtr encoded_buffer);
public static TransformationStatus Compress(ReadOnlySpan <byte> source, Span <byte> destination, out int bytesConsumed, out int bytesWritten, int quality = DefaultQuality, int windowSize = DefaultWindowSize, BrotliEncoderMode encMode = BrotliEncoderMode.Generic) { if (quality > DefaultQuality || quality <= 0) { throw new System.ArgumentOutOfRangeException(BrotliEx.WrongQuality); } if (windowSize > DefaultWindowSize || windowSize <= 0) { throw new System.ArgumentOutOfRangeException(BrotliEx.WrongWindowSize); } bytesConsumed = bytesWritten = 0; unsafe { IntPtr bufIn, bufOut; fixed(byte *inBytes = &source.DangerousGetPinnableReference()) fixed(byte *outBytes = &destination.DangerousGetPinnableReference()) { bufIn = new IntPtr(inBytes); bufOut = new IntPtr(outBytes); nuint written = (nuint)destination.Length; nuint consumed = (nuint)source.Length; if (!BrotliNative.BrotliEncoderCompress(quality, windowSize, encMode, consumed, bufIn, ref written, bufOut)) { return(TransformationStatus.InvalidData); } ; bytesConsumed = (int)consumed; bytesWritten = (int)written; return(TransformationStatus.Done); } } }
public static bool BrotliEncoderCompress(int quality, int windowSize, BrotliEncoderMode mode, nuint inputSize, IntPtr inputBuffer, ref nuint encodedSize, IntPtr encodedBuffer) { return(Interop.Brotli.BrotliEncoderCompress(quality, windowSize, mode, inputSize, inputBuffer, ref encodedSize, encodedBuffer)); }
public static TransformationStatus Compress(ReadOnlySpan <byte> source, Span <byte> destination, out int bytesConsumed, out int bytesWritten, CompressionLevel quality = (CompressionLevel)DefaultQuality, int windowSize = DefaultWindowSize, BrotliEncoderMode encMode = BrotliEncoderMode.Generic) { return(Compress(source, destination, out bytesConsumed, out bytesWritten, GetQualityFromCompressionLevel(quality), windowSize, encMode)); }