1 // ICoder.h
2 
3 #ifndef __ICODER_H
4 #define __ICODER_H
5 
6 #include "IStream.h"
7 
8 #define CODER_INTERFACE(i, x) DECL_INTERFACE(i, 4, x)
9 
10 CODER_INTERFACE(ICompressProgressInfo, 0x04)
11 {
12   STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize) PURE;
13 };
14 
15 CODER_INTERFACE(ICompressCoder, 0x05)
16 {
17   STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
18       const UInt64 *inSize, const UInt64 *outSize,
19       ICompressProgressInfo *progress) PURE;
20 };
21 
22 CODER_INTERFACE(ICompressCoder2, 0x18)
23 {
24   STDMETHOD(Code)(ISequentialInStream **inStreams, const UInt64 **inSizes, UInt32 numInStreams,
25       ISequentialOutStream **outStreams, const UInt64 **outSizes, UInt32 numOutStreams,
26       ICompressProgressInfo *progress) PURE;
27 };
28 
29 namespace NCoderPropID
30 {
31   enum EEnum
32   {
33     kDefaultProp = 0,
34     kDictionarySize,
35     kUsedMemorySize,
36     kOrder,
37     kBlockSize,
38     kPosStateBits,
39     kLitContextBits,
40     kLitPosBits,
41     kNumFastBytes,
42     kMatchFinder,
43     kMatchFinderCycles,
44     kNumPasses,
45     kAlgorithm,
46     kNumThreads,
47     kEndMarker
48   };
49 }
50 
51 CODER_INTERFACE(ICompressSetCoderProperties, 0x20)
52 {
53   STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps) PURE;
54 };
55 
56 /*
57 CODER_INTERFACE(ICompressSetCoderProperties, 0x21)
58 {
59   STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE;
60 };
61 */
62 
63 CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22)
64 {
65   STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE;
66 };
67 
68 CODER_INTERFACE(ICompressWriteCoderProperties, 0x23)
69 {
70   STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream) PURE;
71 };
72 
73 CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24)
74 {
75   STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE;
76 };
77 
78 CODER_INTERFACE(ICompressSetCoderMt, 0x25)
79 {
80   STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE;
81 };
82 
83 CODER_INTERFACE(ICompressGetSubStreamSize, 0x30)
84 {
85   STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE;
86 };
87 
88 CODER_INTERFACE(ICompressSetInStream, 0x31)
89 {
90   STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE;
91   STDMETHOD(ReleaseInStream)() PURE;
92 };
93 
94 CODER_INTERFACE(ICompressSetOutStream, 0x32)
95 {
96   STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE;
97   STDMETHOD(ReleaseOutStream)() PURE;
98 };
99 
100 CODER_INTERFACE(ICompressSetInStreamSize, 0x33)
101 {
102   STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE;
103 };
104 
105 CODER_INTERFACE(ICompressSetOutStreamSize, 0x34)
106 {
107   STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE;
108 };
109 
110 CODER_INTERFACE(ICompressSetBufSize, 0x35)
111 {
112   STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size) PURE;
113   STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size) PURE;
114 };
115 
116 CODER_INTERFACE(ICompressFilter, 0x40)
117 {
118   STDMETHOD(Init)() PURE;
119   STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size) PURE;
120   // Filter converts as most as possible bytes
121   // Filter return outSize (UInt32)
122   // if (outSize <= size): Filter have converted outSize bytes
123   // if (outSize > size): Filter have not converted anything.
124   //      and it needs at least outSize bytes to convert one block
125   //      (it's for crypto block algorithms).
126 };
127 
128 CODER_INTERFACE(ICompressCodecsInfo, 0x60)
129 {
130   STDMETHOD(GetNumberOfMethods)(UInt32 *numMethods) PURE;
131   STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
132   STDMETHOD(CreateDecoder)(UInt32 index, const GUID *iid, void **coder) PURE;
133   STDMETHOD(CreateEncoder)(UInt32 index, const GUID *iid, void **coder) PURE;
134 };
135 CODER_INTERFACE(ISetCompressCodecsInfo, 0x61)
136 {
137   STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo) PURE;
138 };
139 
140 CODER_INTERFACE(ICryptoProperties, 0x80)
141 {
142   STDMETHOD(SetKey)(const Byte *data, UInt32 size) PURE;
143   STDMETHOD(SetInitVector)(const Byte *data, UInt32 size) PURE;
144 };
145 
146 /*
147 CODER_INTERFACE(ICryptoResetSalt, 0x88)
148 {
149   STDMETHOD(ResetSalt)() PURE;
150 };
151 */
152 
153 CODER_INTERFACE(ICryptoResetInitVector, 0x8C)
154 {
155   STDMETHOD(ResetInitVector)() PURE;
156 };
157 
158 CODER_INTERFACE(ICryptoSetPassword, 0x90)
159 {
160   STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE;
161 };
162 
163 CODER_INTERFACE(ICryptoSetCRC, 0xA0)
164 {
165   STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE;
166 };
167 
168 //////////////////////
169 // It's for DLL file
170 namespace NMethodPropID
171 {
172   enum EEnum
173   {
174     kID,
175     kName,
176     kDecoder,
177     kEncoder,
178     kInStreams,
179     kOutStreams,
180     kDescription,
181     kDecoderIsAssigned,
182     kEncoderIsAssigned
183   };
184 }
185 
186 #endif
187