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 10CODER_INTERFACE(ICompressProgressInfo, 0x04) 11{ 12 STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize) PURE; 13}; 14 15CODER_INTERFACE(ICompressCoder, 0x05) 16{ 17 STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, 18 const UInt64 *inSize, const UInt64 *outSize, 19 ICompressProgressInfo *progress) PURE; 20}; 21 22CODER_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 29namespace 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 kLevel, 49 kReduceSize // estimated size of data that will be compressed. Encoder can use this value to reduce dictionary size. 50 }; 51} 52 53CODER_INTERFACE(ICompressSetCoderProperties, 0x20) 54{ 55 STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps) PURE; 56}; 57 58/* 59CODER_INTERFACE(ICompressSetCoderProperties, 0x21) 60{ 61 STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE; 62}; 63*/ 64 65CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22) 66{ 67 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE; 68}; 69 70CODER_INTERFACE(ICompressWriteCoderProperties, 0x23) 71{ 72 STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream) PURE; 73}; 74 75CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24) 76{ 77 STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE; 78}; 79 80CODER_INTERFACE(ICompressSetCoderMt, 0x25) 81{ 82 STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE; 83}; 84 85CODER_INTERFACE(ICompressGetSubStreamSize, 0x30) 86{ 87 STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE; 88}; 89 90CODER_INTERFACE(ICompressSetInStream, 0x31) 91{ 92 STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE; 93 STDMETHOD(ReleaseInStream)() PURE; 94}; 95 96CODER_INTERFACE(ICompressSetOutStream, 0x32) 97{ 98 STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE; 99 STDMETHOD(ReleaseOutStream)() PURE; 100}; 101 102CODER_INTERFACE(ICompressSetInStreamSize, 0x33) 103{ 104 STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE; 105}; 106 107CODER_INTERFACE(ICompressSetOutStreamSize, 0x34) 108{ 109 STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE; 110}; 111 112CODER_INTERFACE(ICompressSetBufSize, 0x35) 113{ 114 STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size) PURE; 115 STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size) PURE; 116}; 117 118CODER_INTERFACE(ICompressFilter, 0x40) 119{ 120 STDMETHOD(Init)() PURE; 121 STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size) PURE; 122 // Filter converts as most as possible bytes 123 // Filter return outSize (UInt32) 124 // if (outSize <= size): Filter have converted outSize bytes 125 // if (outSize > size): Filter have not converted anything. 126 // and it needs at least outSize bytes to convert one block 127 // (it's for crypto block algorithms). 128}; 129 130CODER_INTERFACE(ICompressCodecsInfo, 0x60) 131{ 132 STDMETHOD(GetNumberOfMethods)(UInt32 *numMethods) PURE; 133 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE; 134 STDMETHOD(CreateDecoder)(UInt32 index, const GUID *iid, void **coder) PURE; 135 STDMETHOD(CreateEncoder)(UInt32 index, const GUID *iid, void **coder) PURE; 136}; 137CODER_INTERFACE(ISetCompressCodecsInfo, 0x61) 138{ 139 STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo) PURE; 140}; 141 142CODER_INTERFACE(ICryptoProperties, 0x80) 143{ 144 STDMETHOD(SetKey)(const Byte *data, UInt32 size) PURE; 145 STDMETHOD(SetInitVector)(const Byte *data, UInt32 size) PURE; 146}; 147 148/* 149CODER_INTERFACE(ICryptoResetSalt, 0x88) 150{ 151 STDMETHOD(ResetSalt)() PURE; 152}; 153*/ 154 155CODER_INTERFACE(ICryptoResetInitVector, 0x8C) 156{ 157 STDMETHOD(ResetInitVector)() PURE; 158}; 159 160CODER_INTERFACE(ICryptoSetPassword, 0x90) 161{ 162 STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE; 163}; 164 165CODER_INTERFACE(ICryptoSetCRC, 0xA0) 166{ 167 STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE; 168}; 169 170////////////////////// 171// It's for DLL file 172namespace NMethodPropID 173{ 174 enum EEnum 175 { 176 kID, 177 kName, 178 kDecoder, 179 kEncoder, 180 kInStreams, 181 kOutStreams, 182 kDescription, 183 kDecoderIsAssigned, 184 kEncoderIsAssigned, 185 kDigestSize 186 }; 187} 188 189CODER_INTERFACE(IHasher, 0xC0) 190{ 191 STDMETHOD_(void, Init)() PURE; 192 STDMETHOD_(void, Update)(const void *data, UInt32 size) PURE; 193 STDMETHOD_(void, Final)(Byte *digest) PURE; 194 STDMETHOD_(UInt32, GetDigestSize)() PURE; 195}; 196 197CODER_INTERFACE(IHashers, 0xC1) 198{ 199 STDMETHOD_(UInt32, GetNumHashers)() PURE; 200 STDMETHOD(GetHasherProp)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE; 201 STDMETHOD(CreateHasher)(UInt32 index, IHasher **hasher) PURE; 202}; 203 204extern "C" 205{ 206 typedef HRESULT (WINAPI *Func_GetNumberOfMethods)(UInt32 *numMethods); 207 typedef HRESULT (WINAPI *Func_GetMethodProperty)(UInt32 index, PROPID propID, PROPVARIANT *value); 208 typedef HRESULT (WINAPI *Func_GetHashers)(IHashers **hashers); 209} 210 211#endif 212