6 #include "../../../Common/Types.h"
7 #include "../../../Common/MyCom.h"
8 #include "../../../Common/MyString.h"
9 #include "../../../Common/Buffer.h"
10 #include "../../ICoder.h"
12 #ifdef EXTERNAL_CODECS
13 #include "../../../Windows/DLL.h"
20 bool EncoderIsAssigned;
21 bool DecoderIsAssigned;
26 #include "../../Archive/IArchive.h"
28 typedef IInArchive * (*CreateInArchiveP)();
29 typedef IOutArchive * (*CreateOutArchiveP)();
36 CArcExtInfo(const UString &ext): Ext(ext) {}
37 CArcExtInfo(const UString &ext, const UString &addExt): Ext(ext), AddExt(addExt) {}
43 #ifdef EXTERNAL_CODECS
49 CreateInArchiveP CreateInArchive;
50 CreateOutArchiveP CreateOutArchive;
52 CObjectVector<CArcExtInfo> Exts;
54 CByteBuffer StartSignature;
55 // CByteBuffer FinishSignature;
56 #ifdef NEW_FOLDER_INTERFACE
57 UStringVector AssociateExts;
61 UString GetMainExt() const
67 int FindExtension(const UString &ext) const
69 for (int i = 0; i < Exts.Size(); i++)
70 if (ext.CompareNoCase(Exts[i].Ext) == 0)
74 UString GetAllExtensions() const
77 for (int i = 0; i < Exts.Size(); i++)
86 void AddExts(const wchar_t* ext, const wchar_t* addExt);
89 #ifdef EXTERNAL_CODECS
93 CreateInArchive(0), CreateOutArchive(0),
100 #ifdef EXTERNAL_CODECS
101 typedef UInt32 (WINAPI *GetMethodPropertyFunc)(UInt32 index, PROPID propID, PROPVARIANT *value);
102 typedef UInt32 (WINAPI *CreateObjectFunc)(const GUID *clsID, const GUID *interfaceID, void **outObject);
107 NWindows::NDLL::CLibrary Lib;
108 GetMethodPropertyFunc GetMethodProperty;
109 CreateObjectFunc CreateObject;
110 #ifdef NEW_FOLDER_INTERFACE
117 CObjectVector<CIconPair> IconPairs;
119 int FindIconIndex(const UString &ext) const;
121 CCodecLib(): GetMethodProperty(0) {}
126 #ifdef EXTERNAL_CODECS
127 public ICompressCodecsInfo,
134 #ifdef EXTERNAL_CODECS
135 CObjectVector<CCodecLib> Libs;
136 CObjectVector<CDllCodecInfo> Codecs;
137 HRESULT LoadCodecs();
138 HRESULT LoadFormats();
139 HRESULT LoadDll(const CSysString &path);
140 HRESULT LoadDllsFromFolder(const CSysString &folderPrefix);
142 HRESULT CreateArchiveHandler(const CArcInfoEx &ai, void **archive, bool outHandler) const
144 return Libs[ai.LibIndex].CreateObject(&ai.ClassID, outHandler ? &IID_IOutArchive : &IID_IInArchive, (void **)archive);
149 CObjectVector<CArcInfoEx> Formats;
151 int FindFormatForArchiveName(const UString &archivePath) const;
152 int FindFormatForArchiveType(const UString &arcType) const;
156 #ifdef EXTERNAL_CODECS
157 STDMETHOD(GetNumberOfMethods)(UINT32 *numMethods);
158 STDMETHOD(GetProperty)(UINT32 index, PROPID propID, PROPVARIANT *value);
159 STDMETHOD(CreateDecoder)(UINT32 index, const GUID *interfaceID, void **coder);
160 STDMETHOD(CreateEncoder)(UINT32 index, const GUID *interfaceID, void **coder);
163 int GetCodecLibIndex(UInt32 index);
164 bool GetCodecEncoderIsAssigned(UInt32 index);
165 HRESULT GetCodecId(UInt32 index, UInt64 &id);
166 UString GetCodecName(UInt32 index);
168 HRESULT CreateInArchive(int formatIndex, CMyComPtr<IInArchive> &archive) const
170 const CArcInfoEx &ai = Formats[formatIndex];
171 #ifdef EXTERNAL_CODECS
175 archive = ai.CreateInArchive();
178 #ifdef EXTERNAL_CODECS
179 return CreateArchiveHandler(ai, (void **)&archive, false);
182 HRESULT CreateOutArchive(int formatIndex, CMyComPtr<IOutArchive> &archive) const
184 const CArcInfoEx &ai = Formats[formatIndex];
185 #ifdef EXTERNAL_CODECS
189 archive = ai.CreateOutArchive();
192 #ifdef EXTERNAL_CODECS
193 return CreateArchiveHandler(ai, (void **)&archive, true);
196 int FindOutFormatFromName(const UString &name) const
198 for (int i = 0; i < Formats.Size(); i++)
200 const CArcInfoEx &arc = Formats[i];
201 if (!arc.UpdateEnabled)
203 if (arc.Name.CompareNoCase(name) == 0)
209 #ifdef EXTERNAL_CODECS
210 HRESULT CreateCoder(const UString &name, bool encode, CMyComPtr<ICompressCoder> &coder) const;