1*f6dc9357SAndroid Build Coastguard Worker /* Lzma2DecMt.h -- LZMA2 Decoder Multi-thread 2*f6dc9357SAndroid Build Coastguard Worker 2023-04-13 : Igor Pavlov : Public domain */ 3*f6dc9357SAndroid Build Coastguard Worker 4*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_LZMA2_DEC_MT_H 5*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_LZMA2_DEC_MT_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 typedef struct 12*f6dc9357SAndroid Build Coastguard Worker { 13*f6dc9357SAndroid Build Coastguard Worker size_t inBufSize_ST; 14*f6dc9357SAndroid Build Coastguard Worker size_t outStep_ST; 15*f6dc9357SAndroid Build Coastguard Worker 16*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_ST 17*f6dc9357SAndroid Build Coastguard Worker unsigned numThreads; 18*f6dc9357SAndroid Build Coastguard Worker size_t inBufSize_MT; 19*f6dc9357SAndroid Build Coastguard Worker size_t outBlockMax; 20*f6dc9357SAndroid Build Coastguard Worker size_t inBlockMax; 21*f6dc9357SAndroid Build Coastguard Worker #endif 22*f6dc9357SAndroid Build Coastguard Worker } CLzma2DecMtProps; 23*f6dc9357SAndroid Build Coastguard Worker 24*f6dc9357SAndroid Build Coastguard Worker /* init to single-thread mode */ 25*f6dc9357SAndroid Build Coastguard Worker void Lzma2DecMtProps_Init(CLzma2DecMtProps *p); 26*f6dc9357SAndroid Build Coastguard Worker 27*f6dc9357SAndroid Build Coastguard Worker 28*f6dc9357SAndroid Build Coastguard Worker /* ---------- CLzma2DecMtHandle Interface ---------- */ 29*f6dc9357SAndroid Build Coastguard Worker 30*f6dc9357SAndroid Build Coastguard Worker /* Lzma2DecMt_ * functions can return the following exit codes: 31*f6dc9357SAndroid Build Coastguard Worker SRes: 32*f6dc9357SAndroid Build Coastguard Worker SZ_OK - OK 33*f6dc9357SAndroid Build Coastguard Worker SZ_ERROR_MEM - Memory allocation error 34*f6dc9357SAndroid Build Coastguard Worker SZ_ERROR_PARAM - Incorrect paramater in props 35*f6dc9357SAndroid Build Coastguard Worker SZ_ERROR_WRITE - ISeqOutStream write callback error 36*f6dc9357SAndroid Build Coastguard Worker // SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output 37*f6dc9357SAndroid Build Coastguard Worker SZ_ERROR_PROGRESS - some break from progress callback 38*f6dc9357SAndroid Build Coastguard Worker SZ_ERROR_THREAD - error in multithreading functions (only for Mt version) 39*f6dc9357SAndroid Build Coastguard Worker */ 40*f6dc9357SAndroid Build Coastguard Worker 41*f6dc9357SAndroid Build Coastguard Worker typedef struct CLzma2DecMt CLzma2DecMt; 42*f6dc9357SAndroid Build Coastguard Worker typedef CLzma2DecMt * CLzma2DecMtHandle; 43*f6dc9357SAndroid Build Coastguard Worker // Z7_DECLARE_HANDLE(CLzma2DecMtHandle) 44*f6dc9357SAndroid Build Coastguard Worker 45*f6dc9357SAndroid Build Coastguard Worker CLzma2DecMtHandle Lzma2DecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid); 46*f6dc9357SAndroid Build Coastguard Worker void Lzma2DecMt_Destroy(CLzma2DecMtHandle p); 47*f6dc9357SAndroid Build Coastguard Worker 48*f6dc9357SAndroid Build Coastguard Worker SRes Lzma2DecMt_Decode(CLzma2DecMtHandle p, 49*f6dc9357SAndroid Build Coastguard Worker Byte prop, 50*f6dc9357SAndroid Build Coastguard Worker const CLzma2DecMtProps *props, 51*f6dc9357SAndroid Build Coastguard Worker ISeqOutStreamPtr outStream, 52*f6dc9357SAndroid Build Coastguard Worker const UInt64 *outDataSize, // NULL means undefined 53*f6dc9357SAndroid Build Coastguard Worker int finishMode, // 0 - partial unpacking is allowed, 1 - if lzma2 stream must be finished 54*f6dc9357SAndroid Build Coastguard Worker // Byte *outBuf, size_t *outBufSize, 55*f6dc9357SAndroid Build Coastguard Worker ISeqInStreamPtr inStream, 56*f6dc9357SAndroid Build Coastguard Worker // const Byte *inData, size_t inDataSize, 57*f6dc9357SAndroid Build Coastguard Worker 58*f6dc9357SAndroid Build Coastguard Worker // out variables: 59*f6dc9357SAndroid Build Coastguard Worker UInt64 *inProcessed, 60*f6dc9357SAndroid Build Coastguard Worker int *isMT, /* out: (*isMT == 0), if single thread decoding was used */ 61*f6dc9357SAndroid Build Coastguard Worker 62*f6dc9357SAndroid Build Coastguard Worker // UInt64 *outProcessed, 63*f6dc9357SAndroid Build Coastguard Worker ICompressProgressPtr progress); 64*f6dc9357SAndroid Build Coastguard Worker 65*f6dc9357SAndroid Build Coastguard Worker 66*f6dc9357SAndroid Build Coastguard Worker /* ---------- Read from CLzma2DecMtHandle Interface ---------- */ 67*f6dc9357SAndroid Build Coastguard Worker 68*f6dc9357SAndroid Build Coastguard Worker SRes Lzma2DecMt_Init(CLzma2DecMtHandle pp, 69*f6dc9357SAndroid Build Coastguard Worker Byte prop, 70*f6dc9357SAndroid Build Coastguard Worker const CLzma2DecMtProps *props, 71*f6dc9357SAndroid Build Coastguard Worker const UInt64 *outDataSize, int finishMode, 72*f6dc9357SAndroid Build Coastguard Worker ISeqInStreamPtr inStream); 73*f6dc9357SAndroid Build Coastguard Worker 74*f6dc9357SAndroid Build Coastguard Worker SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp, 75*f6dc9357SAndroid Build Coastguard Worker Byte *data, size_t *outSize, 76*f6dc9357SAndroid Build Coastguard Worker UInt64 *inStreamProcessed); 77*f6dc9357SAndroid Build Coastguard Worker 78*f6dc9357SAndroid Build Coastguard Worker 79*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_END 80*f6dc9357SAndroid Build Coastguard Worker 81*f6dc9357SAndroid Build Coastguard Worker #endif 82