aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/lzmasdk/LzmaLib.h
blob: d4afea8393f49eae32df735c916238f40e929af7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* LzmaLib.h -- LZMA library interface 
2013-01-18 : Igor Pavlov : Public domain */ 
 
#ifndef __LZMA_LIB_H 
#define __LZMA_LIB_H 
 
#include "7zTypes.h" 
 
EXTERN_C_BEGIN 
 
#define MY_STDAPI int MY_STD_CALL 
 
#define LZMA_PROPS_SIZE 5 
 
/* 
RAM requirements for LZMA: 
  for compression:   (dictSize * 11.5 + 6 MB) + state_size 
  for decompression: dictSize + state_size 
    state_size = (4 + (1.5 << (lc + lp))) KB 
    by default (lc=3, lp=0), state_size = 16 KB. 
 
LZMA properties (5 bytes) format 
    Offset Size  Description 
      0     1    lc, lp and pb in encoded form. 
      1     4    dictSize (little endian). 
*/ 
 
/* 
LzmaCompress 
------------ 
 
outPropsSize - 
     In:  the pointer to the size of outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5. 
     Out: the pointer to the size of written properties in outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5. 
 
  LZMA Encoder will use defult values for any parameter, if it is 
  -1  for any from: level, loc, lp, pb, fb, numThreads 
   0  for dictSize 
   
level - compression level: 0 <= level <= 9; 
 
  level dictSize algo  fb 
    0:    16 KB   0    32 
    1:    64 KB   0    32 
    2:   256 KB   0    32 
    3:     1 MB   0    32 
    4:     4 MB   0    32 
    5:    16 MB   1    32 
    6:    32 MB   1    32 
    7+:   64 MB   1    64 
  
  The default value for "level" is 5. 
 
  algo = 0 means fast method 
  algo = 1 means normal method 
 
dictSize - The dictionary size in bytes. The maximum value is 
        128 MB = (1 << 27) bytes for 32-bit version 
          1 GB = (1 << 30) bytes for 64-bit version 
     The default value is 16 MB = (1 << 24) bytes. 
     It's recommended to use the dictionary that is larger than 4 KB and 
     that can be calculated as (1 << N) or (3 << N) sizes. 
 
lc - The number of literal context bits (high bits of previous literal). 
     It can be in the range from 0 to 8. The default value is 3. 
     Sometimes lc=4 gives the gain for big files. 
 
lp - The number of literal pos bits (low bits of current position for literals). 
     It can be in the range from 0 to 4. The default value is 0. 
     The lp switch is intended for periodical data when the period is equal to 2^lp. 
     For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's 
     better to set lc=0, if you change lp switch. 
 
pb - The number of pos bits (low bits of current position). 
     It can be in the range from 0 to 4. The default value is 2. 
     The pb switch is intended for periodical data when the period is equal 2^pb. 
 
fb - Word size (the number of fast bytes). 
     It can be in the range from 5 to 273. The default value is 32. 
     Usually, a big number gives a little bit better compression ratio and 
     slower compression process. 
 
numThreads - The number of thereads. 1 or 2. The default value is 2. 
     Fast mode (algo = 0) can use only 1 thread. 
 
Out: 
  destLen  - processed output size 
Returns: 
  SZ_OK               - OK 
  SZ_ERROR_MEM        - Memory allocation error 
  SZ_ERROR_PARAM      - Incorrect paramater 
  SZ_ERROR_OUTPUT_EOF - output buffer overflow 
  SZ_ERROR_THREAD     - errors in multithreading functions (only for Mt version) 
*/ 
 
MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, 
  unsigned char *outProps, size_t *outPropsSize, /* *outPropsSize must be = 5 */ 
  int level,      /* 0 <= level <= 9, default = 5 */ 
  unsigned dictSize,  /* default = (1 << 24) */ 
  int lc,        /* 0 <= lc <= 8, default = 3  */ 
  int lp,        /* 0 <= lp <= 4, default = 0  */ 
  int pb,        /* 0 <= pb <= 4, default = 2  */ 
  int fb,        /* 5 <= fb <= 273, default = 32 */ 
  int numThreads /* 1 or 2, default = 2 */ 
  ); 
 
/* 
LzmaUncompress 
-------------- 
In: 
  dest     - output data 
  destLen  - output data size 
  src      - input data 
  srcLen   - input data size 
Out: 
  destLen  - processed output size 
  srcLen   - processed input size 
Returns: 
  SZ_OK                - OK 
  SZ_ERROR_DATA        - Data error 
  SZ_ERROR_MEM         - Memory allocation arror 
  SZ_ERROR_UNSUPPORTED - Unsupported properties 
  SZ_ERROR_INPUT_EOF   - it needs more bytes in input buffer (src) 
*/ 
 
MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen, 
  const unsigned char *props, size_t propsSize); 
 
EXTERN_C_END 
 
#endif