Index: third_party/lzma/v4_65/files/CPP/7zip/UI/Common/LoadCodecs.cpp |
diff --git a/third_party/lzma/v4_65/files/CPP/7zip/UI/Common/LoadCodecs.cpp b/third_party/lzma/v4_65/files/CPP/7zip/UI/Common/LoadCodecs.cpp |
deleted file mode 100644 |
index 4b5639eef9f55d91477629d8c3bc8471aa24cb50..0000000000000000000000000000000000000000 |
--- a/third_party/lzma/v4_65/files/CPP/7zip/UI/Common/LoadCodecs.cpp |
+++ /dev/null |
@@ -1,674 +0,0 @@ |
-// LoadCodecs.cpp |
- |
-#include "StdAfx.h" |
- |
-#include "LoadCodecs.h" |
- |
-#include "../../../Common/MyCom.h" |
-#ifdef NEW_FOLDER_INTERFACE |
-#include "../../../Common/StringToInt.h" |
-#endif |
-#include "../../../Windows/PropVariant.h" |
- |
-#include "../../ICoder.h" |
-#include "../../Common/RegisterArc.h" |
- |
-#ifdef EXTERNAL_CODECS |
-#include "../../../Windows/FileFind.h" |
-#include "../../../Windows/DLL.h" |
-#ifdef NEW_FOLDER_INTERFACE |
-#include "../../../Windows/ResourceString.h" |
-static const UINT kIconTypesResId = 100; |
-#endif |
- |
-#ifdef _WIN32 |
-#include "Windows/Registry.h" |
-#endif |
- |
-using namespace NWindows; |
-using namespace NFile; |
- |
-#ifdef _WIN32 |
-extern HINSTANCE g_hInstance; |
-#endif |
- |
-static CSysString GetLibraryFolderPrefix() |
-{ |
- #ifdef _WIN32 |
- TCHAR fullPath[MAX_PATH + 1]; |
- ::GetModuleFileName(g_hInstance, fullPath, MAX_PATH); |
- CSysString path = fullPath; |
- int pos = path.ReverseFind(TEXT(CHAR_PATH_SEPARATOR)); |
- return path.Left(pos + 1); |
- #else |
- return CSysString(); // FIX IT |
- #endif |
-} |
- |
-#define kCodecsFolderName TEXT("Codecs") |
-#define kFormatsFolderName TEXT("Formats") |
-static const TCHAR *kMainDll = TEXT("7z.dll"); |
- |
-#ifdef _WIN32 |
-static LPCTSTR kRegistryPath = TEXT("Software") TEXT(STRING_PATH_SEPARATOR) TEXT("7-zip"); |
-static LPCTSTR kProgramPathValue = TEXT("Path"); |
-static bool ReadPathFromRegistry(HKEY baseKey, CSysString &path) |
-{ |
- NRegistry::CKey key; |
- if(key.Open(baseKey, kRegistryPath, KEY_READ) == ERROR_SUCCESS) |
- if (key.QueryValue(kProgramPathValue, path) == ERROR_SUCCESS) |
- { |
- NName::NormalizeDirPathPrefix(path); |
- return true; |
- } |
- return false; |
-} |
- |
-#endif |
- |
-CSysString GetBaseFolderPrefixFromRegistry() |
-{ |
- CSysString moduleFolderPrefix = GetLibraryFolderPrefix(); |
- NFind::CFileInfo fi; |
- if (NFind::FindFile(moduleFolderPrefix + kMainDll, fi)) |
- if (!fi.IsDir()) |
- return moduleFolderPrefix; |
- if (NFind::FindFile(moduleFolderPrefix + kCodecsFolderName, fi)) |
- if (fi.IsDir()) |
- return moduleFolderPrefix; |
- if (NFind::FindFile(moduleFolderPrefix + kFormatsFolderName, fi)) |
- if (fi.IsDir()) |
- return moduleFolderPrefix; |
- #ifdef _WIN32 |
- CSysString path; |
- if (ReadPathFromRegistry(HKEY_CURRENT_USER, path)) |
- return path; |
- if (ReadPathFromRegistry(HKEY_LOCAL_MACHINE, path)) |
- return path; |
- #endif |
- return moduleFolderPrefix; |
-} |
- |
-typedef UInt32 (WINAPI *GetNumberOfMethodsFunc)(UInt32 *numMethods); |
-typedef UInt32 (WINAPI *GetNumberOfFormatsFunc)(UInt32 *numFormats); |
-typedef UInt32 (WINAPI *GetHandlerPropertyFunc)(PROPID propID, PROPVARIANT *value); |
-typedef UInt32 (WINAPI *GetHandlerPropertyFunc2)(UInt32 index, PROPID propID, PROPVARIANT *value); |
-typedef UInt32 (WINAPI *CreateObjectFunc)(const GUID *clsID, const GUID *iid, void **outObject); |
-typedef UInt32 (WINAPI *SetLargePageModeFunc)(); |
- |
- |
-static HRESULT GetCoderClass(GetMethodPropertyFunc getMethodProperty, UInt32 index, |
- PROPID propId, CLSID &clsId, bool &isAssigned) |
-{ |
- NWindows::NCOM::CPropVariant prop; |
- isAssigned = false; |
- RINOK(getMethodProperty(index, propId, &prop)); |
- if (prop.vt == VT_BSTR) |
- { |
- isAssigned = true; |
- clsId = *(const GUID *)prop.bstrVal; |
- } |
- else if (prop.vt != VT_EMPTY) |
- return E_FAIL; |
- return S_OK; |
-} |
- |
-HRESULT CCodecs::LoadCodecs() |
-{ |
- CCodecLib &lib = Libs.Back(); |
- lib.GetMethodProperty = (GetMethodPropertyFunc)lib.Lib.GetProcAddress("GetMethodProperty"); |
- if (lib.GetMethodProperty == NULL) |
- return S_OK; |
- |
- UInt32 numMethods = 1; |
- GetNumberOfMethodsFunc getNumberOfMethodsFunc = (GetNumberOfMethodsFunc)lib.Lib.GetProcAddress("GetNumberOfMethods"); |
- if (getNumberOfMethodsFunc != NULL) |
- { |
- RINOK(getNumberOfMethodsFunc(&numMethods)); |
- } |
- |
- for(UInt32 i = 0; i < numMethods; i++) |
- { |
- CDllCodecInfo info; |
- info.LibIndex = Libs.Size() - 1; |
- info.CodecIndex = i; |
- |
- RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kEncoder, info.Encoder, info.EncoderIsAssigned)); |
- RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kDecoder, info.Decoder, info.DecoderIsAssigned)); |
- |
- Codecs.Add(info); |
- } |
- return S_OK; |
-} |
- |
-static HRESULT ReadProp( |
- GetHandlerPropertyFunc getProp, |
- GetHandlerPropertyFunc2 getProp2, |
- UInt32 index, PROPID propID, NCOM::CPropVariant &prop) |
-{ |
- if (getProp2) |
- return getProp2(index, propID, &prop);; |
- return getProp(propID, &prop); |
-} |
- |
-static HRESULT ReadBoolProp( |
- GetHandlerPropertyFunc getProp, |
- GetHandlerPropertyFunc2 getProp2, |
- UInt32 index, PROPID propID, bool &res) |
-{ |
- NCOM::CPropVariant prop; |
- RINOK(ReadProp(getProp, getProp2, index, propID, prop)); |
- if (prop.vt == VT_BOOL) |
- res = VARIANT_BOOLToBool(prop.boolVal); |
- else if (prop.vt != VT_EMPTY) |
- return E_FAIL; |
- return S_OK; |
-} |
- |
-static HRESULT ReadStringProp( |
- GetHandlerPropertyFunc getProp, |
- GetHandlerPropertyFunc2 getProp2, |
- UInt32 index, PROPID propID, UString &res) |
-{ |
- NCOM::CPropVariant prop; |
- RINOK(ReadProp(getProp, getProp2, index, propID, prop)); |
- if (prop.vt == VT_BSTR) |
- res = prop.bstrVal; |
- else if (prop.vt != VT_EMPTY) |
- return E_FAIL; |
- return S_OK; |
-} |
- |
-#endif |
- |
-static const unsigned int kNumArcsMax = 32; |
-static unsigned int g_NumArcs = 0; |
-static const CArcInfo *g_Arcs[kNumArcsMax]; |
-void RegisterArc(const CArcInfo *arcInfo) |
-{ |
- if (g_NumArcs < kNumArcsMax) |
- g_Arcs[g_NumArcs++] = arcInfo; |
-} |
- |
-static void SplitString(const UString &srcString, UStringVector &destStrings) |
-{ |
- destStrings.Clear(); |
- UString s; |
- int len = srcString.Length(); |
- if (len == 0) |
- return; |
- for (int i = 0; i < len; i++) |
- { |
- wchar_t c = srcString[i]; |
- if (c == L' ') |
- { |
- if (!s.IsEmpty()) |
- { |
- destStrings.Add(s); |
- s.Empty(); |
- } |
- } |
- else |
- s += c; |
- } |
- if (!s.IsEmpty()) |
- destStrings.Add(s); |
-} |
- |
-void CArcInfoEx::AddExts(const wchar_t* ext, const wchar_t* addExt) |
-{ |
- UStringVector exts, addExts; |
- SplitString(ext, exts); |
- if (addExt != 0) |
- SplitString(addExt, addExts); |
- for (int i = 0; i < exts.Size(); i++) |
- { |
- CArcExtInfo extInfo; |
- extInfo.Ext = exts[i]; |
- if (i < addExts.Size()) |
- { |
- extInfo.AddExt = addExts[i]; |
- if (extInfo.AddExt == L"*") |
- extInfo.AddExt.Empty(); |
- } |
- Exts.Add(extInfo); |
- } |
-} |
- |
-#ifdef EXTERNAL_CODECS |
- |
-HRESULT CCodecs::LoadFormats() |
-{ |
- const NDLL::CLibrary &lib = Libs.Back().Lib; |
- GetHandlerPropertyFunc getProp = 0; |
- GetHandlerPropertyFunc2 getProp2 = (GetHandlerPropertyFunc2) |
- lib.GetProcAddress("GetHandlerProperty2"); |
- if (getProp2 == NULL) |
- { |
- getProp = (GetHandlerPropertyFunc) |
- lib.GetProcAddress("GetHandlerProperty"); |
- if (getProp == NULL) |
- return S_OK; |
- } |
- |
- UInt32 numFormats = 1; |
- GetNumberOfFormatsFunc getNumberOfFormats = (GetNumberOfFormatsFunc) |
- lib.GetProcAddress("GetNumberOfFormats"); |
- if (getNumberOfFormats != NULL) |
- { |
- RINOK(getNumberOfFormats(&numFormats)); |
- } |
- if (getProp2 == NULL) |
- numFormats = 1; |
- |
- for(UInt32 i = 0; i < numFormats; i++) |
- { |
- CArcInfoEx item; |
- item.LibIndex = Libs.Size() - 1; |
- item.FormatIndex = i; |
- |
- RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kName, item.Name)); |
- |
- NCOM::CPropVariant prop; |
- if (ReadProp(getProp, getProp2, i, NArchive::kClassID, prop) != S_OK) |
- continue; |
- if (prop.vt != VT_BSTR) |
- continue; |
- item.ClassID = *(const GUID *)prop.bstrVal; |
- prop.Clear(); |
- |
- UString ext, addExt; |
- RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kExtension, ext)); |
- RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kAddExtension, addExt)); |
- item.AddExts(ext, addExt); |
- |
- ReadBoolProp(getProp, getProp2, i, NArchive::kUpdate, item.UpdateEnabled); |
- if (item.UpdateEnabled) |
- ReadBoolProp(getProp, getProp2, i, NArchive::kKeepName, item.KeepName); |
- |
- if (ReadProp(getProp, getProp2, i, NArchive::kStartSignature, prop) == S_OK) |
- if (prop.vt == VT_BSTR) |
- { |
- UINT len = ::SysStringByteLen(prop.bstrVal); |
- item.StartSignature.SetCapacity(len); |
- memmove(item.StartSignature, prop.bstrVal, len); |
- } |
- Formats.Add(item); |
- } |
- return S_OK; |
-} |
- |
-#ifdef NEW_FOLDER_INTERFACE |
-void CCodecLib::LoadIcons() |
-{ |
- UString iconTypes = MyLoadStringW((HMODULE)Lib, kIconTypesResId); |
- UStringVector pairs; |
- SplitString(iconTypes, pairs); |
- for (int i = 0; i < pairs.Size(); i++) |
- { |
- const UString &s = pairs[i]; |
- int pos = s.Find(L':'); |
- if (pos < 0) |
- continue; |
- CIconPair iconPair; |
- const wchar_t *end; |
- UString num = s.Mid(pos + 1); |
- iconPair.IconIndex = (UInt32)ConvertStringToUInt64(num, &end); |
- if (*end != L'\0') |
- continue; |
- iconPair.Ext = s.Left(pos); |
- IconPairs.Add(iconPair); |
- } |
-} |
- |
-int CCodecLib::FindIconIndex(const UString &ext) const |
-{ |
- for (int i = 0; i < IconPairs.Size(); i++) |
- { |
- const CIconPair &pair = IconPairs[i]; |
- if (ext.CompareNoCase(pair.Ext) == 0) |
- return pair.IconIndex; |
- } |
- return -1; |
-} |
-#endif |
- |
-#ifdef _7ZIP_LARGE_PAGES |
-extern "C" |
-{ |
- extern SIZE_T g_LargePageSize; |
-} |
-#endif |
- |
-HRESULT CCodecs::LoadDll(const CSysString &dllPath) |
-{ |
- { |
- NDLL::CLibrary library; |
- if (!library.LoadEx(dllPath, LOAD_LIBRARY_AS_DATAFILE)) |
- return S_OK; |
- } |
- Libs.Add(CCodecLib()); |
- CCodecLib &lib = Libs.Back(); |
- #ifdef NEW_FOLDER_INTERFACE |
- lib.Path = dllPath; |
- #endif |
- bool used = false; |
- HRESULT res = S_OK; |
- if (lib.Lib.Load(dllPath)) |
- { |
- #ifdef NEW_FOLDER_INTERFACE |
- lib.LoadIcons(); |
- #endif |
- |
- #ifdef _7ZIP_LARGE_PAGES |
- if (g_LargePageSize != 0) |
- { |
- SetLargePageModeFunc setLargePageMode = (SetLargePageModeFunc)lib.Lib.GetProcAddress("SetLargePageMode"); |
- if (setLargePageMode != 0) |
- setLargePageMode(); |
- } |
- #endif |
- |
- lib.CreateObject = (CreateObjectFunc)lib.Lib.GetProcAddress("CreateObject"); |
- if (lib.CreateObject != 0) |
- { |
- int startSize = Codecs.Size(); |
- res = LoadCodecs(); |
- used = (Codecs.Size() != startSize); |
- if (res == S_OK) |
- { |
- startSize = Formats.Size(); |
- res = LoadFormats(); |
- used = used || (Formats.Size() != startSize); |
- } |
- } |
- } |
- if (!used) |
- Libs.DeleteBack(); |
- return res; |
-} |
- |
-HRESULT CCodecs::LoadDllsFromFolder(const CSysString &folderPrefix) |
-{ |
- NFile::NFind::CEnumerator enumerator(folderPrefix + CSysString(TEXT("*"))); |
- NFile::NFind::CFileInfo fi; |
- while (enumerator.Next(fi)) |
- { |
- if (fi.IsDir()) |
- continue; |
- RINOK(LoadDll(folderPrefix + fi.Name)); |
- } |
- return S_OK; |
-} |
- |
-#endif |
- |
-#ifndef _SFX |
-static inline void SetBuffer(CByteBuffer &bb, const Byte *data, int size) |
-{ |
- bb.SetCapacity(size); |
- memmove((Byte *)bb, data, size); |
-} |
-#endif |
- |
-HRESULT CCodecs::Load() |
-{ |
- Formats.Clear(); |
- #ifdef EXTERNAL_CODECS |
- Codecs.Clear(); |
- #endif |
- for (UInt32 i = 0; i < g_NumArcs; i++) |
- { |
- const CArcInfo &arc = *g_Arcs[i]; |
- CArcInfoEx item; |
- item.Name = arc.Name; |
- item.CreateInArchive = arc.CreateInArchive; |
- item.CreateOutArchive = arc.CreateOutArchive; |
- item.AddExts(arc.Ext, arc.AddExt); |
- item.UpdateEnabled = (arc.CreateOutArchive != 0); |
- item.KeepName = arc.KeepName; |
- |
- #ifndef _SFX |
- SetBuffer(item.StartSignature, arc.Signature, arc.SignatureSize); |
- #endif |
- Formats.Add(item); |
- } |
- #ifdef EXTERNAL_CODECS |
- const CSysString baseFolder = GetBaseFolderPrefixFromRegistry(); |
- RINOK(LoadDll(baseFolder + kMainDll)); |
- RINOK(LoadDllsFromFolder(baseFolder + kCodecsFolderName TEXT(STRING_PATH_SEPARATOR))); |
- RINOK(LoadDllsFromFolder(baseFolder + kFormatsFolderName TEXT(STRING_PATH_SEPARATOR))); |
- #endif |
- return S_OK; |
-} |
- |
-#ifndef _SFX |
- |
-int CCodecs::FindFormatForArchiveName(const UString &arcPath) const |
-{ |
- int slashPos1 = arcPath.ReverseFind(WCHAR_PATH_SEPARATOR); |
- int slashPos2 = arcPath.ReverseFind(L'.'); |
- int dotPos = arcPath.ReverseFind(L'.'); |
- if (dotPos < 0 || dotPos < slashPos1 || dotPos < slashPos2) |
- return -1; |
- UString ext = arcPath.Mid(dotPos + 1); |
- for (int i = 0; i < Formats.Size(); i++) |
- { |
- const CArcInfoEx &arc = Formats[i]; |
- if (!arc.UpdateEnabled) |
- continue; |
- // if (arc.FindExtension(ext) >= 0) |
- UString mainExt = arc.GetMainExt(); |
- if (!mainExt.IsEmpty() && ext.CompareNoCase(mainExt) == 0) |
- return i; |
- } |
- return -1; |
-} |
- |
-int CCodecs::FindFormatForExtension(const UString &ext) const |
-{ |
- if (ext.IsEmpty()) |
- return -1; |
- for (int i = 0; i < Formats.Size(); i++) |
- if (Formats[i].FindExtension(ext) >= 0) |
- return i; |
- return -1; |
-} |
- |
-int CCodecs::FindFormatForArchiveType(const UString &arcType) const |
-{ |
- for (int i = 0; i < Formats.Size(); i++) |
- if (Formats[i].Name.CompareNoCase(arcType) == 0) |
- return i; |
- return -1; |
-} |
- |
-bool CCodecs::FindFormatForArchiveType(const UString &arcType, CIntVector &formatIndices) const |
-{ |
- formatIndices.Clear(); |
- for (int pos = 0; pos < arcType.Length();) |
- { |
- int pos2 = arcType.Find('.', pos); |
- if (pos2 < 0) |
- pos2 = arcType.Length(); |
- const UString name = arcType.Mid(pos, pos2 - pos); |
- int index = FindFormatForArchiveType(name); |
- if (index < 0 && name != L"*") |
- { |
- formatIndices.Clear(); |
- return false; |
- } |
- formatIndices.Add(index); |
- pos = pos2 + 1; |
- } |
- return true; |
-} |
- |
-#endif |
- |
-#ifdef EXTERNAL_CODECS |
- |
-#ifdef EXPORT_CODECS |
-extern unsigned int g_NumCodecs; |
-STDAPI CreateCoder2(bool encode, UInt32 index, const GUID *iid, void **outObject); |
-STDAPI GetMethodProperty(UInt32 codecIndex, PROPID propID, PROPVARIANT *value); |
-// STDAPI GetNumberOfMethods(UInt32 *numCodecs); |
-#endif |
- |
-STDMETHODIMP CCodecs::GetNumberOfMethods(UInt32 *numMethods) |
-{ |
- *numMethods = |
- #ifdef EXPORT_CODECS |
- g_NumCodecs + |
- #endif |
- Codecs.Size(); |
- return S_OK; |
-} |
- |
-STDMETHODIMP CCodecs::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) |
-{ |
- #ifdef EXPORT_CODECS |
- if (index < g_NumCodecs) |
- return GetMethodProperty(index, propID, value); |
- #endif |
- |
- const CDllCodecInfo &ci = Codecs[index |
- #ifdef EXPORT_CODECS |
- - g_NumCodecs |
- #endif |
- ]; |
- |
- if (propID == NMethodPropID::kDecoderIsAssigned) |
- { |
- NWindows::NCOM::CPropVariant propVariant; |
- propVariant = ci.DecoderIsAssigned; |
- propVariant.Detach(value); |
- return S_OK; |
- } |
- if (propID == NMethodPropID::kEncoderIsAssigned) |
- { |
- NWindows::NCOM::CPropVariant propVariant; |
- propVariant = ci.EncoderIsAssigned; |
- propVariant.Detach(value); |
- return S_OK; |
- } |
- return Libs[ci.LibIndex].GetMethodProperty(ci.CodecIndex, propID, value); |
-} |
- |
-STDMETHODIMP CCodecs::CreateDecoder(UInt32 index, const GUID *iid, void **coder) |
-{ |
- #ifdef EXPORT_CODECS |
- if (index < g_NumCodecs) |
- return CreateCoder2(false, index, iid, coder); |
- #endif |
- const CDllCodecInfo &ci = Codecs[index |
- #ifdef EXPORT_CODECS |
- - g_NumCodecs |
- #endif |
- ]; |
- if (ci.DecoderIsAssigned) |
- return Libs[ci.LibIndex].CreateObject(&ci.Decoder, iid, (void **)coder); |
- return S_OK; |
-} |
- |
-STDMETHODIMP CCodecs::CreateEncoder(UInt32 index, const GUID *iid, void **coder) |
-{ |
- #ifdef EXPORT_CODECS |
- if (index < g_NumCodecs) |
- return CreateCoder2(true, index, iid, coder); |
- #endif |
- const CDllCodecInfo &ci = Codecs[index |
- #ifdef EXPORT_CODECS |
- - g_NumCodecs |
- #endif |
- ]; |
- if (ci.EncoderIsAssigned) |
- return Libs[ci.LibIndex].CreateObject(&ci.Encoder, iid, (void **)coder); |
- return S_OK; |
-} |
- |
-HRESULT CCodecs::CreateCoder(const UString &name, bool encode, CMyComPtr<ICompressCoder> &coder) const |
-{ |
- for (int i = 0; i < Codecs.Size(); i++) |
- { |
- const CDllCodecInfo &codec = Codecs[i]; |
- if (encode && !codec.EncoderIsAssigned || !encode && !codec.DecoderIsAssigned) |
- continue; |
- const CCodecLib &lib = Libs[codec.LibIndex]; |
- UString res; |
- NWindows::NCOM::CPropVariant prop; |
- RINOK(lib.GetMethodProperty(codec.CodecIndex, NMethodPropID::kName, &prop)); |
- if (prop.vt == VT_BSTR) |
- res = prop.bstrVal; |
- else if (prop.vt != VT_EMPTY) |
- continue; |
- if (name.CompareNoCase(res) == 0) |
- return lib.CreateObject(encode ? &codec.Encoder : &codec.Decoder, &IID_ICompressCoder, (void **)&coder); |
- } |
- return CLASS_E_CLASSNOTAVAILABLE; |
-} |
- |
-int CCodecs::GetCodecLibIndex(UInt32 index) |
-{ |
- #ifdef EXPORT_CODECS |
- if (index < g_NumCodecs) |
- return -1; |
- #endif |
- #ifdef EXTERNAL_CODECS |
- const CDllCodecInfo &ci = Codecs[index |
- #ifdef EXPORT_CODECS |
- - g_NumCodecs |
- #endif |
- ]; |
- return ci.LibIndex; |
- #else |
- return -1; |
- #endif |
-} |
- |
-bool CCodecs::GetCodecEncoderIsAssigned(UInt32 index) |
-{ |
- #ifdef EXPORT_CODECS |
- if (index < g_NumCodecs) |
- { |
- NWindows::NCOM::CPropVariant prop; |
- if (GetProperty(index, NMethodPropID::kEncoder, &prop) == S_OK) |
- if (prop.vt != VT_EMPTY) |
- return true; |
- return false; |
- } |
- #endif |
- #ifdef EXTERNAL_CODECS |
- const CDllCodecInfo &ci = Codecs[index |
- #ifdef EXPORT_CODECS |
- - g_NumCodecs |
- #endif |
- ]; |
- return ci.EncoderIsAssigned; |
- #else |
- return false; |
- #endif |
-} |
- |
-HRESULT CCodecs::GetCodecId(UInt32 index, UInt64 &id) |
-{ |
- UString s; |
- NWindows::NCOM::CPropVariant prop; |
- RINOK(GetProperty(index, NMethodPropID::kID, &prop)); |
- if (prop.vt != VT_UI8) |
- return E_INVALIDARG; |
- id = prop.uhVal.QuadPart; |
- return S_OK; |
-} |
- |
-UString CCodecs::GetCodecName(UInt32 index) |
-{ |
- UString s; |
- NWindows::NCOM::CPropVariant prop; |
- if (GetProperty(index, NMethodPropID::kName, &prop) == S_OK) |
- if (prop.vt == VT_BSTR) |
- s = prop.bstrVal; |
- return s; |
-} |
- |
-#endif |