Davide Beatrici : mmdevapi: Integrate winepulse's additions in unixlib.h.
Alexandre Julliard
julliard at winehq.org
Tue Aug 16 16:02:11 CDT 2022
Module: wine
Branch: master
Commit: e29dc33aebf4e1d4e30fd158b69338331edd3f65
URL: https://gitlab.winehq.org/wine/wine/-/commit/e29dc33aebf4e1d4e30fd158b69338331edd3f65
Author: Davide Beatrici <git at davidebeatrici.dev>
Date: Wed Aug 10 22:48:37 2022 +0200
mmdevapi: Integrate winepulse's additions in unixlib.h.
---
dlls/mmdevapi/unixlib.h | 31 ++++++++++++++++++++++++++++++-
dlls/winealsa.drv/alsa.c | 14 ++++++++++++++
dlls/winealsa.drv/mmdevdrv.c | 2 ++
3 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/dlls/mmdevapi/unixlib.h b/dlls/mmdevapi/unixlib.h
index d17439ebd73..163272c4398 100644
--- a/dlls/mmdevapi/unixlib.h
+++ b/dlls/mmdevapi/unixlib.h
@@ -1,4 +1,5 @@
/*
+ * Copyright 2021 Jacek Caban for CodeWeavers
* Copyright 2022 Huw Davies
*
* This library is free software; you can redistribute it and/or
@@ -27,6 +28,11 @@ struct endpoint
unsigned int device;
};
+struct main_loop_params
+{
+ HANDLE event;
+};
+
struct get_endpoint_ids_params
{
EDataFlow flow;
@@ -39,6 +45,7 @@ struct get_endpoint_ids_params
struct create_stream_params
{
+ const char *name;
const char *device;
EDataFlow flow;
AUDCLNT_SHAREMODE share;
@@ -47,6 +54,7 @@ struct create_stream_params
REFERENCE_TIME period;
const WAVEFORMATEX *fmt;
HRESULT result;
+ UINT32 *channel_count;
stream_handle *stream;
};
@@ -110,7 +118,7 @@ struct get_capture_buffer_params
struct release_capture_buffer_params
{
stream_handle stream;
- UINT32 done;
+ BOOL done;
HRESULT result;
};
@@ -132,6 +140,15 @@ struct get_mix_format_params
HRESULT result;
};
+struct get_device_period_params
+{
+ const char *device;
+ EDataFlow flow;
+ HRESULT result;
+ REFERENCE_TIME *def_period;
+ REFERENCE_TIME *min_period;
+};
+
struct get_buffer_size_params
{
stream_handle stream;
@@ -170,6 +187,7 @@ struct get_frequency_params
struct get_position_params
{
stream_handle stream;
+ BOOL device;
HRESULT result;
UINT64 *pos;
UINT64 *qpctime;
@@ -190,6 +208,12 @@ struct set_event_handle_params
HRESULT result;
};
+struct test_connect_params
+{
+ const char *name;
+ HRESULT result;
+};
+
struct is_started_params
{
stream_handle stream;
@@ -251,6 +275,9 @@ struct midi_notify_wait_params
enum unix_funcs
{
+ process_attach,
+ process_detach,
+ main_loop,
get_endpoint_ids,
create_stream,
release_stream,
@@ -264,6 +291,7 @@ enum unix_funcs
release_capture_buffer,
is_format_supported,
get_mix_format,
+ get_device_period,
get_buffer_size,
get_latency,
get_current_padding,
@@ -272,6 +300,7 @@ enum unix_funcs
get_position,
set_volumes,
set_event_handle,
+ test_connect,
is_started,
get_prop_value,
midi_release,
diff --git a/dlls/winealsa.drv/alsa.c b/dlls/winealsa.drv/alsa.c
index 3274bae70be..fb688fe61c6 100644
--- a/dlls/winealsa.drv/alsa.c
+++ b/dlls/winealsa.drv/alsa.c
@@ -2431,6 +2431,9 @@ static NTSTATUS alsa_get_prop_value(void *args)
unixlib_entry_t __wine_unix_call_funcs[] =
{
+ NULL,
+ NULL,
+ NULL,
alsa_get_endpoint_ids,
alsa_create_stream,
alsa_release_stream,
@@ -2444,6 +2447,7 @@ unixlib_entry_t __wine_unix_call_funcs[] =
alsa_release_capture_buffer,
alsa_is_format_supported,
alsa_get_mix_format,
+ NULL,
alsa_get_buffer_size,
alsa_get_latency,
alsa_get_current_padding,
@@ -2452,6 +2456,7 @@ unixlib_entry_t __wine_unix_call_funcs[] =
alsa_get_position,
alsa_set_volumes,
alsa_set_event_handle,
+ NULL,
alsa_is_started,
alsa_get_prop_value,
alsa_midi_release,
@@ -2493,6 +2498,7 @@ static NTSTATUS alsa_wow64_create_stream(void *args)
{
struct
{
+ PTR32 name;
PTR32 device;
EDataFlow flow;
AUDCLNT_SHAREMODE share;
@@ -2501,10 +2507,12 @@ static NTSTATUS alsa_wow64_create_stream(void *args)
REFERENCE_TIME period;
PTR32 fmt;
HRESULT result;
+ PTR32 channel_count;
PTR32 stream;
} *params32 = args;
struct create_stream_params params =
{
+ .name = ULongToPtr(params32->name),
.device = ULongToPtr(params32->device),
.flow = params32->flow,
.share = params32->share,
@@ -2512,6 +2520,7 @@ static NTSTATUS alsa_wow64_create_stream(void *args)
.duration = params32->duration,
.period = params32->period,
.fmt = ULongToPtr(params32->fmt),
+ .channel_count = ULongToPtr(params32->channel_count),
.stream = ULongToPtr(params32->stream)
};
alsa_create_stream(¶ms);
@@ -2837,6 +2846,9 @@ static NTSTATUS alsa_wow64_get_prop_value(void *args)
unixlib_entry_t __wine_unix_call_wow64_funcs[] =
{
+ NULL,
+ NULL,
+ NULL,
alsa_wow64_get_endpoint_ids,
alsa_wow64_create_stream,
alsa_wow64_release_stream,
@@ -2850,6 +2862,7 @@ unixlib_entry_t __wine_unix_call_wow64_funcs[] =
alsa_release_capture_buffer,
alsa_wow64_is_format_supported,
alsa_wow64_get_mix_format,
+ NULL,
alsa_wow64_get_buffer_size,
alsa_wow64_get_latency,
alsa_wow64_get_current_padding,
@@ -2858,6 +2871,7 @@ unixlib_entry_t __wine_unix_call_wow64_funcs[] =
alsa_wow64_get_position,
alsa_wow64_set_volumes,
alsa_wow64_set_event_handle,
+ NULL,
alsa_is_started,
alsa_wow64_get_prop_value,
alsa_midi_release,
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
index b77c6e7418b..d5cce1b9f4d 100644
--- a/dlls/winealsa.drv/mmdevdrv.c
+++ b/dlls/winealsa.drv/mmdevdrv.c
@@ -746,6 +746,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface,
dump_fmt(fmt);
+ params.name = NULL;
params.device = This->alsa_name;
params.flow = This->dataflow;
params.share = mode;
@@ -753,6 +754,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface,
params.duration = duration;
params.period = period;
params.fmt = fmt;
+ params.channel_count = NULL;
params.stream = &stream;
ALSA_CALL(create_stream, ¶ms);
More information about the wine-cvs
mailing list