]> code.delx.au - pulseaudio/commitdiff
source-output: Get the correct source for "direct_on_input" streams
authorTanu Kaskinen <tanu.kaskinen@linux.intel.com>
Wed, 14 Aug 2013 13:54:28 +0000 (16:54 +0300)
committerTanu Kaskinen <tanu.kaskinen@linux.intel.com>
Wed, 21 Aug 2013 13:59:01 +0000 (16:59 +0300)
If a capture stream captures from a single sink input (so the capture
stream is a so called "direct on input" stream), then it needs to
connect to the monitor source of the sink to which the sink input is
connected. Previously the correct source was not figured out
automatically, causing the capture stream creation to fail.

src/pulsecore/source-output.c

index 66a33bd53994afaa98e0204352308c7c068c7ff5..5a48935cd50c8818a5786ca095e0920db3662bb6 100644 (file)
@@ -255,8 +255,16 @@ int pa_source_output_new(
     pa_return_val_if_fail(!data->driver || pa_utf8_valid(data->driver), -PA_ERR_INVALID);
 
     if (!data->source) {
-        pa_source *source = pa_namereg_get(core, NULL, PA_NAMEREG_SOURCE);
-        pa_return_val_if_fail(source, -PA_ERR_NOENTITY);
+        pa_source *source;
+
+        if (data->direct_on_input) {
+            source = data->direct_on_input->sink->monitor_source;
+            pa_return_val_if_fail(source, -PA_ERR_INVALID);
+        } else {
+            source = pa_namereg_get(core, NULL, PA_NAMEREG_SOURCE);
+            pa_return_val_if_fail(source, -PA_ERR_NOENTITY);
+        }
+
         pa_source_output_new_data_set_source(data, source, false);
     }