diff options
author | Manuel Bachmann <manuel.bachmann@iot.bzh> | 2016-01-11 02:43:19 +0100 |
---|---|---|
committer | Manuel Bachmann <manuel.bachmann@iot.bzh> | 2016-01-11 02:43:19 +0100 |
commit | f16675ed24fd331903b8d6ef5d8ac07f6acbd6b0 (patch) | |
tree | 2852205153bdd62560f05eae05b899905942b376 /plugins/audio/audio-pulse.h | |
parent | 14c6ab749e9ccfdde8d191c10e2d0426da53df1f (diff) |
Audio Plugin: add PulseAudio support
If PulseAudio development libraries are present, Audio
plugin will now support it. It may still fall back to
ALSA if a PulseAudio server is not found at runtime.
PulseAudio backend supports multiple clients using
one audio adapter.
(+ various fixes and style improvements)
Signed-off-by: Manuel Bachmann <manuel.bachmann@iot.bzh>
Diffstat (limited to 'plugins/audio/audio-pulse.h')
-rw-r--r-- | plugins/audio/audio-pulse.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/plugins/audio/audio-pulse.h b/plugins/audio/audio-pulse.h new file mode 100644 index 00000000..fc18d9c0 --- /dev/null +++ b/plugins/audio/audio-pulse.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2016 "IoT.bzh" + * Author "Manuel Bachmann" + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef AUDIO_PULSE_H +#define AUDIO_PULSE_H + +#include <sys/time.h> +#include <pulse/pulseaudio.h> +#include <pulse/simple.h> +#include <pulse/error.h> + +#include "audio-alsa.h" +#include "local-def.h" + +typedef struct dev_ctx_pulse dev_ctx_pulse_T; +typedef struct alsa_info alsa_info_T; + +struct dev_ctx_pulse { + char *sink_name; + char **card_name; + pa_mainloop *pa_loop; + pa_context *pa_context; + pa_simple *pa; + pa_cvolume volume; + int mute; + unsigned char refresh; + pthread_t thr; + unsigned char thr_should_run; + unsigned char thr_finished; +}; + +struct alsa_info { + char *device; + char *synonyms; +}; + +STATIC void _pulse_context_cb (pa_context *, void *); +STATIC void _pulse_sink_list_cb (pa_context *, const pa_sink_info *, int, void *); +STATIC void _pulse_sink_info_cb (pa_context *, const pa_sink_info *, int, void *); +STATIC void* _pulse_play_thread_fn (void *); +PUBLIC void _pulse_refresh_sink (dev_ctx_pulse_T *); + +static struct alsa_info **alsa_info = NULL; +static struct dev_ctx_pulse **dev_ctx_p = NULL; +static unsigned int client_count = 0; + +#endif /* AUDIO_PULSE_H */ |