[pulseaudio-discuss] [PATCH 5/9] source: Initialize pa_source.monitor_of already in pa_source_new()

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Thu Nov 7 18:00:10 CET 2013


The knowledge about whether the source is going to be a monitor source
is necessary already in pa_source_new(), because the monitor source
node will be created based on that information.
---
 src/pulsecore/sink.c   | 3 +--
 src/pulsecore/source.c | 8 +++++++-
 src/pulsecore/source.h | 2 ++
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index be69c94..9350772 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -356,6 +356,7 @@ pa_sink* pa_sink_new(
     source_data.driver = data->driver;
     source_data.module = data->module;
     source_data.card = data->card;
+    pa_source_new_data_set_monitor_of(&source_data, s);
 
     dn = pa_proplist_gets(s->proplist, PA_PROP_DEVICE_DESCRIPTION);
     pa_proplist_setf(source_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "Monitor of %s", dn ? dn : s->name);
@@ -372,8 +373,6 @@ pa_sink* pa_sink_new(
         goto fail;
     }
 
-    s->monitor_source->monitor_of = s;
-
     pa_source_set_latency_range(s->monitor_source, s->thread_info.min_latency, s->thread_info.max_latency);
     pa_source_set_fixed_latency(s->monitor_source, s->thread_info.fixed_latency);
     pa_source_set_max_rewind(s->monitor_source, s->thread_info.max_rewind);
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index a0ed9b2..10ae8d1 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -109,6 +109,12 @@ void pa_source_new_data_set_alternate_sample_rate(pa_source_new_data *data, cons
     data->alternate_sample_rate = alternate_sample_rate;
 }
 
+void pa_source_new_data_set_monitor_of(pa_source_new_data *data, pa_sink *monitor_of) {
+    pa_assert(data);
+
+    data->monitor_of = monitor_of;
+}
+
 void pa_source_new_data_set_volume(pa_source_new_data *data, const pa_cvolume *volume) {
     pa_assert(data);
 
@@ -256,7 +262,7 @@ pa_source* pa_source_new(
     }
 
     s->n_corked = 0;
-    s->monitor_of = NULL;
+    s->monitor_of = data->monitor_of;
     s->output_from_master = NULL;
 
     s->reference_volume = s->real_volume = data->volume;
diff --git a/src/pulsecore/source.h b/src/pulsecore/source.h
index 606dc1e..b186af1 100644
--- a/src/pulsecore/source.h
+++ b/src/pulsecore/source.h
@@ -275,6 +275,7 @@ typedef struct pa_source_new_data {
     const char *driver;
     pa_module *module;
     pa_card *card;
+    pa_sink *monitor_of;
 
     pa_hashmap *ports;
     char *active_port;
@@ -306,6 +307,7 @@ void pa_source_new_data_set_name(pa_source_new_data *data, const char *name);
 void pa_source_new_data_set_sample_spec(pa_source_new_data *data, const pa_sample_spec *spec);
 void pa_source_new_data_set_channel_map(pa_source_new_data *data, const pa_channel_map *map);
 void pa_source_new_data_set_alternate_sample_rate(pa_source_new_data *data, const uint32_t alternate_sample_rate);
+void pa_source_new_data_set_monitor_of(pa_source_new_data *data, pa_sink *monitor_of);
 void pa_source_new_data_set_volume(pa_source_new_data *data, const pa_cvolume *volume);
 void pa_source_new_data_set_muted(pa_source_new_data *data, bool mute);
 void pa_source_new_data_set_port(pa_source_new_data *data, const char *port);
-- 
1.8.3.1



More information about the pulseaudio-discuss mailing list