output/roar: move code to roar_cancel_locked() and others
Wrap the locking code.
This commit is contained in:
parent
c61a889c86
commit
d4d838c8bb
@ -55,39 +55,49 @@ roar_output_quark(void)
|
|||||||
return g_quark_from_static_string("roar_output");
|
return g_quark_from_static_string("roar_output");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
roar_output_get_volume_locked(struct roar *roar)
|
||||||
|
{
|
||||||
|
if (roar->vss == NULL || !roar->alive)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
float l, r;
|
||||||
|
int error;
|
||||||
|
roar_vs_volume_get(roar->vss, &l, &r, &error);
|
||||||
|
return (l + r) * 50;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
roar_output_get_volume(struct roar *roar)
|
roar_output_get_volume(struct roar *roar)
|
||||||
{
|
{
|
||||||
g_mutex_lock(roar->lock);
|
g_mutex_lock(roar->lock);
|
||||||
if (roar->vss && roar->alive) {
|
int volume = roar_output_get_volume_locked(roar);
|
||||||
float l, r;
|
g_mutex_unlock(roar->lock);
|
||||||
int error;
|
return volume;
|
||||||
roar_vs_volume_get(roar->vss, &l, &r, &error);
|
}
|
||||||
g_mutex_unlock(roar->lock);
|
|
||||||
return (l + r) * 50;
|
static bool
|
||||||
} else {
|
roar_output_set_volume_locked(struct roar *roar, unsigned volume)
|
||||||
g_mutex_unlock(roar->lock);
|
{
|
||||||
return 0;
|
assert(volume <= 100);
|
||||||
}
|
|
||||||
|
if (roar->vss == NULL || !roar->alive)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int error;
|
||||||
|
float level = volume / 100.0;
|
||||||
|
|
||||||
|
roar_vs_volume_mono(roar->vss, level, &error);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
roar_output_set_volume(struct roar *roar, unsigned volume)
|
roar_output_set_volume(struct roar *roar, unsigned volume)
|
||||||
{
|
{
|
||||||
g_mutex_lock(roar->lock);
|
g_mutex_lock(roar->lock);
|
||||||
if (roar->vss && roar->alive) {
|
bool success = roar_output_set_volume_locked(roar, volume);
|
||||||
assert(volume <= 100);
|
g_mutex_unlock(roar->lock);
|
||||||
|
return success;
|
||||||
int error;
|
|
||||||
float level = volume / 100.0;
|
|
||||||
|
|
||||||
roar_vs_volume_mono(roar->vss, level, &error);
|
|
||||||
g_mutex_unlock(roar->lock);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
g_mutex_unlock(roar->lock);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -206,28 +216,34 @@ roar_close(void *data)
|
|||||||
g_mutex_unlock(self->lock);
|
g_mutex_unlock(self->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
roar_cancel_locked(struct roar *self)
|
||||||
|
{
|
||||||
|
if (self->vss == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
roar_vs_t *vss = self->vss;
|
||||||
|
self->vss = NULL;
|
||||||
|
roar_vs_close(vss, ROAR_VS_TRUE, &(self->err));
|
||||||
|
self->alive = false;
|
||||||
|
|
||||||
|
vss = roar_vs_new_from_con(&(self->con), &(self->err));
|
||||||
|
if (vss == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
roar_vs_stream(vss, &(self->info), ROAR_DIR_PLAY, &(self->err));
|
||||||
|
roar_vs_role(vss, self->role, &(self->err));
|
||||||
|
self->vss = vss;
|
||||||
|
self->alive = true;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
roar_cancel(void *data)
|
roar_cancel(void *data)
|
||||||
{
|
{
|
||||||
roar_t * self = data;
|
roar_t * self = data;
|
||||||
|
|
||||||
g_mutex_lock(self->lock);
|
g_mutex_lock(self->lock);
|
||||||
if (self->vss != NULL)
|
roar_cancel_locked(self);
|
||||||
{
|
|
||||||
roar_vs_t *vss = self->vss;
|
|
||||||
self->vss = NULL;
|
|
||||||
roar_vs_close(vss, ROAR_VS_TRUE, &(self->err));
|
|
||||||
self->alive = false;
|
|
||||||
|
|
||||||
vss = roar_vs_new_from_con(&(self->con), &(self->err));
|
|
||||||
if (vss)
|
|
||||||
{
|
|
||||||
roar_vs_stream(vss, &(self->info), ROAR_DIR_PLAY, &(self->err));
|
|
||||||
roar_vs_role(vss, self->role, &(self->err));
|
|
||||||
self->vss = vss;
|
|
||||||
self->alive = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
g_mutex_unlock(self->lock);
|
g_mutex_unlock(self->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user