mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 04:39:45 +00:00
msdmo: Implement DMOGetTypes.
This commit is contained in:
parent
4cd3a16f18
commit
54720c78f7
@ -76,6 +76,12 @@ static const WCHAR szCat2Fmt[] =
|
|||||||
'%','s','\\','%','s',0
|
'%','s','\\','%','s',0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const WCHAR szToGuidFmt[] =
|
||||||
|
{
|
||||||
|
'{','%','s','}',0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
const IEnumDMOVtbl *lpVtbl;
|
const IEnumDMOVtbl *lpVtbl;
|
||||||
@ -439,6 +445,7 @@ static HRESULT WINAPI IEnumDMO_fnNext(
|
|||||||
FILETIME ft;
|
FILETIME ft;
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
WCHAR szNextKey[MAX_PATH];
|
WCHAR szNextKey[MAX_PATH];
|
||||||
|
WCHAR szGuidKey[64];
|
||||||
WCHAR szKey[MAX_PATH];
|
WCHAR szKey[MAX_PATH];
|
||||||
WCHAR szValue[MAX_PATH];
|
WCHAR szValue[MAX_PATH];
|
||||||
DWORD len;
|
DWORD len;
|
||||||
@ -447,7 +454,7 @@ static HRESULT WINAPI IEnumDMO_fnNext(
|
|||||||
|
|
||||||
IEnumDMOImpl *This = (IEnumDMOImpl *)iface;
|
IEnumDMOImpl *This = (IEnumDMOImpl *)iface;
|
||||||
|
|
||||||
TRACE("%d\n", cItemsToFetch);
|
TRACE("--> (%p) %d %p %p %p\n", iface, cItemsToFetch, pCLSID, Names, pcItemsFetched);
|
||||||
|
|
||||||
if (!pCLSID || !Names || !pcItemsFetched)
|
if (!pCLSID || !Names || !pcItemsFetched)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
@ -556,7 +563,8 @@ static HRESULT WINAPI IEnumDMO_fnNext(
|
|||||||
if (Names[count])
|
if (Names[count])
|
||||||
strcmpW(Names[count], szValue);
|
strcmpW(Names[count], szValue);
|
||||||
}
|
}
|
||||||
CLSIDFromString(szNextKey, &pCLSID[count]);
|
wsprintfW(szGuidKey,szToGuidFmt,szNextKey);
|
||||||
|
CLSIDFromString(szGuidKey, &pCLSID[count]);
|
||||||
|
|
||||||
TRACE("found match %s %s\n", debugstr_w(szValue), debugstr_w(szNextKey));
|
TRACE("found match %s %s\n", debugstr_w(szValue), debugstr_w(szNextKey));
|
||||||
RegCloseKey(hkey);
|
RegCloseKey(hkey);
|
||||||
@ -567,6 +575,7 @@ static HRESULT WINAPI IEnumDMO_fnNext(
|
|||||||
if (*pcItemsFetched < cItemsToFetch)
|
if (*pcItemsFetched < cItemsToFetch)
|
||||||
hres = S_FALSE;
|
hres = S_FALSE;
|
||||||
|
|
||||||
|
TRACE("<-- %i found\n",count);
|
||||||
return hres;
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -650,11 +659,113 @@ static const IEnumDMOVtbl edmovt =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
HRESULT WINAPI DMOGetTypes(REFCLSID a, ULONG b, ULONG* c,
|
HRESULT build_types(HKEY root, LPCWSTR key, ULONG *supplied, ULONG requested, DMO_PARTIAL_MEDIATYPE* types )
|
||||||
DMO_PARTIAL_MEDIATYPE* d, ULONG e,
|
|
||||||
ULONG* f, DMO_PARTIAL_MEDIATYPE* g)
|
|
||||||
{
|
{
|
||||||
FIXME("(%p,%u,%p,%p,%u,%p,%p),stub!\n",a,b,c,d,e,f,g);
|
HRESULT ret = S_OK;
|
||||||
|
HKEY hkey;
|
||||||
|
WCHAR szGuidKey[64];
|
||||||
|
|
||||||
return E_NOTIMPL;
|
*supplied = 0;
|
||||||
|
if (ERROR_SUCCESS == RegOpenKeyExW(root, key, 0, KEY_READ, &hkey))
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
WCHAR szNextKey[MAX_PATH];
|
||||||
|
DWORD len;
|
||||||
|
LONG rc = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
len = MAX_PATH;
|
||||||
|
while (rc == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
len = MAX_PATH;
|
||||||
|
rc = RegEnumKeyExW(hkey, index, szNextKey, &len, NULL, NULL, NULL, NULL);
|
||||||
|
if (rc == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
HKEY subk;
|
||||||
|
int sub_index = 0;
|
||||||
|
LONG rcs = ERROR_SUCCESS;
|
||||||
|
WCHAR szSubKey[MAX_PATH];
|
||||||
|
|
||||||
|
RegOpenKeyExW(hkey, szNextKey, 0, KEY_READ, &subk);
|
||||||
|
while (rcs == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
len = MAX_PATH;
|
||||||
|
rcs = RegEnumKeyExW(subk, sub_index, szSubKey, &len, NULL, NULL, NULL, NULL);
|
||||||
|
if (rcs == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if (*supplied >= requested)
|
||||||
|
{
|
||||||
|
/* Bailing */
|
||||||
|
ret = S_FALSE;
|
||||||
|
rc = ERROR_MORE_DATA;
|
||||||
|
rcs = ERROR_MORE_DATA;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
wsprintfW(szGuidKey,szToGuidFmt,szNextKey);
|
||||||
|
CLSIDFromString(szGuidKey, &types[*supplied].type);
|
||||||
|
wsprintfW(szGuidKey,szToGuidFmt,szSubKey);
|
||||||
|
CLSIDFromString(szGuidKey, &types[*supplied].subtype);
|
||||||
|
TRACE("Adding type %s subtype %s at index %i\n",
|
||||||
|
debugstr_guid(&types[*supplied].type),
|
||||||
|
debugstr_guid(&types[*supplied].subtype),
|
||||||
|
*supplied);
|
||||||
|
(*supplied)++;
|
||||||
|
}
|
||||||
|
sub_index++;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RegCloseKey(hkey);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT WINAPI DMOGetTypes(REFCLSID clsidDMO,
|
||||||
|
ULONG ulInputTypesRequested,
|
||||||
|
ULONG* pulInputTypesSupplied,
|
||||||
|
DMO_PARTIAL_MEDIATYPE* pInputTypes,
|
||||||
|
ULONG ulOutputTypesRequested,
|
||||||
|
ULONG* pulOutputTypesSupplied,
|
||||||
|
DMO_PARTIAL_MEDIATYPE* pOutputTypes)
|
||||||
|
{
|
||||||
|
HKEY root,hkey;
|
||||||
|
HRESULT ret = S_OK;
|
||||||
|
WCHAR szguid[64];
|
||||||
|
|
||||||
|
TRACE ("(%s,%u,%p,%p,%u,%p,%p),stub!\n", debugstr_guid(clsidDMO),
|
||||||
|
ulInputTypesRequested, pulInputTypesSupplied, pInputTypes,
|
||||||
|
ulOutputTypesRequested, pulOutputTypesSupplied, pOutputTypes);
|
||||||
|
|
||||||
|
if (ERROR_SUCCESS != RegOpenKeyExW(HKEY_CLASSES_ROOT, szDMORootKey, 0,
|
||||||
|
KEY_READ, &root))
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
if (ERROR_SUCCESS != RegOpenKeyExW(root,GUIDToString(szguid,clsidDMO) , 0,
|
||||||
|
KEY_READ, &hkey))
|
||||||
|
{
|
||||||
|
RegCloseKey(root);
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ulInputTypesRequested > 0)
|
||||||
|
{
|
||||||
|
ret = build_types(hkey, szDMOInputType, pulInputTypesSupplied, ulInputTypesRequested, pInputTypes );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*pulInputTypesSupplied = 0;
|
||||||
|
|
||||||
|
if (ulOutputTypesRequested > 0)
|
||||||
|
{
|
||||||
|
HRESULT ret2;
|
||||||
|
ret2 = build_types(hkey, szDMOOutputType, pulOutputTypesSupplied, ulOutputTypesRequested, pOutputTypes );
|
||||||
|
|
||||||
|
if (ret == S_OK)
|
||||||
|
ret = ret2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*pulOutputTypesSupplied = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user