[PATCH v3 2/3] mmdevapi: Load devices on driver initialization.
Andrew Eikum
aeikum at codeweavers.com
Fri Jun 4 10:29:56 CDT 2021
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
On Thu, Jun 03, 2021 at 06:15:30PM +0200, Rémi Bernon wrote:
> Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
> ---
> dlls/mmdevapi/devenum.c | 14 +++-----------
> dlls/mmdevapi/main.c | 6 ++++++
> dlls/mmdevapi/mmdevapi.h | 3 +++
> 3 files changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/dlls/mmdevapi/devenum.c b/dlls/mmdevapi/devenum.c
> index 38ae5f8962d..a0b36671595 100644
> --- a/dlls/mmdevapi/devenum.c
> +++ b/dlls/mmdevapi/devenum.c
> @@ -373,7 +373,7 @@ static MMDevice *MMDevice_Create(WCHAR *name, GUID *id, EDataFlow flow, DWORD st
> return cur;
> }
>
> -static HRESULT load_devices_from_reg(void)
> +HRESULT load_devices_from_reg(void)
> {
> DWORD i = 0;
> HKEY root, cur;
> @@ -466,7 +466,7 @@ static HRESULT set_format(MMDevice *dev)
> return S_OK;
> }
>
> -static HRESULT load_driver_devices(EDataFlow flow)
> +HRESULT load_driver_devices(EDataFlow flow)
> {
> WCHAR **ids;
> GUID *guids;
> @@ -860,14 +860,6 @@ static const IMMDeviceCollectionVtbl MMDevColVtbl =
>
> HRESULT MMDevEnum_Create(REFIID riid, void **ppv)
> {
> - if (enumerator.ref == 0)
> - {
> - enumerator.ref = 1;
> - load_devices_from_reg();
> - load_driver_devices(eRender);
> - load_driver_devices(eCapture);
> - }
> -
> return IMMDeviceEnumerator_QueryInterface(&enumerator.IMMDeviceEnumerator_iface, riid, ppv);
> }
>
> @@ -1278,7 +1270,7 @@ static const IMMDeviceEnumeratorVtbl MMDevEnumVtbl =
> static MMDevEnumImpl enumerator =
> {
> {&MMDevEnumVtbl},
> - 0,
> + 1,
> };
>
> static HRESULT MMDevPropStore_Create(MMDevice *parent, DWORD access, IPropertyStore **ppv)
> diff --git a/dlls/mmdevapi/main.c b/dlls/mmdevapi/main.c
> index 9cc0aad6105..358c1697a23 100644
> --- a/dlls/mmdevapi/main.c
> +++ b/dlls/mmdevapi/main.c
> @@ -148,6 +148,12 @@ static BOOL WINAPI init_driver(INIT_ONCE *once, void *param, void **context)
> *next = ',';
> }
>
> + if (drvs.module != 0){
> + load_devices_from_reg();
> + load_driver_devices(eRender);
> + load_driver_devices(eCapture);
> + }
> +
> return drvs.module != 0;
> }
>
> diff --git a/dlls/mmdevapi/mmdevapi.h b/dlls/mmdevapi/mmdevapi.h
> index 3bcf568cddf..73c9b0e9592 100644
> --- a/dlls/mmdevapi/mmdevapi.h
> +++ b/dlls/mmdevapi/mmdevapi.h
> @@ -73,4 +73,7 @@ extern HRESULT AudioClient_Create(MMDevice *parent, IAudioClient **ppv) DECLSPEC
> extern HRESULT AudioEndpointVolume_Create(MMDevice *parent, IAudioEndpointVolumeEx **ppv) DECLSPEC_HIDDEN;
> extern HRESULT SpatialAudioClient_Create(IMMDevice *device, ISpatialAudioClient **out) DECLSPEC_HIDDEN;
>
> +extern HRESULT load_devices_from_reg(void) DECLSPEC_HIDDEN;
> +extern HRESULT load_driver_devices(EDataFlow flow) DECLSPEC_HIDDEN;
> +
> extern const WCHAR drv_keyW[] DECLSPEC_HIDDEN;
> --
> 2.31.0
>
>
More information about the wine-devel
mailing list