[pulseaudio-discuss] [RFC] core: New hook: PA_CORE_HOOK_SINK_INPUT_PUT_PRE.

Tanu Kaskinen tanu.kaskinen at digia.com
Mon Aug 8 05:46:36 PDT 2011


Would the following patch (and a similar one for source
outputs) be accepted for 1.1 or 2.0 even if there were no
(in-tree) users for the new hooks?

I'm writing code to Harmattan's policy module that would set
the PA_SINK_INPUT_START_CORKED flag for phone streams if
they appear before the routing and mixer settings are ready
for the call. I can't use (at least conveniently) the
existing hooks, because _NEW and _FIXATE are fired before
the pa_sink_input object is created, so I don't have the
pointer or index available to be stored for the time when
the streams need to be uncorked. The _PUT hook is fired too
late.

---
 src/pulsecore/core.h       |    5 +++++
 src/pulsecore/sink-input.c |    2 ++
 2 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h
index 61c8690..78f6ce1 100644
--- a/src/pulsecore/core.h
+++ b/src/pulsecore/core.h
@@ -84,6 +84,11 @@ typedef enum pa_core_hook {
     PA_CORE_HOOK_SOURCE_PORT_CHANGED,
     PA_CORE_HOOK_SINK_INPUT_NEW,
     PA_CORE_HOOK_SINK_INPUT_FIXATE,
+
+    /* Fired from pa_sink_input_put() before doing anything else.
+     * Call data: pointer to the pa_sink_input object. */
+    PA_CORE_HOOK_SINK_INPUT_PUT_PRE,
+
     PA_CORE_HOOK_SINK_INPUT_PUT,
     PA_CORE_HOOK_SINK_INPUT_UNLINK,
     PA_CORE_HOOK_SINK_INPUT_UNLINK_POST,
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index d386b00..ec1b68d 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -693,6 +693,8 @@ void pa_sink_input_put(pa_sink_input *i) {
     pa_assert(i->process_rewind);
     pa_assert(i->kill);
 
+    pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_PUT_PRE], i);
+
     state = i->flags & PA_SINK_INPUT_START_CORKED ? PA_SINK_INPUT_CORKED : PA_SINK_INPUT_RUNNING;
 
     update_n_corked(i, state);
-- 
1.7.6



More information about the pulseaudio-discuss mailing list