diff options
Diffstat (limited to 'src/pulsecore')
-rw-r--r-- | src/pulsecore/core.c | 40 | ||||
-rw-r--r-- | src/pulsecore/core.h | 38 | ||||
-rw-r--r-- | src/pulsecore/sink-input.c | 11 | ||||
-rw-r--r-- | src/pulsecore/sink-input.h | 1 | ||||
-rw-r--r-- | src/pulsecore/sink.c | 11 | ||||
-rw-r--r-- | src/pulsecore/source-output.c | 11 | ||||
-rw-r--r-- | src/pulsecore/source-output.h | 3 | ||||
-rw-r--r-- | src/pulsecore/source.c | 10 |
8 files changed, 48 insertions, 77 deletions
diff --git a/src/pulsecore/core.c b/src/pulsecore/core.c index 8b10d398..2e9d96b1 100644 --- a/src/pulsecore/core.c +++ b/src/pulsecore/core.c @@ -72,7 +72,8 @@ static void core_free(pa_object *o); pa_core* pa_core_new(pa_mainloop_api *m, int shared) { pa_core* c; pa_mempool *pool; - + int j; + pa_assert(m); if (shared) { @@ -138,22 +139,8 @@ pa_core* pa_core_new(pa_mainloop_api *m, int shared) { c->is_system_instance = 0; - pa_hook_init(&c->hook_sink_new, c); - pa_hook_init(&c->hook_sink_new_post, c); - pa_hook_init(&c->hook_sink_disconnect, c); - pa_hook_init(&c->hook_sink_disconnect_post, c); - pa_hook_init(&c->hook_source_new, c); - pa_hook_init(&c->hook_source_new_post, c); - pa_hook_init(&c->hook_source_disconnect, c); - pa_hook_init(&c->hook_source_disconnect_post, c); - pa_hook_init(&c->hook_sink_input_new, c); - pa_hook_init(&c->hook_sink_input_new_post, c); - pa_hook_init(&c->hook_sink_input_disconnect, c); - pa_hook_init(&c->hook_sink_input_disconnect_post, c); - pa_hook_init(&c->hook_source_output_new, c); - pa_hook_init(&c->hook_source_output_new_post, c); - pa_hook_init(&c->hook_source_output_disconnect, c); - pa_hook_init(&c->hook_source_output_disconnect_post, c); + for (j = 0; j < PA_CORE_HOOK_MAX; j++) + pa_hook_init(&c->hooks[j], c); pa_property_init(c); @@ -168,6 +155,7 @@ pa_core* pa_core_new(pa_mainloop_api *m, int shared) { static void core_free(pa_object *o) { pa_core *c = PA_CORE(o); + int j; pa_assert(c); pa_module_unload_all(c); @@ -203,22 +191,8 @@ static void core_free(pa_object *o) { pa_property_cleanup(c); - pa_hook_free(&c->hook_sink_new); - pa_hook_free(&c->hook_sink_new_post); - pa_hook_free(&c->hook_sink_disconnect); - pa_hook_free(&c->hook_sink_disconnect_post); - pa_hook_free(&c->hook_source_new); - pa_hook_free(&c->hook_source_new_post); - pa_hook_free(&c->hook_source_disconnect); - pa_hook_free(&c->hook_source_disconnect_post); - pa_hook_free(&c->hook_sink_input_new); - pa_hook_free(&c->hook_sink_input_new_post); - pa_hook_free(&c->hook_sink_input_disconnect); - pa_hook_free(&c->hook_sink_input_disconnect_post); - pa_hook_free(&c->hook_source_output_new); - pa_hook_free(&c->hook_source_output_new_post); - pa_hook_free(&c->hook_source_output_disconnect); - pa_hook_free(&c->hook_source_output_disconnect_post); + for (j = 0; j < PA_CORE_HOOK_MAX; j++) + pa_hook_free(&c->hooks[j]); pa_xfree(c); } diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h index 003b24b1..c49a77d5 100644 --- a/src/pulsecore/core.h +++ b/src/pulsecore/core.h @@ -42,6 +42,26 @@ typedef struct pa_core pa_core; #include <pulsecore/sink-input.h> #include <pulsecore/msgobject.h> +typedef enum pa_core_hook { + PA_CORE_HOOK_SINK_NEW_POST, + PA_CORE_HOOK_SINK_DISCONNECT, + PA_CORE_HOOK_SINK_DISCONNECT_POST, + PA_CORE_HOOK_SINK_STATE_CHANGED, + PA_CORE_HOOK_SOURCE_NEW_POST, + PA_CORE_HOOK_SOURCE_DISCONNECT, + PA_CORE_HOOK_SOURCE_DISCONNECT_POST, + PA_CORE_HOOK_SOURCE_STATE_CHANGED, + PA_CORE_HOOK_SINK_INPUT_NEW, + PA_CORE_HOOK_SINK_INPUT_PUT, + PA_CORE_HOOK_SINK_INPUT_DISCONNECT, + PA_CORE_HOOK_SINK_INPUT_DISCONNECT_POST, + PA_CORE_HOOK_SOURCE_OUTPUT_NEW, + PA_CORE_HOOK_SOURCE_OUTPUT_PUT, + PA_CORE_HOOK_SOURCE_OUTPUT_DISCONNECT, + PA_CORE_HOOK_SOURCE_OUTPUT_DISCONNECT_POST, + PA_CORE_HOOK_MAX +} pa_core_hook_t; + /* The core structure of PulseAudio. Every PulseAudio daemon contains * exactly one of these. It is used for storing kind of global * variables for the daemon. */ @@ -89,23 +109,7 @@ struct pa_core { int is_system_instance; /* hooks */ - pa_hook - hook_sink_new, - hook_sink_new_post, - hook_sink_disconnect, - hook_sink_disconnect_post, - hook_source_new, - hook_source_new_post, - hook_source_disconnect, - hook_source_disconnect_post, - hook_sink_input_new, - hook_sink_input_new_post, - hook_sink_input_disconnect, - hook_sink_input_disconnect_post, - hook_source_output_new, - hook_source_output_new_post, - hook_source_output_disconnect, - hook_source_output_disconnect_post; + pa_hook hooks[PA_CORE_HOOK_MAX]; }; PA_DECLARE_CLASS(pa_core); diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c index d1bf0acc..77b95feb 100644 --- a/src/pulsecore/sink-input.c +++ b/src/pulsecore/sink-input.c @@ -98,9 +98,8 @@ pa_sink_input* pa_sink_input_new( pa_assert(core); pa_assert(data); - if (!(flags & PA_SINK_INPUT_NO_HOOKS)) - if (pa_hook_fire(&core->hook_sink_input_new, data) < 0) - return NULL; + if (pa_hook_fire(&core->hooks[PA_CORE_HOOK_SINK_INPUT_NEW], data) < 0) + return NULL; pa_return_null_if_fail(!data->driver || pa_utf8_valid(data->driver)); pa_return_null_if_fail(!data->name || pa_utf8_valid(data->name)); @@ -249,7 +248,7 @@ void pa_sink_input_disconnect(pa_sink_input *i) { pa_assert(i); pa_return_if_fail(i->state != PA_SINK_INPUT_DISCONNECTED); - pa_hook_fire(&i->sink->core->hook_sink_input_disconnect, i); + pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_DISCONNECT], i); if (i->sync_prev) i->sync_prev->sync_next = i->sync_next; @@ -273,7 +272,7 @@ void pa_sink_input_disconnect(pa_sink_input *i) { i->get_latency = NULL; i->underrun = NULL; - pa_hook_fire(&i->sink->core->hook_sink_input_disconnect_post, i); + pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_DISCONNECT_POST], i); i->sink = NULL; pa_sink_input_unref(i); } @@ -313,7 +312,7 @@ void pa_sink_input_put(pa_sink_input *i) { pa_sink_update_status(i->sink); pa_subscription_post(i->sink->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW, i->index); - pa_hook_fire(&i->sink->core->hook_sink_input_new_post, i); + pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_PUT], i); } void pa_sink_input_kill(pa_sink_input*i) { diff --git a/src/pulsecore/sink-input.h b/src/pulsecore/sink-input.h index 0168805a..5a48418c 100644 --- a/src/pulsecore/sink-input.h +++ b/src/pulsecore/sink-input.h @@ -47,7 +47,6 @@ typedef enum pa_sink_input_state { typedef enum pa_sink_input_flags { PA_SINK_INPUT_VARIABLE_RATE = 1, - PA_SINK_INPUT_NO_HOOKS = 2 } pa_sink_input_flags_t; struct pa_sink_input { diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index 905fe3ff..929542cc 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -80,9 +80,6 @@ pa_sink* pa_sink_new( pa_return_null_if_fail(!driver || pa_utf8_valid(driver)); pa_return_null_if_fail(name && pa_utf8_valid(name) && *name); - if (pa_hook_fire(&core->hook_sink_new, NULL) < 0) /* FIXME */ - return NULL; - s = pa_msgobject_new(pa_sink); if (!(name = pa_namereg_register(core, name, PA_NAMEREG_SINK, s, fail))) { @@ -149,7 +146,7 @@ pa_sink* pa_sink_new( pa_subscription_post(core, PA_SUBSCRIPTION_EVENT_SINK | PA_SUBSCRIPTION_EVENT_NEW, s->index); - pa_hook_fire(&core->hook_sink_new_post, s); + pa_hook_fire(&core->hooks[PA_CORE_HOOK_SINK_NEW_POST], s); return s; } @@ -170,6 +167,8 @@ static int sink_set_state(pa_sink *s, pa_sink_state_t state) { return -1; s->state = state; + + pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_STATE_CHANGED], s); return 0; } @@ -179,7 +178,7 @@ void pa_sink_disconnect(pa_sink* s) { pa_assert(s); pa_return_if_fail(s->state != PA_SINK_DISCONNECTED); - pa_hook_fire(&s->core->hook_sink_disconnect, s); + pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_DISCONNECT], s); pa_namereg_unregister(s->core, s->name); pa_idxset_remove_by_data(s->core->sinks, s, NULL); @@ -204,7 +203,7 @@ void pa_sink_disconnect(pa_sink* s) { pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SINK | PA_SUBSCRIPTION_EVENT_REMOVE, s->index); - pa_hook_fire(&s->core->hook_sink_disconnect_post, s); + pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_DISCONNECT_POST], s); } static void sink_free(pa_object *o) { diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c index 95755f3b..2dc66bfa 100644 --- a/src/pulsecore/source-output.c +++ b/src/pulsecore/source-output.c @@ -76,9 +76,8 @@ pa_source_output* pa_source_output_new( pa_assert(core); pa_assert(data); - if (!(flags & PA_SOURCE_OUTPUT_NO_HOOKS)) - if (pa_hook_fire(&core->hook_source_output_new, data) < 0) - return NULL; + if (pa_hook_fire(&core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_NEW], data) < 0) + return NULL; pa_return_null_if_fail(!data->driver || pa_utf8_valid(data->driver)); pa_return_null_if_fail(!data->name || pa_utf8_valid(data->name)); @@ -187,7 +186,7 @@ void pa_source_output_disconnect(pa_source_output*o) { pa_assert(o); pa_return_if_fail(o->state != PA_SOURCE_OUTPUT_DISCONNECTED); - pa_hook_fire(&o->source->core->hook_source_output_disconnect, o); + pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_DISCONNECT], o); pa_asyncmsgq_send(o->source->asyncmsgq, PA_MSGOBJECT(o->source), PA_SOURCE_MESSAGE_REMOVE_OUTPUT, o, 0, NULL); @@ -203,7 +202,7 @@ void pa_source_output_disconnect(pa_source_output*o) { o->kill = NULL; o->get_latency = NULL; - pa_hook_fire(&o->source->core->hook_source_output_disconnect_post, o); + pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_DISCONNECT_POST], o); o->source = NULL; pa_source_output_unref(o); @@ -235,7 +234,7 @@ void pa_source_output_put(pa_source_output *o) { pa_subscription_post(o->source->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_NEW, o->index); - pa_hook_fire(&o->source->core->hook_source_output_new_post, o); + pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_PUT], o); } void pa_source_output_kill(pa_source_output*o) { diff --git a/src/pulsecore/source-output.h b/src/pulsecore/source-output.h index 47cc8c40..b17adcb5 100644 --- a/src/pulsecore/source-output.h +++ b/src/pulsecore/source-output.h @@ -42,8 +42,7 @@ typedef enum pa_source_output_state { } pa_source_output_state_t; typedef enum pa_source_output_flags { - PA_SOURCE_OUTPUT_NO_HOOKS = 1, - PA_SOURCE_OUTPUT_VARIABLE_RATE = 2 + PA_SOURCE_OUTPUT_VARIABLE_RATE = 1 } pa_source_output_flags_t; struct pa_source_output { diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c index f7825931..0e448f60 100644 --- a/src/pulsecore/source.c +++ b/src/pulsecore/source.c @@ -73,9 +73,6 @@ pa_source* pa_source_new( pa_return_null_if_fail(!driver || pa_utf8_valid(driver)); pa_return_null_if_fail(pa_utf8_valid(name) && *name); - if (pa_hook_fire(&core->hook_sink_new, NULL) < 0) /* FIXME */ - return NULL; - s = pa_msgobject_new(pa_source); if (!(name = pa_namereg_register(core, name, PA_NAMEREG_SOURCE, s, fail))) { @@ -128,7 +125,7 @@ pa_source* pa_source_new( pa_subscription_post(core, PA_SUBSCRIPTION_EVENT_SOURCE | PA_SUBSCRIPTION_EVENT_NEW, s->index); - pa_hook_fire(&core->hook_source_new_post, s); + pa_hook_fire(&core->hooks[PA_CORE_HOOK_SOURCE_NEW_POST], s); return s; } @@ -149,6 +146,7 @@ static int source_set_state(pa_source *s, pa_source_state_t state) { return -1; s->state = state; + pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SOURCE_STATE_CHANGED], s); return 0; } @@ -158,7 +156,7 @@ void pa_source_disconnect(pa_source *s) { pa_assert(s); pa_return_if_fail(s->state != PA_SOURCE_DISCONNECTED); - pa_hook_fire(&s->core->hook_source_disconnect, s); + pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SOURCE_DISCONNECT], s); pa_namereg_unregister(s->core, s->name); pa_idxset_remove_by_data(s->core->sources, s, NULL); @@ -180,7 +178,7 @@ void pa_source_disconnect(pa_source *s) { pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SOURCE | PA_SUBSCRIPTION_EVENT_REMOVE, s->index); - pa_hook_fire(&s->core->hook_source_disconnect_post, s); + pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SOURCE_DISCONNECT_POST], s); } static void source_free(pa_object *o) { |