output/pulse: don't expose internal struct in public header
Provide _lock() and _unlock() to wrap all accesses from the mixer plugin.
This commit is contained in:
parent
423ce9557a
commit
3934d2d30c
|
@ -191,13 +191,13 @@ pulse_mixer_get_volume(struct mixer *mixer, G_GNUC_UNUSED GError **error_r)
|
||||||
struct pulse_mixer *pm = (struct pulse_mixer *) mixer;
|
struct pulse_mixer *pm = (struct pulse_mixer *) mixer;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pa_threaded_mainloop_lock(pm->output->mainloop);
|
pulse_output_lock(pm->output);
|
||||||
|
|
||||||
ret = pm->online
|
ret = pm->online
|
||||||
? (int)((100*(pa_cvolume_avg(&pm->volume)+1))/PA_VOLUME_NORM)
|
? (int)((100*(pa_cvolume_avg(&pm->volume)+1))/PA_VOLUME_NORM)
|
||||||
: -1;
|
: -1;
|
||||||
|
|
||||||
pa_threaded_mainloop_unlock(pm->output->mainloop);
|
pulse_output_unlock(pm->output);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -209,9 +209,10 @@ pulse_mixer_set_volume(struct mixer *mixer, unsigned volume, GError **error_r)
|
||||||
struct pa_cvolume cvolume;
|
struct pa_cvolume cvolume;
|
||||||
bool success;
|
bool success;
|
||||||
|
|
||||||
pa_threaded_mainloop_lock(pm->output->mainloop);
|
pulse_output_lock(pm->output);
|
||||||
|
|
||||||
if (!pm->online) {
|
if (!pm->online) {
|
||||||
pa_threaded_mainloop_unlock(pm->output->mainloop);
|
pulse_output_unlock(pm->output);
|
||||||
g_set_error(error_r, pulse_mixer_quark(), 0, "disconnected");
|
g_set_error(error_r, pulse_mixer_quark(), 0, "disconnected");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -221,7 +222,8 @@ pulse_mixer_set_volume(struct mixer *mixer, unsigned volume, GError **error_r)
|
||||||
success = pulse_output_set_volume(pm->output, &cvolume, error_r);
|
success = pulse_output_set_volume(pm->output, &cvolume, error_r);
|
||||||
if (success)
|
if (success)
|
||||||
pm->volume = cvolume;
|
pm->volume = cvolume;
|
||||||
pa_threaded_mainloop_unlock(pm->output->mainloop);
|
|
||||||
|
pulse_output_unlock(pm->output);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,11 +31,42 @@
|
||||||
#include <pulse/introspect.h>
|
#include <pulse/introspect.h>
|
||||||
#include <pulse/subscribe.h>
|
#include <pulse/subscribe.h>
|
||||||
#include <pulse/error.h>
|
#include <pulse/error.h>
|
||||||
|
#include <pulse/version.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
#define MPD_PULSE_NAME "Music Player Daemon"
|
#define MPD_PULSE_NAME "Music Player Daemon"
|
||||||
|
|
||||||
|
#if !defined(PA_CHECK_VERSION)
|
||||||
|
/**
|
||||||
|
* This macro was implemented in libpulse 0.9.16.
|
||||||
|
*/
|
||||||
|
#define PA_CHECK_VERSION(a,b,c) false
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct pulse_output {
|
||||||
|
const char *name;
|
||||||
|
const char *server;
|
||||||
|
const char *sink;
|
||||||
|
|
||||||
|
struct pulse_mixer *mixer;
|
||||||
|
|
||||||
|
struct pa_threaded_mainloop *mainloop;
|
||||||
|
struct pa_context *context;
|
||||||
|
struct pa_stream *stream;
|
||||||
|
|
||||||
|
size_t writable;
|
||||||
|
|
||||||
|
#if !PA_CHECK_VERSION(0,9,11)
|
||||||
|
/**
|
||||||
|
* We need this variable because pa_stream_is_corked() wasn't
|
||||||
|
* added before 0.9.11.
|
||||||
|
*/
|
||||||
|
bool pause;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The quark used for GError.domain.
|
* The quark used for GError.domain.
|
||||||
*/
|
*/
|
||||||
|
@ -45,6 +76,18 @@ pulse_output_quark(void)
|
||||||
return g_quark_from_static_string("pulse_output");
|
return g_quark_from_static_string("pulse_output");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pulse_output_lock(struct pulse_output *po)
|
||||||
|
{
|
||||||
|
pa_threaded_mainloop_lock(po->mainloop);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pulse_output_unlock(struct pulse_output *po)
|
||||||
|
{
|
||||||
|
pa_threaded_mainloop_unlock(po->mainloop);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pulse_output_set_mixer(struct pulse_output *po, struct pulse_mixer *pm)
|
pulse_output_set_mixer(struct pulse_output *po, struct pulse_mixer *pm)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,43 +21,18 @@
|
||||||
#define MPD_PULSE_OUTPUT_PLUGIN_H
|
#define MPD_PULSE_OUTPUT_PLUGIN_H
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#include <pulse/version.h>
|
struct pulse_output;
|
||||||
|
struct pulse_mixer;
|
||||||
#if !defined(PA_CHECK_VERSION)
|
|
||||||
/**
|
|
||||||
* This macro was implemented in libpulse 0.9.16.
|
|
||||||
*/
|
|
||||||
#define PA_CHECK_VERSION(a,b,c) false
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct pa_operation;
|
|
||||||
struct pa_cvolume;
|
struct pa_cvolume;
|
||||||
|
|
||||||
struct pulse_output {
|
void
|
||||||
const char *name;
|
pulse_output_lock(struct pulse_output *po);
|
||||||
const char *server;
|
|
||||||
const char *sink;
|
|
||||||
|
|
||||||
struct pulse_mixer *mixer;
|
void
|
||||||
|
pulse_output_unlock(struct pulse_output *po);
|
||||||
struct pa_threaded_mainloop *mainloop;
|
|
||||||
struct pa_context *context;
|
|
||||||
struct pa_stream *stream;
|
|
||||||
|
|
||||||
size_t writable;
|
|
||||||
|
|
||||||
#if !PA_CHECK_VERSION(0,9,11)
|
|
||||||
/**
|
|
||||||
* We need this variable because pa_stream_is_corked() wasn't
|
|
||||||
* added before 0.9.11.
|
|
||||||
*/
|
|
||||||
bool pause;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
void
|
||||||
pulse_output_set_mixer(struct pulse_output *po, struct pulse_mixer *pm);
|
pulse_output_set_mixer(struct pulse_output *po, struct pulse_mixer *pm);
|
||||||
|
|
|
@ -33,6 +33,16 @@
|
||||||
#ifdef HAVE_PULSE
|
#ifdef HAVE_PULSE
|
||||||
#include "output/pulse_output_plugin.h"
|
#include "output/pulse_output_plugin.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
pulse_output_lock(G_GNUC_UNUSED struct pulse_output *po)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pulse_output_unlock(G_GNUC_UNUSED struct pulse_output *po)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pulse_output_set_mixer(G_GNUC_UNUSED struct pulse_output *po,
|
pulse_output_set_mixer(G_GNUC_UNUSED struct pulse_output *po,
|
||||||
G_GNUC_UNUSED struct pulse_mixer *pm)
|
G_GNUC_UNUSED struct pulse_mixer *pm)
|
||||||
|
|
Loading…
Reference in New Issue