[pulseaudio-discuss] [PATCH 1/2] sink, source: Add a flag to inhibit suspend
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Wed Aug 7 23:07:50 PDT 2013
On Thu, 2013-08-08 at 10:53 +0530, Arun Raghavan wrote:
> This adds the ability to inhibit the suspending of a sink/source. Policy
> modules may override this, but should avoid doing so if they can.
> ---
> src/pulse/def.h | 6 ++++++
> src/pulsecore/sink.c | 3 +++
> src/pulsecore/source.c | 3 +++
> 3 files changed, 12 insertions(+)
>
> diff --git a/src/pulse/def.h b/src/pulse/def.h
> index 58190cb..11f5cb2 100644
> --- a/src/pulse/def.h
> +++ b/src/pulse/def.h
> @@ -795,6 +795,9 @@ typedef enum pa_sink_flags {
>
> PA_SINK_DEFERRED_VOLUME = 0x2000000U,
> /**< The HW volume changes are syncronized with SW volume. */
> +
> + PA_SINK_ALWAYS_RUNNING = 0x4000000U,
> + /**< The sink should not be automatically suspended. */
> /** \endcond */
> #endif
>
> @@ -914,6 +917,9 @@ typedef enum pa_source_flags {
>
> PA_SOURCE_DEFERRED_VOLUME = 0x2000000U,
> /**< The HW volume changes are syncronized with SW volume. */
> +
> + PA_SOURCE_ALWAYS_RUNNING = 0x4000000U,
> + /**< The source should not be automatically suspended. */
> #endif
> } pa_source_flags_t;
>
> diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
> index 00bc29a..9ebf4ce 100644
> --- a/src/pulsecore/sink.c
> +++ b/src/pulsecore/sink.c
> @@ -834,6 +834,9 @@ int pa_sink_suspend(pa_sink *s, bool suspend, pa_suspend_cause_t cause) {
> pa_assert(PA_SINK_IS_LINKED(s->state));
> pa_assert(cause != 0);
>
> + if ((s->flags & PA_SINK_ALWAYS_RUNNING) && (cause == PA_SUSPEND_IDLE))
> + return 0;
Shouldn't the return value be -1?
This assumes that if ALWAYS_RUNNING is set, then the IDLE cause can't
appear together with other causes. I think that's a valid assumption,
though, so I don't have a problem with that. Avoiding that assumption
would require deciding what to do when one suspend cause is not allowed
and one is, and I don't want to form an opinion about that.
This also assumes that if ALWAYS_RUNNING is set, then s->suspend_cause
can't contain IDLE, because this blocks also unsuspending with the IDLE
cause. I think it would be better to avoid this assumption by not
failing when unsuspending.
> +
> if (suspend) {
> s->suspend_cause |= cause;
> s->monitor_source->suspend_cause |= cause;
> diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
> index b14b9c8..e141649 100644
> --- a/src/pulsecore/source.c
> +++ b/src/pulsecore/source.c
> @@ -751,6 +751,9 @@ int pa_source_suspend(pa_source *s, bool suspend, pa_suspend_cause_t cause) {
> pa_assert(PA_SOURCE_IS_LINKED(s->state));
> pa_assert(cause != 0);
>
> + if ((s->flags & PA_SINK_ALWAYS_RUNNING) && (cause == PA_SUSPEND_IDLE))
Copy-paste error. s/SINK/SOURCE/.
--
Tanu
More information about the pulseaudio-discuss
mailing list