public void LzmaCompress(SharedSettings s) { int srcBase = s.Src.Offset; int dstBase = s.Dst.Offset; LZMA.CLzma2EncProps props = new LZMA.CLzma2EncProps(); props.Lzma2EncProps_Init(); props.mLzmaProps.mLevel = s.ActualLevel; props.mLzmaProps.mDictSize = (uint)s.ActualDictSize; props.mLzmaProps.mLC = s.ActualLC; props.mLzmaProps.mLP = s.ActualLP; props.mLzmaProps.mPB = s.ActualPB; props.mLzmaProps.mAlgo = s.ActualAlgo; props.mLzmaProps.mFB = s.ActualFB; props.mLzmaProps.mBtMode = s.ActualBTMode; props.mLzmaProps.mNumHashBytes = s.ActualNumHashBytes; props.mLzmaProps.mMC = s.ActualMC; props.mLzmaProps.mWriteEndMark = s.ActualWriteEndMark; props.mLzmaProps.mNumThreads = s.ActualNumThreads; props.mBlockSize = s.ActualBlockSize; props.mNumBlockThreads = s.ActualNumBlockThreads; props.mNumTotalThreads = s.ActualNumTotalThreads; LZMA.ISeqInStream input = new CSeqInStream(s); LZMA.ISeqOutStream output = new CSeqOutStream(s); var encoder = new LZMA.CLzma2Enc(LZMA.ISzAlloc.SmallAlloc, LZMA.ISzAlloc.BigAlloc); var res = encoder.Lzma2Enc_SetProps(props); if (res != LZMA.SZ_OK) { throw new Exception("Lzma2Compress/SetProps failed: " + res); } res = encoder.Lzma2Enc_Encode(output, input, null); if (res != LZMA.SZ_OK) { throw new Exception("Lzma2Compress/Encode failed: " + res); } s.WrittenSize = s.Dst.Offset - dstBase; s.Enc = new PZ(new[] { encoder.Lzma2Enc_WriteProperties() }); encoder.Lzma2Enc_Destroy(); s.Src.Length += s.Src.Offset - srcBase; s.Src.Offset = srcBase; s.Dst.Length += s.Dst.Offset - dstBase; s.Dst.Offset = dstBase; }
public void LzmaCompress(SharedSettings s) { int srcBase = s.Src.Offset; int dstBase = s.Dst.Offset; LZMA.CLzma2EncProps props = new LZMA.CLzma2EncProps(); props.Lzma2EncProps_Init(); props.mLzmaProps.mLevel = s.ActualLevel; props.mLzmaProps.mDictSize = (uint)s.ActualDictSize; props.mLzmaProps.mLC = s.ActualLC; props.mLzmaProps.mLP = s.ActualLP; props.mLzmaProps.mPB = s.ActualPB; props.mLzmaProps.mAlgo = s.ActualAlgo; props.mLzmaProps.mFB = s.ActualFB; props.mLzmaProps.mBtMode = s.ActualBTMode; props.mLzmaProps.mNumHashBytes = s.ActualNumHashBytes; props.mLzmaProps.mMC = s.ActualMC; props.mLzmaProps.mWriteEndMark = s.ActualWriteEndMark; props.mLzmaProps.mNumThreads = s.ActualNumThreads; props.mBlockSize = s.ActualBlockSize; props.mNumBlockThreads = s.ActualNumBlockThreads; props.mNumTotalThreads = s.ActualNumTotalThreads; LZMA.ISeqInStream input = new CSeqInStream(s); LZMA.ISeqOutStream output = new CSeqOutStream(s); var encoder = new LZMA.CLzma2Enc(LZMA.ISzAlloc.SmallAlloc, LZMA.ISzAlloc.BigAlloc); var res = encoder.Lzma2Enc_SetProps(props); if(res != LZMA.SZ_OK) throw new Exception("Lzma2Compress/SetProps failed: " + res); res = encoder.Lzma2Enc_Encode(output, input, null); if(res != LZMA.SZ_OK) throw new Exception("Lzma2Compress/Encode failed: " + res); s.WrittenSize = s.Dst.Offset - dstBase; s.Enc = new PZ(new[] { encoder.Lzma2Enc_WriteProperties() }); encoder.Lzma2Enc_Destroy(); s.Src.Length += s.Src.Offset - srcBase; s.Src.Offset = srcBase; s.Dst.Length += s.Dst.Offset - dstBase; s.Dst.Offset = dstBase; }
protected override void EncoderThreadLoop() { var settings = new LZMA.CLzma2EncProps(mEncoderProps); if (mThreadCount.HasValue) settings.mNumBlockThreads = mThreadCount.Value; var encoder = new LZMA.CLzma2Enc(LZMA.ISzAlloc.SmallAlloc, LZMA.ISzAlloc.BigAlloc); var res = encoder.Lzma2Enc_SetProps(settings); if (res != LZMA.SZ_OK) throw new InvalidOperationException(); mSettings = encoder.Lzma2Enc_WriteProperties(); res = encoder.Lzma2Enc_Encode(mOutputHelper, mInputHelper, null); if (res != LZMA.SZ_OK) throw new InvalidOperationException(); encoder.Lzma2Enc_Destroy(); }
internal Lzma2Encoder(int? threadCount, LZMA.CLzma2EncProps encoderProps) { mThreadCount = threadCount; mSyncObject = new object(); mOutputHelper = new LZMA.CSeqOutStream(WriteOutputHelper); mInputHelper = new LZMA.CSeqInStream(ReadInputHelper); if (encoderProps != null) { mEncoderProps = encoderProps; } else { mEncoderProps = new LZMA.CLzma2EncProps(); mEncoderProps.Lzma2EncProps_Init(); } StartThread("LZMA 2 Stream Buffer Thread"); }