wineoss: Move set_volumes to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Andrew Eikum <aeikum@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
4b469fe157
commit
1a2482be2d
|
@ -18,22 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define COBJMACROS
|
#define COBJMACROS
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdarg.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 "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
|
@ -277,16 +262,6 @@ static DWORD WINAPI timer_thread(void *user)
|
||||||
return 0;
|
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,
|
static void set_device_guid(EDataFlow flow, HKEY drv_key, const WCHAR *key_name,
|
||||||
GUID *guid)
|
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)
|
static void set_stream_volumes(ACImpl *This)
|
||||||
{
|
{
|
||||||
struct oss_stream *stream = This->stream;
|
struct set_volumes_params params;
|
||||||
|
|
||||||
oss_lock(stream);
|
params.stream = This->stream;
|
||||||
stream->mute = This->session->mute;
|
params.master_volume = (This->session->mute ? 0.0f : This->session->master_vol);
|
||||||
oss_unlock(stream);
|
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)
|
static const OSSDevice *get_ossdevice_from_guid(const GUID *guid)
|
||||||
|
|
|
@ -44,6 +44,28 @@
|
||||||
|
|
||||||
#include "unixlib.h"
|
#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);
|
WINE_DEFAULT_DEBUG_CHANNEL(oss);
|
||||||
|
|
||||||
/* copied from kernelbase */
|
/* copied from kernelbase */
|
||||||
|
@ -1316,6 +1338,18 @@ static NTSTATUS get_position(void *args)
|
||||||
return oss_unlock_result(stream, ¶ms->result, S_OK);
|
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)
|
static NTSTATUS set_event_handle(void *args)
|
||||||
{
|
{
|
||||||
struct set_event_handle_params *params = args;
|
struct set_event_handle_params *params = args;
|
||||||
|
@ -1368,6 +1402,7 @@ unixlib_entry_t __wine_unix_call_funcs[] =
|
||||||
get_next_packet_size,
|
get_next_packet_size,
|
||||||
get_frequency,
|
get_frequency,
|
||||||
get_position,
|
get_position,
|
||||||
|
set_volumes,
|
||||||
set_event_handle,
|
set_event_handle,
|
||||||
is_started,
|
is_started,
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,27 +18,7 @@
|
||||||
|
|
||||||
#include "mmdeviceapi.h"
|
#include "mmdeviceapi.h"
|
||||||
|
|
||||||
struct oss_stream
|
struct stream_oss;
|
||||||
{
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* From <dlls/mmdevapi/mmdevapi.h> */
|
/* From <dlls/mmdevapi/mmdevapi.h> */
|
||||||
enum DriverPriority
|
enum DriverPriority
|
||||||
|
@ -208,6 +188,14 @@ struct get_position_params
|
||||||
UINT64 *qpctime;
|
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 set_event_handle_params
|
||||||
{
|
{
|
||||||
struct oss_stream *stream;
|
struct oss_stream *stream;
|
||||||
|
@ -243,6 +231,7 @@ enum oss_funcs
|
||||||
oss_get_next_packet_size,
|
oss_get_next_packet_size,
|
||||||
oss_get_frequency,
|
oss_get_frequency,
|
||||||
oss_get_position,
|
oss_get_position,
|
||||||
|
oss_set_volumes,
|
||||||
oss_set_event_handle,
|
oss_set_event_handle,
|
||||||
oss_is_started,
|
oss_is_started,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue