Ejemplo n.º 1
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);
                }
            }
        }
Ejemplo n.º 2
0
 public static bool Compress(ReadOnlySpan <byte> source, Span <byte> destination, out nuint bytesConsumed, out nuint bytesWritten, int quality, int lgwin)
 {
     unsafe
     {
         bytesConsumed = (nuint)source.Length;
         bytesWritten  = (nuint)0;
         IntPtr bufIn, bufOut;
         fixed(byte *inBytes = &source.DangerousGetPinnableReference())
         fixed(byte *outBytes = &destination.DangerousGetPinnableReference())
         {
             bufIn  = new IntPtr(inBytes);
             bufOut = new IntPtr(outBytes);
             return(BrotliNative.BrotliEncoderCompress(quality, lgwin, BrotliNative.BrotliEncoderMode.Generic, bytesConsumed, bufIn, ref bytesWritten, bufOut));
         }
     }
 }