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