1/* Lzma86Enc.h -- LZMA + x86 (BCJ) Filter Encoder
22008-08-05
3Igor Pavlov
4Public domain */
5
6#ifndef __LZMA86ENC_H
7#define __LZMA86ENC_H
8
9#include "../Types.h"
10
11/*
12It's an example for LZMA + x86 Filter use.
13You 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    0     1    = 0 - no filter,
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
24Lzma86_Encode
25-------------
26level - compression level: 0 <= level <= 9, the default value for "level" is 5.
27
28
29dictSize - 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
37filterMode:
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
45Lzma86Encode allocates Data with MyAlloc functions.
46RAM 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
54Return 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
62enum ESzFilterMode
63{
64  SZ_FILTER_NO,
65  SZ_FILTER_YES,
66  SZ_FILTER_AUTO
67};
68
69SRes Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen,
70    int level, UInt32 dictSize, int filterMode);
71
72#endif
73