From: Seungbae Shin Date: Mon, 16 Mar 2020 05:58:32 +0000 (+0900) Subject: replace source SET_STATE handlers with callbacks X-Git-Tag: submit/tizen/20200316.105549^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=08c1357a5519ac2e80df15e7d430221bcd9c0c06;p=platform%2Fcore%2Fmultimedia%2Fpulseaudio-modules-tizen.git replace source SET_STATE handlers with callbacks [Version] 13.0.5 [Issue Type] Bug / Upgrade Change-Id: I46b2885d566b8ebcdc555d28260f4ce25f7fe7d2 --- diff --git a/packaging/pulseaudio-modules-tizen.spec b/packaging/pulseaudio-modules-tizen.spec index 0252e9e..1ae2b33 100644 --- a/packaging/pulseaudio-modules-tizen.spec +++ b/packaging/pulseaudio-modules-tizen.spec @@ -1,6 +1,6 @@ Name: pulseaudio-modules-tizen Summary: Pulseaudio modules for Tizen -Version: 13.0.4 +Version: 13.0.5 Release: 0 Group: Multimedia/Audio License: LGPL-2.1+ diff --git a/src/module-tizenaudio-source.c b/src/module-tizenaudio-source.c index 098e1f9..81dfc36 100644 --- a/src/module-tizenaudio-source.c +++ b/src/module-tizenaudio-source.c @@ -208,6 +208,50 @@ fail: return -PA_ERR_IO; } +/* Called from the IO thread. */ +static int source_set_state_in_io_thread_cb(pa_source *s, pa_source_state_t new_state, pa_suspend_cause_t new_suspend_cause) { + struct userdata *u; + int r; + + pa_assert(s); + pa_assert_se(u = s->userdata); + + /* It may be that only the suspend cause is changing, in which case there's + * nothing more to do. */ + if (new_state == s->thread_info.state) + return 0; + + switch (new_state) { + case PA_SOURCE_SUSPENDED: { + pa_assert(PA_SOURCE_IS_OPENED(s->thread_info.state)); + if ((r = suspend(u)) < 0) + return r; + break; + } + + case PA_SOURCE_IDLE: + case PA_SOURCE_RUNNING: { + if (s->thread_info.state == PA_SOURCE_INIT) { + if (build_pollfd(u) < 0) + return -PA_ERR_IO; + } + + if (s->thread_info.state == PA_SOURCE_SUSPENDED) { + if ((r = unsuspend(u)) < 0) + return r; + } + break; + } + + case PA_SOURCE_UNLINKED: + case PA_SOURCE_INIT: + case PA_SOURCE_INVALID_STATE: + break; + } + + return 0; +} + static int source_process_msg( pa_msgobject *o, int code, @@ -216,39 +260,8 @@ static int source_process_msg( pa_memchunk *chunk) { struct userdata *u = PA_SOURCE(o)->userdata; - int r; switch (code) { - case PA_SOURCE_MESSAGE_SET_STATE: - switch ((pa_source_state_t)PA_PTR_TO_UINT(data)) { - case PA_SOURCE_SUSPENDED: { - pa_assert(PA_SOURCE_IS_OPENED(u->source->thread_info.state)); - if ((r = suspend(u)) < 0) - return r; - break; - } - - case PA_SOURCE_IDLE: - case PA_SOURCE_RUNNING: { - if (u->source->thread_info.state == PA_SOURCE_INIT) { - if (build_pollfd(u) < 0) - return -PA_ERR_IO; - } - - if (u->source->thread_info.state == PA_SOURCE_SUSPENDED) { - if ((r = unsuspend(u)) < 0) - return r; - } - break; - } - - case PA_SOURCE_UNLINKED: - case PA_SOURCE_INIT: - case PA_SOURCE_INVALID_STATE: - break; - } - break; - case PA_SOURCE_MESSAGE_GET_LATENCY: { pa_usec_t now = pa_rtclock_now(); *((pa_usec_t*)data) = u->timestamp > now ? 0ULL : now - u->timestamp; @@ -530,6 +543,7 @@ int pa__init(pa_module*m) { } u->source->parent.process_msg = source_process_msg; + u->source->set_state_in_io_thread = source_set_state_in_io_thread_cb; u->source->update_requested_latency = source_update_requested_latency_cb; u->source->userdata = u;