Example #1
0
        public static byte[] Compress(byte[] source, OodleLZ_Compressor compressor, OodleLZ_CompressionLevel level)
        {
            IntPtr pOptions = OodleLZ_CompressOptions_GetDefault(compressor, level);
            OodleLZ_CompressOptions options = Marshal.PtrToStructure <OodleLZ_CompressOptions>(pOptions);

            // Required for the game to not crash
            options.seekChunkReset = true;
            // This is already the default but I am including it for authenticity to game code
            options.seekChunkLen = 0x40000;
            pOptions             = Marshal.AllocHGlobal(Marshal.SizeOf <OodleLZ_CompressOptions>());

            try
            {
                Marshal.StructureToPtr(options, pOptions, false);
                long   compressedBufferSizeNeeded = OodleLZ_GetCompressedBufferSizeNeeded(source.LongLength);
                byte[] compBuf = new byte[compressedBufferSizeNeeded];
                long   compLen = OodleLZ_Compress(compressor, source, source.LongLength, compBuf, level, pOptions, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 0);
                Array.Resize(ref compBuf, (int)compLen);
                return(compBuf);
            }
            finally
            {
                Marshal.FreeHGlobal(pOptions);
            }
        }
Example #2
0
 private static extern long OodleLZ_Compress(
     OodleLZ_Compressor compressor,
     [MarshalAs(UnmanagedType.LPArray)]
     byte[] rawBuf,
     long rawLen,
     [MarshalAs(UnmanagedType.LPArray)]
     byte[] compBuf,
     OodleLZ_CompressionLevel level,
     IntPtr pOptions,
     IntPtr dictionaryBase,
     IntPtr lrm,
     IntPtr scratchMem,
     long scratchSize);
Example #3
0
 private static extern IntPtr OodleLZ_CompressOptions_GetDefault(
     OodleLZ_Compressor compressor,
     OodleLZ_CompressionLevel lzLevel);
Example #4
0
 private static long OodleLZ_Compress(OodleLZ_Compressor compressor, byte[] rawBuf, long rawLen, byte[] compBuf, OodleLZ_CompressionLevel level)
 => OodleLZ_Compress(compressor, rawBuf, rawLen, compBuf, level,
                     IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 0);