From 1a2482be2dce854bed01bcf0202be0eb7cef8931 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Fri, 15 Apr 2022 21:40:43 +0100 Subject: [PATCH] wineoss: Move set_volumes to the unixlib. Signed-off-by: Huw Davies Signed-off-by: Andrew Eikum Signed-off-by: Alexandre Julliard --- dlls/wineoss.drv/mmdevdrv.c | 35 ++++++----------------------------- dlls/wineoss.drv/oss.c | 35 +++++++++++++++++++++++++++++++++++ dlls/wineoss.drv/unixlib.h | 31 ++++++++++--------------------- 3 files changed, 51 insertions(+), 50 deletions(-) diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index cdd9b09bff7..9e3380ca8d9 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -18,22 +18,7 @@ */ #define COBJMACROS -#include "config.h" - #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "windef.h" #include "winbase.h" @@ -277,16 +262,6 @@ static DWORD WINAPI timer_thread(void *user) return 0; } -static void oss_lock(struct oss_stream *stream) -{ - pthread_mutex_lock(&stream->lock); -} - -static void oss_unlock(struct oss_stream *stream) -{ - pthread_mutex_unlock(&stream->lock); -} - static void set_device_guid(EDataFlow flow, HKEY drv_key, const WCHAR *key_name, GUID *guid) { @@ -361,11 +336,13 @@ static void get_device_guid(EDataFlow flow, const char *device, GUID *guid) static void set_stream_volumes(ACImpl *This) { - struct oss_stream *stream = This->stream; + struct set_volumes_params params; - oss_lock(stream); - stream->mute = This->session->mute; - oss_unlock(stream); + params.stream = This->stream; + params.master_volume = (This->session->mute ? 0.0f : This->session->master_vol); + params.volumes = This->vols; + params.session_volumes = This->session->channel_vols; + OSS_CALL(set_volumes, ¶ms); } static const OSSDevice *get_ossdevice_from_guid(const GUID *guid) diff --git a/dlls/wineoss.drv/oss.c b/dlls/wineoss.drv/oss.c index 79f2e994d89..b4e2cbda704 100644 --- a/dlls/wineoss.drv/oss.c +++ b/dlls/wineoss.drv/oss.c @@ -44,6 +44,28 @@ #include "unixlib.h" +struct oss_stream +{ + WAVEFORMATEX *fmt; + EDataFlow flow; + UINT flags; + AUDCLNT_SHAREMODE share; + HANDLE event; + + int fd; + + BOOL playing, mute, please_quit; + UINT64 written_frames, last_pos_frames; + UINT32 period_frames, bufsize_frames, held_frames, tmp_buffer_frames, in_oss_frames; + UINT32 oss_bufsize_bytes, lcl_offs_frames; /* offs into local_buffer where valid data starts */ + REFERENCE_TIME period; + + BYTE *local_buffer, *tmp_buffer; + INT32 getbuf_last; /* <0 when using tmp_buffer */ + + pthread_mutex_t lock; +}; + WINE_DEFAULT_DEBUG_CHANNEL(oss); /* copied from kernelbase */ @@ -1316,6 +1338,18 @@ static NTSTATUS get_position(void *args) return oss_unlock_result(stream, ¶ms->result, S_OK); } +static NTSTATUS set_volumes(void *args) +{ + struct set_volumes_params *params = args; + struct oss_stream *stream = params->stream; + + oss_lock(stream); + stream->mute = !params->master_volume; + oss_unlock(stream); + + return STATUS_SUCCESS; +} + static NTSTATUS set_event_handle(void *args) { struct set_event_handle_params *params = args; @@ -1368,6 +1402,7 @@ unixlib_entry_t __wine_unix_call_funcs[] = get_next_packet_size, get_frequency, get_position, + set_volumes, set_event_handle, is_started, }; diff --git a/dlls/wineoss.drv/unixlib.h b/dlls/wineoss.drv/unixlib.h index ed93f0836b1..1ed152fe794 100644 --- a/dlls/wineoss.drv/unixlib.h +++ b/dlls/wineoss.drv/unixlib.h @@ -18,27 +18,7 @@ #include "mmdeviceapi.h" -struct oss_stream -{ - WAVEFORMATEX *fmt; - EDataFlow flow; - UINT flags; - AUDCLNT_SHAREMODE share; - HANDLE event; - - int fd; - - BOOL playing, mute, please_quit; - UINT64 written_frames, last_pos_frames; - UINT32 period_frames, bufsize_frames, held_frames, tmp_buffer_frames, in_oss_frames; - UINT32 oss_bufsize_bytes, lcl_offs_frames; /* offs into local_buffer where valid data starts */ - REFERENCE_TIME period; - - BYTE *local_buffer, *tmp_buffer; - INT32 getbuf_last; /* <0 when using tmp_buffer */ - - pthread_mutex_t lock; -}; +struct stream_oss; /* From */ enum DriverPriority @@ -208,6 +188,14 @@ struct get_position_params UINT64 *qpctime; }; +struct set_volumes_params +{ + struct oss_stream *stream; + float master_volume; + const float *volumes; + const float *session_volumes; +}; + struct set_event_handle_params { struct oss_stream *stream; @@ -243,6 +231,7 @@ enum oss_funcs oss_get_next_packet_size, oss_get_frequency, oss_get_position, + oss_set_volumes, oss_set_event_handle, oss_is_started, };