Home | History | Annotate | Download | only in 7z
      1 // 7zEncode.h
      2 
      3 #ifndef __7Z_ENCODE_H
      4 #define __7Z_ENCODE_H
      5 
      6 #include "7zCompressionMode.h"
      7 
      8 #include "../Common/CoderMixer2.h"
      9 
     10 #include "7zItem.h"
     11 
     12 namespace NArchive {
     13 namespace N7z {
     14 
     15 class CMtEncMultiProgress:
     16   public ICompressProgressInfo,
     17   public CMyUnknownImp
     18 {
     19   CMyComPtr<ICompressProgressInfo> _progress;
     20   #ifndef _7ZIP_ST
     21   NWindows::NSynchronization::CCriticalSection CriticalSection;
     22   #endif
     23 
     24 public:
     25   UInt64 OutSize;
     26 
     27   CMtEncMultiProgress(): OutSize(0) {}
     28 
     29   void Init(ICompressProgressInfo *progress);
     30 
     31   void AddOutSize(UInt64 addOutSize)
     32   {
     33     #ifndef _7ZIP_ST
     34     NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
     35     #endif
     36     OutSize += addOutSize;
     37   }
     38 
     39   MY_UNKNOWN_IMP1(ICompressProgressInfo)
     40 
     41   STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
     42 };
     43 
     44 class CEncoder
     45 {
     46   #ifdef USE_MIXER_ST
     47     NCoderMixer2::CMixerST *_mixerST;
     48   #endif
     49   #ifdef USE_MIXER_MT
     50     NCoderMixer2::CMixerMT *_mixerMT;
     51   #endif
     52 
     53   NCoderMixer2::CMixer *_mixer;
     54   CMyComPtr<IUnknown> _mixerRef;
     55 
     56   CCompressionMethodMode _options;
     57   NCoderMixer2::CBindInfo _bindInfo;
     58   CRecordVector<CMethodId> _decompressionMethods;
     59 
     60   CRecordVector<UInt32> _SrcIn_to_DestOut;
     61   CRecordVector<UInt32> _SrcOut_to_DestIn;
     62   // CRecordVector<UInt32> _DestIn_to_SrcOut;
     63   CRecordVector<UInt32> _DestOut_to_SrcIn;
     64 
     65   void InitBindConv();
     66   void SetFolder(CFolder &folder);
     67 
     68   HRESULT CreateMixerCoder(DECL_EXTERNAL_CODECS_LOC_VARS
     69       const UInt64 *inSizeForReduce);
     70 
     71   bool _constructed;
     72 public:
     73 
     74   CEncoder(const CCompressionMethodMode &options);
     75   ~CEncoder();
     76   HRESULT EncoderConstr();
     77   HRESULT Encode(
     78       DECL_EXTERNAL_CODECS_LOC_VARS
     79       ISequentialInStream *inStream,
     80       // const UInt64 *inStreamSize,
     81       const UInt64 *inSizeForReduce,
     82       CFolder &folderItem,
     83       CRecordVector<UInt64> &coderUnpackSizes,
     84       UInt64 &unpackSize,
     85       ISequentialOutStream *outStream,
     86       CRecordVector<UInt64> &packSizes,
     87       ICompressProgressInfo *compressProgress);
     88 };
     89 
     90 }}
     91 
     92 #endif
     93