xref: /aosp_15_r20/external/lzma/C/Lzma86.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker /* Lzma86.h -- LZMA + x86 (BCJ) Filter
2*f6dc9357SAndroid Build Coastguard Worker 2023-03-03 : Igor Pavlov : Public domain */
3*f6dc9357SAndroid Build Coastguard Worker 
4*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_LZMA86_H
5*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_LZMA86_H
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker #include "7zTypes.h"
8*f6dc9357SAndroid Build Coastguard Worker 
9*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_BEGIN
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #define LZMA86_SIZE_OFFSET (1 + 5)
12*f6dc9357SAndroid Build Coastguard Worker #define LZMA86_HEADER_SIZE (LZMA86_SIZE_OFFSET + 8)
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker /*
15*f6dc9357SAndroid Build Coastguard Worker It's an example for LZMA + x86 Filter use.
16*f6dc9357SAndroid Build Coastguard Worker You can use .lzma86 extension, if you write that stream to file.
17*f6dc9357SAndroid Build Coastguard Worker .lzma86 header adds one additional byte to standard .lzma header.
18*f6dc9357SAndroid Build Coastguard Worker .lzma86 header (14 bytes):
19*f6dc9357SAndroid Build Coastguard Worker   Offset Size  Description
20*f6dc9357SAndroid Build Coastguard Worker     0     1    = 0 - no filter, pure LZMA
21*f6dc9357SAndroid Build Coastguard Worker                = 1 - x86 filter + LZMA
22*f6dc9357SAndroid Build Coastguard Worker     1     1    lc, lp and pb in encoded form
23*f6dc9357SAndroid Build Coastguard Worker     2     4    dictSize (little endian)
24*f6dc9357SAndroid Build Coastguard Worker     6     8    uncompressed size (little endian)
25*f6dc9357SAndroid Build Coastguard Worker 
26*f6dc9357SAndroid Build Coastguard Worker 
27*f6dc9357SAndroid Build Coastguard Worker Lzma86_Encode
28*f6dc9357SAndroid Build Coastguard Worker -------------
29*f6dc9357SAndroid Build Coastguard Worker level - compression level: 0 <= level <= 9, the default value for "level" is 5.
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker dictSize - The dictionary size in bytes. The maximum value is
32*f6dc9357SAndroid Build Coastguard Worker         128 MB = (1 << 27) bytes for 32-bit version
33*f6dc9357SAndroid Build Coastguard Worker           1 GB = (1 << 30) bytes for 64-bit version
34*f6dc9357SAndroid Build Coastguard Worker      The default value is 16 MB = (1 << 24) bytes, for level = 5.
35*f6dc9357SAndroid Build Coastguard Worker      It's recommended to use the dictionary that is larger than 4 KB and
36*f6dc9357SAndroid Build Coastguard Worker      that can be calculated as (1 << N) or (3 << N) sizes.
37*f6dc9357SAndroid Build Coastguard Worker      For better compression ratio dictSize must be >= inSize.
38*f6dc9357SAndroid Build Coastguard Worker 
39*f6dc9357SAndroid Build Coastguard Worker filterMode:
40*f6dc9357SAndroid Build Coastguard Worker     SZ_FILTER_NO   - no Filter
41*f6dc9357SAndroid Build Coastguard Worker     SZ_FILTER_YES  - x86 Filter
42*f6dc9357SAndroid Build Coastguard Worker     SZ_FILTER_AUTO - it tries both alternatives to select best.
43*f6dc9357SAndroid Build Coastguard Worker               Encoder will use 2 or 3 passes:
44*f6dc9357SAndroid Build Coastguard Worker               2 passes when FILTER_NO provides better compression.
45*f6dc9357SAndroid Build Coastguard Worker               3 passes when FILTER_YES provides better compression.
46*f6dc9357SAndroid Build Coastguard Worker 
47*f6dc9357SAndroid Build Coastguard Worker Lzma86Encode allocates Data with MyAlloc functions.
48*f6dc9357SAndroid Build Coastguard Worker RAM Requirements for compressing:
49*f6dc9357SAndroid Build Coastguard Worker   RamSize = dictionarySize * 11.5 + 6MB + FilterBlockSize
50*f6dc9357SAndroid Build Coastguard Worker       filterMode     FilterBlockSize
51*f6dc9357SAndroid Build Coastguard Worker      SZ_FILTER_NO         0
52*f6dc9357SAndroid Build Coastguard Worker      SZ_FILTER_YES      inSize
53*f6dc9357SAndroid Build Coastguard Worker      SZ_FILTER_AUTO     inSize
54*f6dc9357SAndroid Build Coastguard Worker 
55*f6dc9357SAndroid Build Coastguard Worker 
56*f6dc9357SAndroid Build Coastguard Worker Return code:
57*f6dc9357SAndroid Build Coastguard Worker   SZ_OK               - OK
58*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_MEM        - Memory allocation error
59*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_PARAM      - Incorrect paramater
60*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_OUTPUT_EOF - output buffer overflow
61*f6dc9357SAndroid Build Coastguard Worker   SZ_ERROR_THREAD     - errors in multithreading functions (only for Mt version)
62*f6dc9357SAndroid Build Coastguard Worker */
63*f6dc9357SAndroid Build Coastguard Worker 
64*f6dc9357SAndroid Build Coastguard Worker enum ESzFilterMode
65*f6dc9357SAndroid Build Coastguard Worker {
66*f6dc9357SAndroid Build Coastguard Worker   SZ_FILTER_NO,
67*f6dc9357SAndroid Build Coastguard Worker   SZ_FILTER_YES,
68*f6dc9357SAndroid Build Coastguard Worker   SZ_FILTER_AUTO
69*f6dc9357SAndroid Build Coastguard Worker };
70*f6dc9357SAndroid Build Coastguard Worker 
71*f6dc9357SAndroid Build Coastguard Worker SRes Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen,
72*f6dc9357SAndroid Build Coastguard Worker     int level, UInt32 dictSize, int filterMode);
73*f6dc9357SAndroid Build Coastguard Worker 
74*f6dc9357SAndroid Build Coastguard Worker 
75*f6dc9357SAndroid Build Coastguard Worker /*
76*f6dc9357SAndroid Build Coastguard Worker Lzma86_GetUnpackSize:
77*f6dc9357SAndroid Build Coastguard Worker   In:
78*f6dc9357SAndroid Build Coastguard Worker     src      - input data
79*f6dc9357SAndroid Build Coastguard Worker     srcLen   - input data size
80*f6dc9357SAndroid Build Coastguard Worker   Out:
81*f6dc9357SAndroid Build Coastguard Worker     unpackSize - size of uncompressed stream
82*f6dc9357SAndroid Build Coastguard Worker   Return code:
83*f6dc9357SAndroid Build Coastguard Worker     SZ_OK               - OK
84*f6dc9357SAndroid Build Coastguard Worker     SZ_ERROR_INPUT_EOF  - Error in headers
85*f6dc9357SAndroid Build Coastguard Worker */
86*f6dc9357SAndroid Build Coastguard Worker 
87*f6dc9357SAndroid Build Coastguard Worker SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize);
88*f6dc9357SAndroid Build Coastguard Worker 
89*f6dc9357SAndroid Build Coastguard Worker /*
90*f6dc9357SAndroid Build Coastguard Worker Lzma86_Decode:
91*f6dc9357SAndroid Build Coastguard Worker   In:
92*f6dc9357SAndroid Build Coastguard Worker     dest     - output data
93*f6dc9357SAndroid Build Coastguard Worker     destLen  - output data size
94*f6dc9357SAndroid Build Coastguard Worker     src      - input data
95*f6dc9357SAndroid Build Coastguard Worker     srcLen   - input data size
96*f6dc9357SAndroid Build Coastguard Worker   Out:
97*f6dc9357SAndroid Build Coastguard Worker     destLen  - processed output size
98*f6dc9357SAndroid Build Coastguard Worker     srcLen   - processed input size
99*f6dc9357SAndroid Build Coastguard Worker   Return code:
100*f6dc9357SAndroid Build Coastguard Worker     SZ_OK           - OK
101*f6dc9357SAndroid Build Coastguard Worker     SZ_ERROR_DATA  - Data error
102*f6dc9357SAndroid Build Coastguard Worker     SZ_ERROR_MEM   - Memory allocation error
103*f6dc9357SAndroid Build Coastguard Worker     SZ_ERROR_UNSUPPORTED - unsupported file
104*f6dc9357SAndroid Build Coastguard Worker     SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer
105*f6dc9357SAndroid Build Coastguard Worker */
106*f6dc9357SAndroid Build Coastguard Worker 
107*f6dc9357SAndroid Build Coastguard Worker SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen);
108*f6dc9357SAndroid Build Coastguard Worker 
109*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_END
110*f6dc9357SAndroid Build Coastguard Worker 
111*f6dc9357SAndroid Build Coastguard Worker #endif
112