diff options
Diffstat (limited to 'src/pulsecore/source.c')
| -rw-r--r-- | src/pulsecore/source.c | 34 | 
1 files changed, 31 insertions, 3 deletions
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c index 4ce5cbfe..cc6dfc40 100644 --- a/src/pulsecore/source.c +++ b/src/pulsecore/source.c @@ -6,7 +6,7 @@    PulseAudio is free software; you can redistribute it and/or modify    it under the terms of the GNU Lesser General Public License as published -  by the Free Software Foundation; either version 2 of the License, +  by the Free Software Foundation; either version 2.1 of the License,    or (at your option) any later version.    PulseAudio is distributed in the hope that it will be useful, but @@ -424,6 +424,9 @@ int pa_source_suspend(pa_source *s, pa_bool_t suspend) {      pa_source_assert_ref(s);      pa_assert(PA_SOURCE_IS_LINKED(s->state)); +    if (s->monitor_of) +        return -PA_ERR_NOTSUPPORTED; +      if (suspend)          return source_set_state(s, PA_SOURCE_SUSPENDED);      else @@ -431,6 +434,24 @@ int pa_source_suspend(pa_source *s, pa_bool_t suspend) {  }  /* Called from main context */ +int pa_source_sync_suspend(pa_source *s) { +    pa_sink_state_t state; + +    pa_source_assert_ref(s); +    pa_assert(PA_SOURCE_IS_LINKED(s->state)); +    pa_assert(s->monitor_of); + +    state = pa_sink_get_state(s->monitor_of); + +    if (state == PA_SINK_SUSPENDED) +        return source_set_state(s, PA_SOURCE_SUSPENDED); + +    pa_assert(PA_SINK_IS_OPENED(state)); + +    return source_set_state(s, pa_source_used_by(s) ? PA_SOURCE_RUNNING : PA_SOURCE_IDLE); +} + +/* Called from main context */  pa_queue *pa_source_move_all_start(pa_source *s) {      pa_queue *q;      pa_source_output *o, *n; @@ -934,8 +955,15 @@ int pa_source_suspend_all(pa_core *c, pa_bool_t suspend) {      pa_core_assert_ref(c); -    for (source = PA_SOURCE(pa_idxset_first(c->sources, &idx)); source; source = PA_SOURCE(pa_idxset_next(c->sources, &idx))) -        ret -= pa_source_suspend(source, suspend) < 0; +    for (source = PA_SOURCE(pa_idxset_first(c->sources, &idx)); source; source = PA_SOURCE(pa_idxset_next(c->sources, &idx))) { +        int r; + +        if (source->monitor_of) +            continue; + +        if ((r = pa_source_suspend(source, suspend)) < 0) +            ret = r; +    }      return ret;  }  | 
