2 * Copyright 2009 Maarten Lankhorst
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <wine/config.h>
23 #include <wine/port.h>
27 #define WIN32_NO_STATUS
29 #define COM_NO_WINDOWS_H
32 #define NONAMELESSUNION
39 #include <audiopolicy.h>
40 #include <endpointvolume.h>
41 #include <mmdeviceapi.h>
43 #include <wine/debug.h>
44 #include <wine/unicode.h>
46 WINE_DEFAULT_DEBUG_CHANNEL(mmdevapi
);
48 extern HRESULT
MMDevEnum_Create(REFIID riid
, void **ppv
) DECLSPEC_HIDDEN
;
49 extern void MMDevEnum_Free(void) DECLSPEC_HIDDEN
;
52 /* Changes to this enum must be synced in drivers. */
53 enum _DriverPriority
{
54 Priority_Unavailable
= 0, /* driver won't work */
55 Priority_Low
, /* driver may work, but unlikely */
56 Priority_Neutral
, /* driver makes no judgment */
57 Priority_Preferred
/* driver thinks it's correct */
60 typedef struct _DriverFuncs
{
62 WCHAR module_name
[64];
65 /* Returns a "priority" value for the driver. Highest priority wins.
66 * If multiple drivers think they are valid, they will return a
67 * priority value reflecting the likelihood that they are actually
68 * valid. See enum _DriverPriority. */
69 int (WINAPI
*pGetPriority
)(void);
71 /* ids gets an array of human-friendly endpoint names
72 * keys gets an array of driver-specific stuff that is used
73 * in GetAudioEndpoint to identify the endpoint
74 * it is the caller's responsibility to free both arrays, and
75 * all of the elements in both arrays with HeapFree() */
76 HRESULT (WINAPI
*pGetEndpointIDs
)(EDataFlow flow
, WCHAR
***ids
,
77 GUID
**guids
, UINT
*num
, UINT
*default_index
);
78 HRESULT (WINAPI
*pGetAudioEndpoint
)(void *key
, IMMDevice
*dev
,
80 HRESULT (WINAPI
*pGetAudioSessionManager
)(IMMDevice
*device
,
81 IAudioSessionManager2
**out
);
84 extern DriverFuncs drvs DECLSPEC_HIDDEN
;
86 typedef struct MMDevice
{
87 IMMDevice IMMDevice_iface
;
88 IMMEndpoint IMMEndpoint_iface
;
91 CRITICAL_SECTION crst
;
99 extern HRESULT
AudioClient_Create(MMDevice
*parent
, IAudioClient
**ppv
) DECLSPEC_HIDDEN
;
100 extern HRESULT
AudioEndpointVolume_Create(MMDevice
*parent
, IAudioEndpointVolume
**ppv
) DECLSPEC_HIDDEN
;
102 extern const WCHAR drv_keyW
[] DECLSPEC_HIDDEN
;
104 #endif /* _MMDEVAPI_H_ */