[pulseaudio-discuss] RFC: Adding hooks for port+profile changes (possibly UCM related)
Colin Guthrie
gmane at colin.guthr.ie
Fri Feb 25 03:23:43 PST 2011
Hi,
A while ago a user needed to get notification (in a module) when a sink
port changed.. I recommended he added a simple patch for this to add a
new hook which he implemented. I'm only now getting around to merging
(sorry kt)
I extended this a little to add a similar hook when the card profile
changed. I've pasted both below for review (they are simple).
I guess this could be used in UCM such that a ucm module could listen
for changes to ports then push the verb to ALSA as appropriate... Just
double checking that this is sensible before I push it but I think it
makes sense to have this :)
commit 9379d4015c48ed15a9f5bde8dac085dbca08bea3
Author: Kim Therkelsen <kim_t26 at hotmail.com>
Date: Fri Oct 15 09:25:12 2010 +0200
core: Added new hooks: PA_CORE_HOOK_SOURCE_PORT_CHANGED and
PA_CORE_HOOK_SINK_PORT_CHANGED
This allows modules to know when certain ports are changed.
This will allow e.g. a filter module (or LADSAP) to only load
when a certain port is used on the device (e.g. to only filter
headphones and not normal speakers).
(Comment from Colin Guthrie: This may also have use in UCM)
diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h
index a1215bb..daa89c1 100644
--- a/src/pulsecore/core.h
+++ b/src/pulsecore/core.h
@@ -74,6 +74,7 @@ typedef enum pa_core_hook {
PA_CORE_HOOK_SINK_UNLINK_POST,
PA_CORE_HOOK_SINK_STATE_CHANGED,
PA_CORE_HOOK_SINK_PROPLIST_CHANGED,
+ PA_CORE_HOOK_SINK_PORT_CHANGED,
PA_CORE_HOOK_SOURCE_NEW,
PA_CORE_HOOK_SOURCE_FIXATE,
PA_CORE_HOOK_SOURCE_PUT,
@@ -81,6 +82,7 @@ typedef enum pa_core_hook {
PA_CORE_HOOK_SOURCE_UNLINK_POST,
PA_CORE_HOOK_SOURCE_STATE_CHANGED,
PA_CORE_HOOK_SOURCE_PROPLIST_CHANGED,
+ PA_CORE_HOOK_SOURCE_PORT_CHANGED,
PA_CORE_HOOK_SINK_INPUT_NEW,
PA_CORE_HOOK_SINK_INPUT_FIXATE,
PA_CORE_HOOK_SINK_INPUT_PUT,
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 0de544c..773123d 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -2700,6 +2700,8 @@ int pa_sink_set_port(pa_sink *s, const char *name,
pa_bool_t save) {
s->active_port = port;
s->save_port = save;
+ pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_PORT_CHANGED], s);
+
return 0;
}
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 24d0ff6..a553662 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -1571,5 +1571,7 @@ int pa_source_set_port(pa_source *s, const char
*name, pa_bool_t save) {
s->active_port = port;
s->save_port = save;
+ pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SOURCE_PORT_CHANGED], s);
+
return 0;
}
commit 9e2aec6a66dde80f63171a2ad15ac74d34678560
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Fri Feb 25 10:27:23 2011 +0000
core: Add a new hook PA_CORE_HOOK_CARD_PROFILE_CHANGED
This will allow modules to know when a card profile has changed
and take appropriate action. This might prove useful when developing
UCM so that the appropriate verb can be set.
diff --git a/src/pulsecore/card.c b/src/pulsecore/card.c
index 2f0a3af..1758f48 100644
--- a/src/pulsecore/card.c
+++ b/src/pulsecore/card.c
@@ -214,6 +214,7 @@ int pa_card_set_profile(pa_card *c, const char
*name, pa_bool_t save) {
pa_card_profile *profile;
int r;
pa_assert(c);
+ pa_assert(c->core);
if (!c->set_profile) {
pa_log_debug("set_profile() operation not implemented for card
%u \"%s\"", c->index, c->name);
@@ -241,6 +242,8 @@ int pa_card_set_profile(pa_card *c, const char
*name, pa_bool_t save) {
c->active_profile = profile;
c->save_profile = save;
+ pa_hook_fire(&c->core->hooks[PA_CORE_HOOK_CARD_PROFILE_CHANGED], c);
+
return 0;
}
diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h
index daa89c1..358b98d 100644
--- a/src/pulsecore/core.h
+++ b/src/pulsecore/core.h
@@ -113,6 +113,7 @@ typedef enum pa_core_hook {
PA_CORE_HOOK_CARD_NEW,
PA_CORE_HOOK_CARD_PUT,
PA_CORE_HOOK_CARD_UNLINK,
+ PA_CORE_HOOK_CARD_PROFILE_CHANGED,
PA_CORE_HOOK_MAX
} pa_core_hook_t;
--
Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/
Day Job:
Tribalogic Limited [http://www.tribalogic.net/]
Open Source:
Mageia Contributor [http://www.mageia.org/]
PulseAudio Hacker [http://www.pulseaudio.org/]
Trac Hacker [http://trac.edgewall.org/]
More information about the pulseaudio-discuss
mailing list