]> code.delx.au - pulseaudio/commitdiff
echo-cancel: Skip canceller when no source outputs are connected
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Thu, 29 Sep 2011 07:19:11 +0000 (12:49 +0530)
committerArun Raghavan <arun.raghavan@collabora.co.uk>
Mon, 10 Oct 2011 07:56:06 +0000 (13:26 +0530)
When a source-output isn't connected to our virtual source, we skip echo
cancellation altogether. This makes sense in general, and makes sure
that we don't end up adjusting for delay/drift when nothing is
connected. This should make convergence faster when the canceller
actually starts being used.

src/modules/echo-cancel/module-echo-cancel.c

index a3e7e0d59507b54af04b48b5663b010e71104647..8d77a3b2bb74e2fd21d88fcdf55196fecb600d13 100644 (file)
@@ -656,6 +656,11 @@ static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk)
         return;
     }
 
+    if (PA_UNLIKELY(u->source->thread_info.state != PA_SOURCE_RUNNING)) {
+        pa_source_post(u->source, chunk);
+        return;
+    }
+
     /* handle queued messages, do any message sending of our own */
     while (pa_asyncmsgq_process_one(u->asyncmsgq) > 0)
         ;
@@ -852,7 +857,7 @@ static int source_output_process_msg_cb(pa_msgobject *obj, int code, void *data,
 
             pa_source_output_assert_io_context(u->source_output);
 
-            if (PA_SOURCE_IS_OPENED(u->source_output->source->thread_info.state))
+            if (u->source_output->source->thread_info.state == PA_SOURCE_RUNNING)
                 pa_memblockq_push_align(u->sink_memblockq, chunk);
             else
                 pa_memblockq_flush_write(u->sink_memblockq, TRUE);