[pulseaudio-discuss] [PATCH v6 16/25] loopback: Reset sink input rate when source or sink changes

Georg Chini georg at chini.tk
Sun Jun 5 19:05:19 UTC 2016


When source or sink changes, the sink input rate has to be reset to the initial value.

---
 src/modules/module-loopback.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c
index c54b531..c773a98 100644
--- a/src/modules/module-loopback.c
+++ b/src/modules/module-loopback.c
@@ -539,7 +539,12 @@ static bool source_output_may_move_to_cb(pa_source_output *o, pa_source *dest) {
     if (!u->sink_input || !u->sink_input->sink)
         return true;
 
-    return dest != u->sink_input->sink->monitor_source;
+    /* We may still be adjusting, so reset rate to default before moving the source */
+    if (dest != u->sink_input->sink->monitor_source) {
+        pa_sink_input_set_rate(u->sink_input, u->source_output->sample_spec.rate);
+        return true;
+    }
+    return false;
 }
 
 /* Called from main thread */
@@ -912,7 +917,16 @@ static bool sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
     if (!u->source_output || !u->source_output->source)
         return true;
 
-    return dest != u->source_output->source->monitor_of;
+    if (dest == u->source_output->source->monitor_of)
+        return false;
+
+    /* We may still be adjusting, so reset rate to default before moving the sink.
+     * If the sink is not valid (profile change), only update the sink input sample spec. */
+    if (u->sink_input->sink)
+        pa_sink_input_set_rate(u->sink_input, u->source_output->sample_spec.rate);
+    else
+        u->sink_input->sample_spec.rate = u->source_output->sample_spec.rate;
+    return true;
 }
 
 /* Called from output thread context */
-- 
2.8.1



More information about the pulseaudio-discuss mailing list