summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-03-04 05:27:14 +0100
committerLennart Poettering <lennart@poettering.net>2009-03-04 05:32:19 +0100
commitecbc320a4c219b40795e0462de6f37d610003c88 (patch)
treea7176e6295e85f5cd982408888c6d2a001e6b327 /src
parentbffa8be8cd208fbc4d3cd44c34be47e9e47b086f (diff)
make suspend state of monitor source follow the suspend state of the sink it belongs to
Diffstat (limited to 'src')
-rw-r--r--src/pulsecore/sink.c3
-rw-r--r--src/pulsecore/source.c18
-rw-r--r--src/pulsecore/source.h2
3 files changed, 23 insertions, 0 deletions
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 11334037..ed68dd8e 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -326,6 +326,9 @@ static int sink_set_state(pa_sink *s, pa_sink_state_t state) {
pa_sink_input_kill(i);
else if (i->suspend)
i->suspend(i, state == PA_SINK_SUSPENDED);
+
+ if (s->monitor_source)
+ pa_source_sync_suspend(s->monitor_source);
}
return 0;
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index f946366d..476cb553 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -434,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;
diff --git a/src/pulsecore/source.h b/src/pulsecore/source.h
index 2aac25f1..26471de0 100644
--- a/src/pulsecore/source.h
+++ b/src/pulsecore/source.h
@@ -212,6 +212,8 @@ void pa_source_attach(pa_source *s);
void pa_source_set_soft_volume(pa_source *s, const pa_cvolume *volume);
+int pa_source_sync_suspend(pa_source *s);
+
/*** May be called by everyone, from main context */
/* The returned value is supposed to be in the time domain of the sound card! */