Nikolay Sivov : msdmo: Added a helper to duplicate partial media type arrays.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Apr 24 08:48:51 CDT 2015
Module: wine
Branch: master
Commit: 55620f097cdbee98f4c4113c3441a50539eb63bf
URL: http://source.winehq.org/git/wine.git/?a=commit;h=55620f097cdbee98f4c4113c3441a50539eb63bf
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Apr 23 10:08:18 2015 +0300
msdmo: Added a helper to duplicate partial media type arrays.
---
dlls/msdmo/dmoreg.c | 53 +++++++++++++++++++++++++----------------------------
1 file changed, 25 insertions(+), 28 deletions(-)
diff --git a/dlls/msdmo/dmoreg.c b/dlls/msdmo/dmoreg.c
index 7a81398..7ae01a1 100644
--- a/dlls/msdmo/dmoreg.c
+++ b/dlls/msdmo/dmoreg.c
@@ -360,6 +360,21 @@ HRESULT WINAPI DMOGetName(REFCLSID clsidDMO, WCHAR name[])
return S_FALSE;
}
+static HRESULT dup_partial_mediatype(const DMO_PARTIAL_MEDIATYPE *types, DWORD count, DMO_PARTIAL_MEDIATYPE **ret)
+{
+ *ret = NULL;
+
+ if (count == 0)
+ return S_OK;
+
+ *ret = HeapAlloc(GetProcessHeap(), 0, count*sizeof(*types));
+ if (!*ret)
+ return E_OUTOFMEMORY;
+
+ memcpy(*ret, types, count*sizeof(*types));
+ return S_OK;
+}
+
/**************************************************************************
* IEnumDMO_Constructor
*/
@@ -373,8 +388,7 @@ static HRESULT IEnumDMO_Constructor(
IEnumDMO **obj)
{
IEnumDMOImpl* lpedmo;
- HRESULT hr = S_OK;
- UINT size;
+ HRESULT hr;
LONG ret;
*obj = NULL;
@@ -388,32 +402,16 @@ static HRESULT IEnumDMO_Constructor(
lpedmo->index = -1;
lpedmo->category = *guidCategory;
lpedmo->dwFlags = dwFlags;
+ lpedmo->cInTypes = cInTypes;
+ lpedmo->cOutTypes = cOutTypes;
- if (cInTypes > 0)
- {
- size = cInTypes * sizeof(DMO_PARTIAL_MEDIATYPE);
- lpedmo->pInTypes = HeapAlloc(GetProcessHeap(), 0, size);
- if (!lpedmo->pInTypes)
- {
- hr = E_OUTOFMEMORY;
- goto lerr;
- }
- memcpy(lpedmo->pInTypes, pInTypes, size);
- lpedmo->cInTypes = cInTypes;
- }
+ hr = dup_partial_mediatype(pInTypes, cInTypes, &lpedmo->pInTypes);
+ if (FAILED(hr))
+ goto lerr;
- if (cOutTypes > 0)
- {
- size = cOutTypes * sizeof(DMO_PARTIAL_MEDIATYPE);
- lpedmo->pOutTypes = HeapAlloc(GetProcessHeap(), 0, size);
- if (!lpedmo->pOutTypes)
- {
- hr = E_OUTOFMEMORY;
- goto lerr;
- }
- memcpy(lpedmo->pOutTypes, pOutTypes, size);
- lpedmo->cOutTypes = cOutTypes;
- }
+ hr = dup_partial_mediatype(pOutTypes, cOutTypes, &lpedmo->pOutTypes);
+ if (FAILED(hr))
+ goto lerr;
/* If not filtering by category enum from media objects root */
if (IsEqualGUID(guidCategory, &GUID_NULL))
@@ -426,8 +424,7 @@ static HRESULT IEnumDMO_Constructor(
WCHAR szguid[64];
WCHAR szKey[MAX_PATH];
- wsprintfW(szKey, szCat3Fmt, szDMORootKey, szDMOCategories,
- GUIDToString(szguid, guidCategory));
+ wsprintfW(szKey, szCat3Fmt, szDMORootKey, szDMOCategories, GUIDToString(szguid, guidCategory));
if ((ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &lpedmo->hkey)))
hr = HRESULT_FROM_WIN32(ret);
}
More information about the wine-cvs
mailing list