#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winerror.h"
#include "winreg.h"
#include "objbase.h"
#include "wine/debug.h"
#include "dmo.h"
Go to the source code of this file.
|
| | WINE_DEFAULT_DEBUG_CHANNEL (msdmo) |
| |
| BOOL | array_reserve (void **elements, unsigned int *capacity, unsigned int count, unsigned int size) |
| |
| static IEnumDMOImpl * | impl_from_IEnumDMO (IEnumDMO *iface) |
| |
| static const WCHAR * | GUIDToString (WCHAR *string, const GUID *guid) |
| |
| static HRESULT | string_to_guid (const WCHAR *string, GUID *guid) |
| |
| static BOOL | IsMediaTypeEqual (const DMO_PARTIAL_MEDIATYPE *mt1, const DMO_PARTIAL_MEDIATYPE *mt2) |
| |
| static HRESULT | write_types (HKEY hkey, LPCWSTR name, const DMO_PARTIAL_MEDIATYPE *types, DWORD count) |
| |
| HRESULT WINAPI | DMORegister (LPCWSTR szName, REFCLSID clsidDMO, REFGUID guidCategory, DWORD dwFlags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes) |
| |
| static HRESULT | unregister_dmo_from_category (const WCHAR *dmoW, const WCHAR *catW, HKEY categories) |
| |
| HRESULT WINAPI | DMOUnregister (REFCLSID dmo, REFGUID category) |
| |
| HRESULT WINAPI | DMOGetName (REFCLSID clsidDMO, WCHAR name[80]) |
| |
| static HRESULT | dup_partial_mediatype (const DMO_PARTIAL_MEDIATYPE *types, DWORD count, DMO_PARTIAL_MEDIATYPE **ret) |
| |
| static HRESULT | IEnumDMO_Constructor (REFGUID guidCategory, DWORD dwFlags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes, IEnumDMO **obj) |
| |
| static ULONG WINAPI | IEnumDMO_fnAddRef (IEnumDMO *iface) |
| |
| static HRESULT WINAPI | IEnumDMO_fnQueryInterface (IEnumDMO *iface, REFIID riid, void **ppvObj) |
| |
| static ULONG WINAPI | IEnumDMO_fnRelease (IEnumDMO *iface) |
| |
| static BOOL | any_types_match (const DMO_PARTIAL_MEDIATYPE *a, unsigned int a_count, const DMO_PARTIAL_MEDIATYPE *b, unsigned int b_count) |
| |
| static HRESULT WINAPI | IEnumDMO_fnNext (IEnumDMO *iface, DWORD cItemsToFetch, CLSID *pCLSID, WCHAR **Names, DWORD *pcItemsFetched) |
| |
| static HRESULT WINAPI | IEnumDMO_fnSkip (IEnumDMO *iface, DWORD cItemsToSkip) |
| |
| static HRESULT WINAPI | IEnumDMO_fnReset (IEnumDMO *iface) |
| |
| static HRESULT WINAPI | IEnumDMO_fnClone (IEnumDMO *iface, IEnumDMO **ppEnum) |
| |
| HRESULT WINAPI | DMOEnum (REFGUID category, DWORD flags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes, IEnumDMO **ppEnum) |
| |
| HRESULT WINAPI | DMOGetTypes (REFCLSID clsid, ULONG input_count, ULONG *ret_input_count, DMO_PARTIAL_MEDIATYPE *input, ULONG output_count, ULONG *ret_output_count, DMO_PARTIAL_MEDIATYPE *output) |
| |
◆ COBJMACROS
◆ any_types_match()
Definition at line 447 of file dmoreg.c.
449{
451
452 for (
i = 0;
i < a_count; ++
i)
453 {
454 for (
j = 0;
j < b_count; ++
j)
455 {
458 }
459 }
461}
static BOOL IsMediaTypeEqual(const DMO_PARTIAL_MEDIATYPE *mt1, const DMO_PARTIAL_MEDIATYPE *mt2)
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Referenced by IEnumDMO_fnNext().
◆ array_reserve()
Definition at line 35 of file dmoreg.c.
36{
37 unsigned int max_capacity, new_capacity;
38 void *new_elements;
39
40 if (
count <= *capacity)
42
43 max_capacity = ~0
u /
size;
44 if (
count > max_capacity)
46
47 new_capacity =
max(8, *capacity);
48 while (new_capacity <
count && new_capacity <= max_capacity / 2)
49 new_capacity *= 2;
50 if (new_capacity <
count)
52
53 if (!(new_elements =
realloc(*elements, new_capacity *
size)))
54 {
55 ERR(
"Failed to allocate memory.\n");
57 }
58
59 *elements = new_elements;
60 *capacity = new_capacity;
62}
GLuint GLuint GLsizei count
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Referenced by IEnumDMO_fnNext().
◆ DMOEnum()
Definition at line 674 of file dmoreg.c.
682{
684 cOutTypes, pOutTypes, ppEnum);
685
687 {
689 if (cInTypes)
690 {
691 for (
i = 0;
i < cInTypes;
i++)
694 }
695
696 if (cOutTypes) {
697 for (
i = 0;
i < cOutTypes;
i++)
700 }
701 }
702
704 pInTypes, cOutTypes, pOutTypes, ppEnum);
705}
static HRESULT IEnumDMO_Constructor(REFGUID guidCategory, DWORD dwFlags, DWORD cInTypes, const DMO_PARTIAL_MEDIATYPE *pInTypes, DWORD cOutTypes, const DMO_PARTIAL_MEDIATYPE *pOutTypes, IEnumDMO **obj)
GLuint GLuint GLsizei GLenum type
Referenced by enum_moniker_create(), and test_dmo().
◆ DMOGetName()
Definition at line 282 of file dmoreg.c.
283{
284 static const INT max_name_len = 80*
sizeof(
WCHAR);
289
291
294
299
302
304 {
307 }
308
311}
#define RegCloseKey(hKey)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
static const WCHAR * GUIDToString(WCHAR *string, const GUID *guid)
#define HKEY_CLASSES_ROOT
Referenced by property_bag_Read().
◆ DMOGetTypes()
Definition at line 722 of file dmoreg.c.
724{
729
730 TRACE(
"clsid %s, input_count %lu, ret_input_count %p, input %p, output_count %lu, ret_output_count %p, output %p.\n",
732
735
737 {
740 }
741
742 *ret_input_count = 0;
747
748 *ret_output_count = 0;
753
757}
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
struct _DMO_PARTIAL_MEDIATYPE DMO_PARTIAL_MEDIATYPE
GLenum GLenum GLenum input
Referenced by property_bag_Read().
◆ DMORegister()
Definition at line 126 of file dmoreg.c.
136{
144
146
149
154
155
159 goto lend;
160
161
164
165
167
168
170
172 {
173
176 goto lend;
178 }
179
180
183 goto lend;
184
186
190 goto lend;
194 goto lend;
195
196lend:
197 if (hkey)
199 if (hckey)
201 if (hclskey)
203 if (hrkey)
205
209}
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
static HRESULT write_types(HKEY hkey, LPCWSTR name, const DMO_PARTIAL_MEDIATYPE *types, DWORD count)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define REG_OPTION_NON_VOLATILE
static const WCHAR szName[]
#define IsEqualGUID(rguid1, rguid2)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Referenced by test_dmo().
◆ DMOUnregister()
Definition at line 231 of file dmoreg.c.
232{
233 HKEY rootkey = 0, categorieskey = 0;
234 WCHAR dmoW[64], catW[64];
237
239
242
245
246
250 {
252 goto lend;
253 }
254
255
257 {
259
262 }
263 else
264 {
267 }
268
269lend:
270 if (categorieskey)
272
274}
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
static HRESULT unregister_dmo_from_category(const WCHAR *dmoW, const WCHAR *catW, HKEY categories)
#define KEY_ENUMERATE_SUB_KEYS
Referenced by test_dmo().
◆ dup_partial_mediatype()
◆ GUIDToString()
◆ IEnumDMO_Constructor()
Definition at line 331 of file dmoreg.c.
339{
342
344
346 if (!lpedmo)
348
357
360 goto lerr;
361
364 goto lerr;
365
366
368 {
370 }
371 else
372 {
375
379 }
380
381lerr:
382
385 else
386 {
387 TRACE(
"returning %p\n", lpedmo);
389 }
390
392}
static const IEnumDMOVtbl edmovt
static HRESULT dup_partial_mediatype(const DMO_PARTIAL_MEDIATYPE *types, DWORD count, DMO_PARTIAL_MEDIATYPE **ret)
DMO_PARTIAL_MEDIATYPE * pOutTypes
DMO_PARTIAL_MEDIATYPE * pInTypes
Referenced by DMOEnum(), and IEnumDMO_fnClone().
◆ IEnumDMO_fnAddRef()
Definition at line 397 of file dmoreg.c.
398{
402 return refCount;
403}
#define InterlockedIncrement
static IEnumDMOImpl * impl_from_IEnumDMO(IEnumDMO *iface)
◆ IEnumDMO_fnClone()
Definition at line 660 of file dmoreg.c.
661{
665 This->cOutTypes,
This->pOutTypes, ppEnum);
666}
◆ IEnumDMO_fnNext()
Definition at line 466 of file dmoreg.c.
472{
474 unsigned int types_size = 0;
483
485
486 TRACE(
"(%p)->(%ld %p %p %p)\n",
This, cItemsToFetch, pCLSID,
Names, pcItemsFetched);
487
488 if (!pCLSID)
490
491 if (!pcItemsFetched && cItemsToFetch > 1)
493
494 while (
count < cItemsToFetch)
495 {
497
501 {
503 break;
504 }
505
507 continue;
508
510
512 {
516 {
518
519 continue;
520 }
521 }
522
526
528 {
530
531 for (;;)
532 {
536 break;
537 if (
size <= types_size)
538 break;
540 {
544 }
545 }
547 {
549 continue;
550 }
551
555
557 {
559 continue;
560 }
561 }
562
564 {
566
567 for (;;)
568 {
572 break;
573 if (
size <= types_size)
574 break;
576 {
580 }
581 }
583 {
585 continue;
586 }
587
591
593 {
595 continue;
596 }
597 }
598
599
603 {
606 {
610 }
611 }
612
616 }
617
619
620 if (pcItemsFetched) *pcItemsFetched =
count;
621 if (
count < cItemsToFetch)
623
626}
void *WINAPI CoTaskMemAlloc(SIZE_T size)
static BOOL any_types_match(const DMO_PARTIAL_MEDIATYPE *a, unsigned int a_count, const DMO_PARTIAL_MEDIATYPE *b, unsigned int b_count)
static HRESULT string_to_guid(const WCHAR *string, GUID *guid)
BOOL array_reserve(void **elements, unsigned int *capacity, unsigned int count, unsigned int size)
@ DMO_ENUMF_INCLUDE_KEYED
◆ IEnumDMO_fnQueryInterface()
Definition at line 408 of file dmoreg.c.
409{
411
413
415
418 {
419 *ppvObj = iface;
420 IEnumDMO_AddRef(iface);
421 }
422
424}
#define IsEqualIID(riid1, riid2)
◆ IEnumDMO_fnRelease()
Definition at line 429 of file dmoreg.c.
430{
433
435
436 if (!refCount)
437 {
443 }
444 return refCount;
445}
#define InterlockedDecrement
#define HeapFree(x, y, z)
◆ IEnumDMO_fnReset()
◆ IEnumDMO_fnSkip()
Definition at line 632 of file dmoreg.c.
633{
635
636 TRACE(
"(%p)->(%ld)\n",
This, cItemsToSkip);
637 This->index += cItemsToSkip;
638
640}
◆ impl_from_IEnumDMO()
◆ IsMediaTypeEqual()
◆ string_to_guid()
Definition at line 94 of file dmoreg.c.
95{
102}
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
Referenced by IEnumDMO_fnNext().
◆ unregister_dmo_from_category()
◆ WINE_DEFAULT_DEBUG_CHANNEL()
| WINE_DEFAULT_DEBUG_CHANNEL |
( |
msdmo |
| ) |
|
◆ write_types()
◆ edmovt
| static const IEnumDMOVtbl edmovt |
|
static |
Initial value:=
{
}
static HRESULT WINAPI IEnumDMO_fnNext(IEnumDMO *iface, DWORD cItemsToFetch, CLSID *pCLSID, WCHAR **Names, DWORD *pcItemsFetched)
static HRESULT WINAPI IEnumDMO_fnClone(IEnumDMO *iface, IEnumDMO **ppEnum)
static HRESULT WINAPI IEnumDMO_fnReset(IEnumDMO *iface)
static HRESULT WINAPI IEnumDMO_fnQueryInterface(IEnumDMO *iface, REFIID riid, void **ppvObj)
static HRESULT WINAPI IEnumDMO_fnSkip(IEnumDMO *iface, DWORD cItemsToSkip)
static ULONG WINAPI IEnumDMO_fnRelease(IEnumDMO *iface)
static ULONG WINAPI IEnumDMO_fnAddRef(IEnumDMO *iface)
Definition at line 83 of file dmoreg.c.
Referenced by IEnumDMO_Constructor().