[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