Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 99 | pmbaty | 1 | /* Lzma86Enc.h -- LZMA + x86 (BCJ) Filter Encoder |
| 2 | 2008-08-05 |
||
| 3 | Igor Pavlov |
||
| 4 | Public domain */ |
||
| 5 | |||
| 6 | #ifndef __LZMA86ENC_H |
||
| 7 | #define __LZMA86ENC_H |
||
| 8 | |||
| 9 | #include "Types.h" |
||
| 10 | |||
| 11 | /* |
||
| 12 | It's an example for LZMA + x86 Filter use. |
||
| 13 | You can use .lzma86 extension, if you write that stream to file. |
||
| 14 | .lzma86 header adds one additional byte to standard .lzma header. |
||
| 15 | .lzma86 header (14 bytes): |
||
| 16 | Offset Size Description |
||
| 17 | |||
| 18 | = 1 - x86 filter |
||
| 19 | 1 1 lc, lp and pb in encoded form |
||
| 20 | 2 4 dictSize (little endian) |
||
| 21 | 6 8 uncompressed size (little endian) |
||
| 22 | |||
| 23 | |||
| 24 | Lzma86_Encode |
||
| 25 | ------------- |
||
| 26 | level - compression level: 0 <= level <= 9, the default value for "level" is 5. |
||
| 27 | |||
| 28 | |||
| 29 | dictSize - The dictionary size in bytes. The maximum value is |
||
| 30 | 128 MB = (1 << 27) bytes for 32-bit version |
||
| 31 | 1 GB = (1 << 30) bytes for 64-bit version |
||
| 32 | The default value is 16 MB = (1 << 24) bytes, for level = 5. |
||
| 33 | It's recommended to use the dictionary that is larger than 4 KB and |
||
| 34 | that can be calculated as (1 << N) or (3 << N) sizes. |
||
| 35 | For better compression ratio dictSize must be >= inSize. |
||
| 36 | |||
| 37 | filterMode: |
||
| 38 | SZ_FILTER_NO - no Filter |
||
| 39 | SZ_FILTER_YES - x86 Filter |
||
| 40 | SZ_FILTER_AUTO - it tries both alternatives to select best. |
||
| 41 | Encoder will use 2 or 3 passes: |
||
| 42 | 2 passes when FILTER_NO provides better compression. |
||
| 43 | 3 passes when FILTER_YES provides better compression. |
||
| 44 | |||
| 45 | Lzma86Encode allocates Data with MyAlloc functions. |
||
| 46 | RAM Requirements for compressing: |
||
| 47 | RamSize = dictionarySize * 11.5 + 6MB + FilterBlockSize |
||
| 48 | filterMode FilterBlockSize |
||
| 49 | SZ_FILTER_NO 0 |
||
| 50 | SZ_FILTER_YES inSize |
||
| 51 | SZ_FILTER_AUTO inSize |
||
| 52 | |||
| 53 | |||
| 54 | Return code: |
||
| 55 | SZ_OK - OK |
||
| 56 | SZ_ERROR_MEM - Memory allocation error |
||
| 57 | SZ_ERROR_PARAM - Incorrect paramater |
||
| 58 | SZ_ERROR_OUTPUT_EOF - output buffer overflow |
||
| 59 | SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) |
||
| 60 | */ |
||
| 61 | |||
| 62 | enum ESzFilterMode |
||
| 63 | { |
||
| 64 | SZ_FILTER_NO, |
||
| 65 | SZ_FILTER_YES, |
||
| 66 | SZ_FILTER_AUTO |
||
| 67 | }; |
||
| 68 | |||
| 69 | SRes Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen, |
||
| 70 | int level, UInt32 dictSize, int filterMode); |
||
| 71 | |||
| 72 | #endif |