1 /* 2 * Copyright 2009 Maarten Lankhorst 3 * 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. 8 * 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. 13 * 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 17 */ 18 19 #pragma once 20 21 extern HRESULT MMDevEnum_Create(REFIID riid, void **ppv) DECLSPEC_HIDDEN; 22 extern void MMDevEnum_Free(void) DECLSPEC_HIDDEN; 23 24 25 /* Changes to this enum must be synced in drivers. */ 26 enum _DriverPriority { 27 Priority_Unavailable = 0, /* driver won't work */ 28 Priority_Low, /* driver may work, but unlikely */ 29 Priority_Neutral, /* driver makes no judgment */ 30 Priority_Preferred /* driver thinks it's correct */ 31 }; 32 33 typedef struct _DriverFuncs { 34 HMODULE module; 35 WCHAR module_name[64]; 36 int priority; 37 38 /* Returns a "priority" value for the driver. Highest priority wins. 39 * If multiple drivers think they are valid, they will return a 40 * priority value reflecting the likelihood that they are actually 41 * valid. See enum _DriverPriority. */ 42 int (WINAPI *pGetPriority)(void); 43 44 /* ids gets an array of human-friendly endpoint names 45 * keys gets an array of driver-specific stuff that is used 46 * in GetAudioEndpoint to identify the endpoint 47 * it is the caller's responsibility to free both arrays, and 48 * all of the elements in both arrays with HeapFree() */ 49 HRESULT (WINAPI *pGetEndpointIDs)(EDataFlow flow, WCHAR ***ids, 50 GUID **guids, UINT *num, UINT *default_index); 51 HRESULT (WINAPI *pGetAudioEndpoint)(void *key, IMMDevice *dev, 52 IAudioClient **out); 53 HRESULT (WINAPI *pGetAudioSessionManager)(IMMDevice *device, 54 IAudioSessionManager2 **out); 55 HRESULT (WINAPI *pGetPropValue)(GUID *guid, 56 const PROPERTYKEY *prop, PROPVARIANT *out); 57 } DriverFuncs; 58 59 extern DriverFuncs drvs DECLSPEC_HIDDEN; 60 61 typedef struct MMDevice { 62 IMMDevice IMMDevice_iface; 63 IMMEndpoint IMMEndpoint_iface; 64 LONG ref; 65 66 CRITICAL_SECTION crst; 67 68 EDataFlow flow; 69 DWORD state; 70 GUID devguid; 71 WCHAR *drv_id; 72 } MMDevice; 73 74 extern HRESULT AudioClient_Create(MMDevice *parent, IAudioClient **ppv) DECLSPEC_HIDDEN; 75 extern HRESULT AudioEndpointVolume_Create(MMDevice *parent, IAudioEndpointVolumeEx **ppv) DECLSPEC_HIDDEN; 76 77 extern const WCHAR drv_keyW[] DECLSPEC_HIDDEN; 78