예제 #1
0
 internal static extern bool BrotliEncoderCompress(int quality, int lgwin, BrotliEncoderMode mode, nuint input_size,
                                                   IntPtr input_buffer, ref nuint encoded_size, IntPtr encoded_buffer);
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
 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));
 }
예제 #4
0
 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));
 }