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