ICoder.h revision baa3858d3f5d128a5c8466b700098109edcad5f2
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 }; 49} 50 51CODER_INTERFACE(ICompressSetCoderProperties, 0x20) 52{ 53 STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps) PURE; 54}; 55 56/* 57CODER_INTERFACE(ICompressSetCoderProperties, 0x21) 58{ 59 STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE; 60}; 61*/ 62 63CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22) 64{ 65 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE; 66}; 67 68CODER_INTERFACE(ICompressWriteCoderProperties, 0x23) 69{ 70 STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream) PURE; 71}; 72 73CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24) 74{ 75 STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE; 76}; 77 78CODER_INTERFACE(ICompressSetCoderMt, 0x25) 79{ 80 STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE; 81}; 82 83CODER_INTERFACE(ICompressGetSubStreamSize, 0x30) 84{ 85 STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE; 86}; 87 88CODER_INTERFACE(ICompressSetInStream, 0x31) 89{ 90 STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE; 91 STDMETHOD(ReleaseInStream)() PURE; 92}; 93 94CODER_INTERFACE(ICompressSetOutStream, 0x32) 95{ 96 STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE; 97 STDMETHOD(ReleaseOutStream)() PURE; 98}; 99 100CODER_INTERFACE(ICompressSetInStreamSize, 0x33) 101{ 102 STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE; 103}; 104 105CODER_INTERFACE(ICompressSetOutStreamSize, 0x34) 106{ 107 STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE; 108}; 109 110CODER_INTERFACE(ICompressSetBufSize, 0x35) 111{ 112 STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size) PURE; 113 STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size) PURE; 114}; 115 116CODER_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 128CODER_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}; 135CODER_INTERFACE(ISetCompressCodecsInfo, 0x61) 136{ 137 STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo) PURE; 138}; 139 140CODER_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/* 147CODER_INTERFACE(ICryptoResetSalt, 0x88) 148{ 149 STDMETHOD(ResetSalt)() PURE; 150}; 151*/ 152 153CODER_INTERFACE(ICryptoResetInitVector, 0x8C) 154{ 155 STDMETHOD(ResetInitVector)() PURE; 156}; 157 158CODER_INTERFACE(ICryptoSetPassword, 0x90) 159{ 160 STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE; 161}; 162 163CODER_INTERFACE(ICryptoSetCRC, 0xA0) 164{ 165 STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE; 166}; 167 168////////////////////// 169// It's for DLL file 170namespace 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