// 7zEncode.h #ifndef __7Z_ENCODE_H #define __7Z_ENCODE_H #include "7zCompressionMode.h" #include "../Common/CoderMixer2.h" #include "7zItem.h" namespace NArchive { namespace N7z { class CMtEncMultiProgress: public ICompressProgressInfo, public CMyUnknownImp { CMyComPtr _progress; #ifndef _7ZIP_ST NWindows::NSynchronization::CCriticalSection CriticalSection; #endif public: UInt64 OutSize; CMtEncMultiProgress(): OutSize(0) {} void Init(ICompressProgressInfo *progress); void AddOutSize(UInt64 addOutSize) { #ifndef _7ZIP_ST NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection); #endif OutSize += addOutSize; } MY_UNKNOWN_IMP1(ICompressProgressInfo) STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); }; class CEncoder { #ifdef USE_MIXER_ST NCoderMixer2::CMixerST *_mixerST; #endif #ifdef USE_MIXER_MT NCoderMixer2::CMixerMT *_mixerMT; #endif NCoderMixer2::CMixer *_mixer; CMyComPtr _mixerRef; CCompressionMethodMode _options; NCoderMixer2::CBindInfo _bindInfo; CRecordVector _decompressionMethods; CRecordVector _SrcIn_to_DestOut; CRecordVector _SrcOut_to_DestIn; // CRecordVector _DestIn_to_SrcOut; CRecordVector _DestOut_to_SrcIn; void InitBindConv(); void SetFolder(CFolder &folder); HRESULT CreateMixerCoder(DECL_EXTERNAL_CODECS_LOC_VARS const UInt64 *inSizeForReduce); bool _constructed; public: CEncoder(const CCompressionMethodMode &options); ~CEncoder(); HRESULT EncoderConstr(); HRESULT Encode( DECL_EXTERNAL_CODECS_LOC_VARS ISequentialInStream *inStream, // const UInt64 *inStreamSize, const UInt64 *inSizeForReduce, CFolder &folderItem, CRecordVector &coderUnpackSizes, UInt64 &unpackSize, ISequentialOutStream *outStream, CRecordVector &packSizes, ICompressProgressInfo *compressProgress); }; }} #endif