Example #1
0
        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;
        }
Example #2
0
        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");
 }