aboutsummaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2012-10-07 02:25:59 -0700
committerChris Robinson <[email protected]>2012-10-07 02:25:59 -0700
commit84f4afa5f2928a6b2099df71e4e2ead6e48875d0 (patch)
tree086a936e7d4c03a9836e1b2a2a0dd9edc699f3c1 /Alc
parent991e21a712fbecf060638bd26b20b2186ab37fe4 (diff)
Lock the device using the pulseaudio main loop
Diffstat (limited to 'Alc')
-rw-r--r--Alc/backends/pulseaudio.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/Alc/backends/pulseaudio.c b/Alc/backends/pulseaudio.c
index 07b10c10..55df219f 100644
--- a/Alc/backends/pulseaudio.c
+++ b/Alc/backends/pulseaudio.c
@@ -828,7 +828,6 @@ static ALuint PulseProc(ALvoid *param)
}
len -= len%update_size;
- ALCdevice_Lock(Device);
while(len > 0)
{
size_t newlen = len;
@@ -849,7 +848,6 @@ static ALuint PulseProc(ALvoid *param)
pa_stream_write(data->stream, buf, newlen, free_func, 0, PA_SEEK_RELATIVE);
len -= newlen;
}
- ALCdevice_Unlock(Device);
} while(!data->killNow && Device->Connected);
pa_threaded_mainloop_unlock(data->loop);
@@ -1312,7 +1310,6 @@ static ALCenum pulse_capture_samples(ALCdevice *device, ALCvoid *buffer, ALCuint
pulse_data *data = device->ExtraData;
ALCuint todo = samples * pa_frame_size(&data->spec);
- pa_threaded_mainloop_lock(data->loop);
/* Capture is done in fragment-sized chunks, so we loop until we get all
* that's available */
data->last_readable -= todo;
@@ -1357,7 +1354,6 @@ static ALCenum pulse_capture_samples(ALCdevice *device, ALCvoid *buffer, ALCuint
}
if(todo > 0)
memset(buffer, ((device->FmtType==DevFmtUByte) ? 0x80 : 0), todo);
- pa_threaded_mainloop_unlock(data->loop);
return ALC_NO_ERROR;
}
@@ -1367,7 +1363,6 @@ static ALCuint pulse_available_samples(ALCdevice *device)
pulse_data *data = device->ExtraData;
size_t readable = data->cap_remain;
- pa_threaded_mainloop_lock(data->loop);
if(device->Connected)
{
ssize_t got = pa_stream_readable_size(data->stream);
@@ -1379,7 +1374,6 @@ static ALCuint pulse_available_samples(ALCdevice *device)
else if((size_t)got > data->cap_len)
readable += got - data->cap_len;
}
- pa_threaded_mainloop_unlock(data->loop);
if(data->last_readable < readable)
data->last_readable = readable;
@@ -1387,6 +1381,19 @@ static ALCuint pulse_available_samples(ALCdevice *device)
}
+static void pulse_lock(ALCdevice *device)
+{
+ pulse_data *data = device->ExtraData;
+ pa_threaded_mainloop_lock(data->loop);
+}
+
+static void pulse_unlock(ALCdevice *device)
+{
+ pulse_data *data = device->ExtraData;
+ pa_threaded_mainloop_unlock(data->loop);
+}
+
+
static ALint64 pulse_get_latency(ALCdevice *device)
{
pulse_data *data = device->ExtraData;
@@ -1416,8 +1423,8 @@ static const BackendFuncs pulse_funcs = {
pulse_stop_capture,
pulse_capture_samples,
pulse_available_samples,
- ALCdevice_LockDefault,
- ALCdevice_UnlockDefault,
+ pulse_lock,
+ pulse_unlock,
pulse_get_latency
};