mirror of
https://github.com/mumble-voip/mumble.git
synced 2025-10-26 11:19:16 +00:00
Reread list of sinks and outputs when someone adds/removes a audio card for PulseAudio
git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@944 05730e5d-ab1b-0410-a4ac-84af385074fa
This commit is contained in:
parent
a3a9166de2
commit
078c49ce26
@ -88,6 +88,9 @@ PulseAudioSystem::PulseAudioSystem() {
|
||||
pa_mainloop_api *api = pa_mainloop_get_api(pam);
|
||||
|
||||
pacContext = pa_context_new(api, "Mumble");
|
||||
|
||||
pa_context_set_subscribe_callback(pacContext, subscribe_callback, this);
|
||||
|
||||
pa_context_set_state_callback(pacContext, context_state_callback, this);
|
||||
pa_context_connect(pacContext, NULL, PA_CONTEXT_NOAUTOSPAWN, NULL);
|
||||
|
||||
@ -127,6 +130,7 @@ void PulseAudioSystem::defer_event_callback(pa_mainloop_api *a, pa_defer_event *
|
||||
pas->eventCallback(a, e);
|
||||
}
|
||||
|
||||
|
||||
void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *evt) {
|
||||
Q_ASSERT(pade == evt);
|
||||
api->defer_enable(pade, false);
|
||||
@ -292,6 +296,12 @@ void PulseAudioSystem::context_state_callback(pa_context *c, void *userdata) {
|
||||
pas->contextCallback(c);
|
||||
}
|
||||
|
||||
void PulseAudioSystem::subscribe_callback(pa_context *c, pa_subscription_event_type t, unsigned int idx, void *userdata) {
|
||||
PulseAudioSystem *pas = reinterpret_cast<PulseAudioSystem *>(userdata);
|
||||
qWarning("PulseAudio: Sinks or inputs changed (inserted or removed sound card)");
|
||||
pas->query();
|
||||
}
|
||||
|
||||
void PulseAudioSystem::sink_callback(pa_context *, const pa_sink_info *i, int eol, void *userdata) {
|
||||
PulseAudioSystem *pas = reinterpret_cast<PulseAudioSystem *>(userdata);
|
||||
if (!i || eol) {
|
||||
@ -457,6 +467,8 @@ void PulseAudioSystem::contextCallback(pa_context *c) {
|
||||
Q_ASSERT(c == pacContext);
|
||||
switch (pa_context_get_state(c)) {
|
||||
case PA_CONTEXT_READY:
|
||||
pa_operation_unref(pa_context_subscribe(pacContext, PA_SUBSCRIPTION_MASK_SOURCE, NULL, this));
|
||||
pa_operation_unref(pa_context_subscribe(pacContext, PA_SUBSCRIPTION_MASK_SINK, NULL, this));
|
||||
query();
|
||||
break;
|
||||
case PA_CONTEXT_TERMINATED:
|
||||
|
||||
@ -81,6 +81,7 @@ class PulseAudioSystem : public QThread {
|
||||
|
||||
static void defer_event_callback(pa_mainloop_api *a, pa_defer_event *e, void *userdata);
|
||||
static void context_state_callback(pa_context *c, void *userdata);
|
||||
static void subscribe_callback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata);
|
||||
static void sink_callback(pa_context *c, const pa_sink_info *i, int eol, void *userdata);
|
||||
static void source_callback(pa_context *c, const pa_source_info *i, int eol, void *userdata);
|
||||
static void server_callback(pa_context *c, const pa_server_info *i, void *userdata);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user