Commit 3934d2d3 authored by Max Kellermann's avatar Max Kellermann

output/pulse: don't expose internal struct in public header

Provide _lock() and _unlock() to wrap all accesses from the mixer plugin.
parent 423ce955
...@@ -191,13 +191,13 @@ pulse_mixer_get_volume(struct mixer *mixer, G_GNUC_UNUSED GError **error_r) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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.
*/ */
...@@ -46,6 +77,18 @@ pulse_output_quark(void) ...@@ -46,6 +77,18 @@ pulse_output_quark(void)
} }
void 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
pulse_output_set_mixer(struct pulse_output *po, struct pulse_mixer *pm) pulse_output_set_mixer(struct pulse_output *po, struct pulse_mixer *pm)
{ {
assert(po != NULL); assert(po != NULL);
......
...@@ -21,43 +21,18 @@ ...@@ -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;
struct pa_threaded_mainloop *mainloop;
struct pa_context *context;
struct pa_stream *stream;
size_t writable;
#if !PA_CHECK_VERSION(0,9,11) void
/** pulse_output_unlock(struct pulse_output *po);
* 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);
......
...@@ -34,6 +34,16 @@ ...@@ -34,6 +34,16 @@
#include "output/pulse_output_plugin.h" #include "output/pulse_output_plugin.h"
void void
pulse_output_lock(G_GNUC_UNUSED struct pulse_output *po)
{
}
void
pulse_output_unlock(G_GNUC_UNUSED struct pulse_output *po)
{
}
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)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment