Signed-off-by: Huw Davies huw@codeweavers.com --- 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 <stdarg.h> -#include <errno.h> -#include <limits.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/ioctl.h> -#include <fcntl.h> -#include <unistd.h> -#include <math.h> -#include <sys/soundcard.h> -#include <pthread.h>
#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 <dlls/mmdevapi/mmdevapi.h> */ 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, };
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=112678
Your paranoid android.
=== debian11 (build log) ===
error: patch failed: dlls/wineoss.drv/oss.c:1243 error: patch failed: dlls/wineoss.drv/unixlib.h:186 error: patch failed: dlls/wineoss.drv/oss.c:1256 error: patch failed: dlls/wineoss.drv/unixlib.h:193 error: patch failed: dlls/wineoss.drv/oss.c:1272 error: patch failed: dlls/wineoss.drv/unixlib.h:200 error: patch failed: dlls/wineoss.drv/oss.c:1359 error: patch failed: dlls/wineoss.drv/unixlib.h:215 error: patch failed: dlls/wineoss.drv/oss.c:1316 error: patch failed: dlls/wineoss.drv/unixlib.h:208 Task: Patch failed to apply
=== debian11 (build log) ===
error: patch failed: dlls/wineoss.drv/oss.c:1243 error: patch failed: dlls/wineoss.drv/unixlib.h:186 error: patch failed: dlls/wineoss.drv/oss.c:1256 error: patch failed: dlls/wineoss.drv/unixlib.h:193 error: patch failed: dlls/wineoss.drv/oss.c:1272 error: patch failed: dlls/wineoss.drv/unixlib.h:200 error: patch failed: dlls/wineoss.drv/oss.c:1359 error: patch failed: dlls/wineoss.drv/unixlib.h:215 error: patch failed: dlls/wineoss.drv/oss.c:1316 error: patch failed: dlls/wineoss.drv/unixlib.h:208 Task: Patch failed to apply
Signed-off-by: Andrew Eikum aeikum@codeweavers.com
On Fri, Apr 15, 2022 at 09:40:43PM +0100, Huw Davies wrote:
Signed-off-by: Huw Davies huw@codeweavers.com
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 <stdarg.h> -#include <errno.h> -#include <limits.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/ioctl.h> -#include <fcntl.h> -#include <unistd.h> -#include <math.h> -#include <sys/soundcard.h> -#include <pthread.h>
#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 <dlls/mmdevapi/mmdevapi.h> */ 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,
};
2.25.1