15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* LzmaEnc.h -- LZMA Encoder 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)2009-02-07 : Igor Pavlov : Public domain */ 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __LZMA_ENC_H 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __LZMA_ENC_H 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "Types.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LZMA_PROPS_SIZE 5 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _CLzmaEncProps 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int level; /* 0 <= level <= 9 */ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (1 << 12) <= dictSize <= (1 << 30) for 64-bit version 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default = (1 << 24) */ 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int lc; /* 0 <= lc <= 8, default = 3 */ 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int lp; /* 0 <= lp <= 4, default = 0 */ 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pb; /* 0 <= pb <= 4, default = 2 */ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int algo; /* 0 - fast, 1 - normal, default = 1 */ 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int fb; /* 5 <= fb <= 273, default = 32 */ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int btMode; /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */ 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int numHashBytes; /* 2, 3 or 4, default = 4 */ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UInt32 mc; /* 1 <= mc <= (1 << 30), default = 32 */ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned writeEndMark; /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */ 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int numThreads; /* 1 or 2, default = 2 */ 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} CLzmaEncProps; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LzmaEncProps_Init(CLzmaEncProps *p); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LzmaEncProps_Normalize(CLzmaEncProps *p); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ---------- CLzmaEncHandle Interface ---------- */ 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* LzmaEnc_* functions can return the following exit codes: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Returns: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_OK - OK 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_MEM - Memory allocation error 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_PARAM - Incorrect paramater in props 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_WRITE - Write callback error. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_PROGRESS - some break from progress callback 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void * CLzmaEncHandle; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ---------- One Call Interface ---------- */ 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* LzmaEncode 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Return code: 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_OK - OK 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_MEM - Memory allocation error 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_PARAM - Incorrect paramater 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_OUTPUT_EOF - output buffer overflow 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 81