| /* |
| * Copyright 2009 Maarten Lankhorst |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #ifndef __WINE_CONFIG_H |
| # error You must include config.h to use this header |
| #endif |
| |
| extern HRESULT MMDevEnum_Create(REFIID riid, void **ppv) DECLSPEC_HIDDEN; |
| extern void MMDevEnum_Free(void) DECLSPEC_HIDDEN; |
| |
| |
| /* Changes to this enum must be synced in drivers. */ |
| enum _DriverPriority { |
| Priority_Unavailable = 0, /* driver won't work */ |
| Priority_Low, /* driver may work, but unlikely */ |
| Priority_Neutral, /* driver makes no judgment */ |
| Priority_Preferred /* driver thinks it's correct */ |
| }; |
| |
| typedef struct _DriverFuncs { |
| HMODULE module; |
| WCHAR module_name[64]; |
| int priority; |
| |
| /* Returns a "priority" value for the driver. Highest priority wins. |
| * If multiple drivers think they are valid, they will return a |
| * priority value reflecting the likelihood that they are actually |
| * valid. See enum _DriverPriority. */ |
| int (WINAPI *pGetPriority)(void); |
| |
| /* ids gets an array of human-friendly endpoint names |
| * keys gets an array of driver-specific stuff that is used |
| * in GetAudioEndpoint to identify the endpoint |
| * it is the caller's responsibility to free both arrays, and |
| * all of the elements in both arrays with HeapFree() */ |
| HRESULT (WINAPI *pGetEndpointIDs)(EDataFlow flow, WCHAR ***ids, |
| GUID **guids, UINT *num, UINT *default_index); |
| HRESULT (WINAPI *pGetAudioEndpoint)(void *key, IMMDevice *dev, |
| IAudioClient **out); |
| HRESULT (WINAPI *pGetAudioSessionManager)(IMMDevice *device, |
| IAudioSessionManager2 **out); |
| HRESULT (WINAPI *pGetPropValue)(GUID *guid, |
| const PROPERTYKEY *prop, PROPVARIANT *out); |
| } DriverFuncs; |
| |
| extern DriverFuncs drvs DECLSPEC_HIDDEN; |
| |
| typedef struct MMDevice { |
| IMMDevice IMMDevice_iface; |
| IMMEndpoint IMMEndpoint_iface; |
| LONG ref; |
| |
| CRITICAL_SECTION crst; |
| |
| EDataFlow flow; |
| DWORD state; |
| GUID devguid; |
| WCHAR *drv_id; |
| } MMDevice; |
| |
| extern HRESULT AudioClient_Create(MMDevice *parent, IAudioClient **ppv) DECLSPEC_HIDDEN; |
| extern HRESULT AudioEndpointVolume_Create(MMDevice *parent, IAudioEndpointVolumeEx **ppv) DECLSPEC_HIDDEN; |
| |
| extern const WCHAR drv_keyW[] DECLSPEC_HIDDEN; |