xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/7z/7zEncode.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // 7zEncode.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_7Z_ENCODE_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_7Z_ENCODE_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "7zCompressionMode.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../Common/CoderMixer2.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "7zItem.h"
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
13*f6dc9357SAndroid Build Coastguard Worker namespace N7z {
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_1(
16*f6dc9357SAndroid Build Coastguard Worker   CMtEncMultiProgress,
17*f6dc9357SAndroid Build Coastguard Worker   ICompressProgressInfo
18*f6dc9357SAndroid Build Coastguard Worker )
19*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<ICompressProgressInfo> _progress;
20*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_ST
21*f6dc9357SAndroid Build Coastguard Worker   NWindows::NSynchronization::CCriticalSection CriticalSection;
22*f6dc9357SAndroid Build Coastguard Worker   #endif
23*f6dc9357SAndroid Build Coastguard Worker 
24*f6dc9357SAndroid Build Coastguard Worker public:
25*f6dc9357SAndroid Build Coastguard Worker   UInt64 OutSize;
26*f6dc9357SAndroid Build Coastguard Worker 
CMtEncMultiProgress()27*f6dc9357SAndroid Build Coastguard Worker   CMtEncMultiProgress(): OutSize(0) {}
28*f6dc9357SAndroid Build Coastguard Worker 
29*f6dc9357SAndroid Build Coastguard Worker   void Init(ICompressProgressInfo *progress);
30*f6dc9357SAndroid Build Coastguard Worker 
AddOutSize(UInt64 addOutSize)31*f6dc9357SAndroid Build Coastguard Worker   void AddOutSize(UInt64 addOutSize)
32*f6dc9357SAndroid Build Coastguard Worker   {
33*f6dc9357SAndroid Build Coastguard Worker     #ifndef Z7_ST
34*f6dc9357SAndroid Build Coastguard Worker     NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
35*f6dc9357SAndroid Build Coastguard Worker     #endif
36*f6dc9357SAndroid Build Coastguard Worker     OutSize += addOutSize;
37*f6dc9357SAndroid Build Coastguard Worker   }
38*f6dc9357SAndroid Build Coastguard Worker };
39*f6dc9357SAndroid Build Coastguard Worker 
40*f6dc9357SAndroid Build Coastguard Worker 
41*f6dc9357SAndroid Build Coastguard Worker class CEncoder Z7_final MY_UNCOPYABLE
42*f6dc9357SAndroid Build Coastguard Worker {
43*f6dc9357SAndroid Build Coastguard Worker   #ifdef USE_MIXER_ST
44*f6dc9357SAndroid Build Coastguard Worker     NCoderMixer2::CMixerST *_mixerST;
45*f6dc9357SAndroid Build Coastguard Worker   #endif
46*f6dc9357SAndroid Build Coastguard Worker   #ifdef USE_MIXER_MT
47*f6dc9357SAndroid Build Coastguard Worker     NCoderMixer2::CMixerMT *_mixerMT;
48*f6dc9357SAndroid Build Coastguard Worker   #endif
49*f6dc9357SAndroid Build Coastguard Worker 
50*f6dc9357SAndroid Build Coastguard Worker   NCoderMixer2::CMixer *_mixer;
51*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<IUnknown> _mixerRef;
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker   CCompressionMethodMode _options;
54*f6dc9357SAndroid Build Coastguard Worker   NCoderMixer2::CBindInfo _bindInfo;
55*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<CMethodId> _decompressionMethods;
56*f6dc9357SAndroid Build Coastguard Worker 
57*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<UInt32> SrcIn_to_DestOut;
58*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<UInt32> SrcOut_to_DestIn;
59*f6dc9357SAndroid Build Coastguard Worker   // CRecordVector<UInt32> DestIn_to_SrcOut;
60*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<UInt32> DestOut_to_SrcIn;
61*f6dc9357SAndroid Build Coastguard Worker 
62*f6dc9357SAndroid Build Coastguard Worker   void InitBindConv();
63*f6dc9357SAndroid Build Coastguard Worker   void SetFolder(CFolder &folder);
64*f6dc9357SAndroid Build Coastguard Worker 
65*f6dc9357SAndroid Build Coastguard Worker   HRESULT CreateMixerCoder(DECL_EXTERNAL_CODECS_LOC_VARS
66*f6dc9357SAndroid Build Coastguard Worker       const UInt64 *inSizeForReduce);
67*f6dc9357SAndroid Build Coastguard Worker 
68*f6dc9357SAndroid Build Coastguard Worker   bool _constructed;
69*f6dc9357SAndroid Build Coastguard Worker public:
70*f6dc9357SAndroid Build Coastguard Worker 
71*f6dc9357SAndroid Build Coastguard Worker   CEncoder(const CCompressionMethodMode &options);
72*f6dc9357SAndroid Build Coastguard Worker   ~CEncoder();
73*f6dc9357SAndroid Build Coastguard Worker   HRESULT EncoderConstr();
74*f6dc9357SAndroid Build Coastguard Worker   HRESULT Encode1(
75*f6dc9357SAndroid Build Coastguard Worker       DECL_EXTERNAL_CODECS_LOC_VARS
76*f6dc9357SAndroid Build Coastguard Worker       ISequentialInStream *inStream,
77*f6dc9357SAndroid Build Coastguard Worker       // const UInt64 *inStreamSize,
78*f6dc9357SAndroid Build Coastguard Worker       const UInt64 *inSizeForReduce,
79*f6dc9357SAndroid Build Coastguard Worker       UInt64 expectedDataSize,
80*f6dc9357SAndroid Build Coastguard Worker       CFolder &folderItem,
81*f6dc9357SAndroid Build Coastguard Worker       // CRecordVector<UInt64> &coderUnpackSizes,
82*f6dc9357SAndroid Build Coastguard Worker       // UInt64 &unpackSize,
83*f6dc9357SAndroid Build Coastguard Worker       ISequentialOutStream *outStream,
84*f6dc9357SAndroid Build Coastguard Worker       CRecordVector<UInt64> &packSizes,
85*f6dc9357SAndroid Build Coastguard Worker       ICompressProgressInfo *compressProgress);
86*f6dc9357SAndroid Build Coastguard Worker 
87*f6dc9357SAndroid Build Coastguard Worker   void Encode_Post(
88*f6dc9357SAndroid Build Coastguard Worker       UInt64 unpackSize,
89*f6dc9357SAndroid Build Coastguard Worker       CRecordVector<UInt64> &coderUnpackSizes);
90*f6dc9357SAndroid Build Coastguard Worker 
91*f6dc9357SAndroid Build Coastguard Worker };
92*f6dc9357SAndroid Build Coastguard Worker 
93*f6dc9357SAndroid Build Coastguard Worker }}
94*f6dc9357SAndroid Build Coastguard Worker 
95*f6dc9357SAndroid Build Coastguard Worker #endif
96