1c2c66affSColin Finck /* 2c2c66affSColin Finck * Copyright 2009 Maarten Lankhorst 3c2c66affSColin Finck * 4c2c66affSColin Finck * This library is free software; you can redistribute it and/or 5c2c66affSColin Finck * modify it under the terms of the GNU Lesser General Public 6c2c66affSColin Finck * License as published by the Free Software Foundation; either 7c2c66affSColin Finck * version 2.1 of the License, or (at your option) any later version. 8c2c66affSColin Finck * 9c2c66affSColin Finck * This library is distributed in the hope that it will be useful, 10c2c66affSColin Finck * but WITHOUT ANY WARRANTY; without even the implied warranty of 11c2c66affSColin Finck * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12c2c66affSColin Finck * Lesser General Public License for more details. 13c2c66affSColin Finck * 14c2c66affSColin Finck * You should have received a copy of the GNU Lesser General Public 15c2c66affSColin Finck * License along with this library; if not, write to the Free Software 16c2c66affSColin Finck * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17c2c66affSColin Finck */ 18c2c66affSColin Finck 19*9c982d01SAmine Khaldi #pragma once 20c2c66affSColin Finck 21c2c66affSColin Finck extern HRESULT MMDevEnum_Create(REFIID riid, void **ppv) DECLSPEC_HIDDEN; 22c2c66affSColin Finck extern void MMDevEnum_Free(void) DECLSPEC_HIDDEN; 23c2c66affSColin Finck 24c2c66affSColin Finck 25c2c66affSColin Finck /* Changes to this enum must be synced in drivers. */ 26c2c66affSColin Finck enum _DriverPriority { 27c2c66affSColin Finck Priority_Unavailable = 0, /* driver won't work */ 28c2c66affSColin Finck Priority_Low, /* driver may work, but unlikely */ 29c2c66affSColin Finck Priority_Neutral, /* driver makes no judgment */ 30c2c66affSColin Finck Priority_Preferred /* driver thinks it's correct */ 31c2c66affSColin Finck }; 32c2c66affSColin Finck 33c2c66affSColin Finck typedef struct _DriverFuncs { 34c2c66affSColin Finck HMODULE module; 35c2c66affSColin Finck WCHAR module_name[64]; 36c2c66affSColin Finck int priority; 37c2c66affSColin Finck 38c2c66affSColin Finck /* Returns a "priority" value for the driver. Highest priority wins. 39c2c66affSColin Finck * If multiple drivers think they are valid, they will return a 40c2c66affSColin Finck * priority value reflecting the likelihood that they are actually 41c2c66affSColin Finck * valid. See enum _DriverPriority. */ 42c2c66affSColin Finck int (WINAPI *pGetPriority)(void); 43c2c66affSColin Finck 44c2c66affSColin Finck /* ids gets an array of human-friendly endpoint names 45c2c66affSColin Finck * keys gets an array of driver-specific stuff that is used 46c2c66affSColin Finck * in GetAudioEndpoint to identify the endpoint 47c2c66affSColin Finck * it is the caller's responsibility to free both arrays, and 48c2c66affSColin Finck * all of the elements in both arrays with HeapFree() */ 49c2c66affSColin Finck HRESULT (WINAPI *pGetEndpointIDs)(EDataFlow flow, WCHAR ***ids, 50c2c66affSColin Finck GUID **guids, UINT *num, UINT *default_index); 51c2c66affSColin Finck HRESULT (WINAPI *pGetAudioEndpoint)(void *key, IMMDevice *dev, 52c2c66affSColin Finck IAudioClient **out); 53c2c66affSColin Finck HRESULT (WINAPI *pGetAudioSessionManager)(IMMDevice *device, 54c2c66affSColin Finck IAudioSessionManager2 **out); 55c2c66affSColin Finck HRESULT (WINAPI *pGetPropValue)(GUID *guid, 56c2c66affSColin Finck const PROPERTYKEY *prop, PROPVARIANT *out); 57c2c66affSColin Finck } DriverFuncs; 58c2c66affSColin Finck 59c2c66affSColin Finck extern DriverFuncs drvs DECLSPEC_HIDDEN; 60c2c66affSColin Finck 61c2c66affSColin Finck typedef struct MMDevice { 62c2c66affSColin Finck IMMDevice IMMDevice_iface; 63c2c66affSColin Finck IMMEndpoint IMMEndpoint_iface; 64c2c66affSColin Finck LONG ref; 65c2c66affSColin Finck 66c2c66affSColin Finck CRITICAL_SECTION crst; 67c2c66affSColin Finck 68c2c66affSColin Finck EDataFlow flow; 69c2c66affSColin Finck DWORD state; 70c2c66affSColin Finck GUID devguid; 71c2c66affSColin Finck WCHAR *drv_id; 72c2c66affSColin Finck } MMDevice; 73c2c66affSColin Finck 74c2c66affSColin Finck extern HRESULT AudioClient_Create(MMDevice *parent, IAudioClient **ppv) DECLSPEC_HIDDEN; 75c2c66affSColin Finck extern HRESULT AudioEndpointVolume_Create(MMDevice *parent, IAudioEndpointVolumeEx **ppv) DECLSPEC_HIDDEN; 76c2c66affSColin Finck 77c2c66affSColin Finck extern const WCHAR drv_keyW[] DECLSPEC_HIDDEN; 78