[pulseaudio-discuss] [PATCH] echo-cancel: Fix assert with webrtc's built-in drift compensation

Tanu Kaskinen tanuk at iki.fi
Mon Mar 13 14:36:53 UTC 2017

On Mon, 2017-03-13 at 16:07 +0530, Arun Raghavan wrote:
> The webrtc canceller requires that the set_stream_drift_samples() method
> be called before every call of ProcessStream(). We do kind of leak this
> into the generic bits of module-echo-cancel, but this should not be
> harmful in the general case either.
> Relatedly, we also require that this happen when there are no sink
> samples being sent, so we just drop the special-case check for whether
> the sink is running to do the drift compensation calculations.

It's not clear to me from the commit message which assertion fails.

Did the crash happen because set_drift() wasn't called before
ProcessStream(), because we didn't call do_push_drift_comp() when the
sink isn't running? If so, why did you move the set_drift() call? Was
that a fix for some other bug?

> @@ -947,7 +945,7 @@ static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk)
>      }
>      /* process and push out samples, do drift compensation only if the sink is actually running */
> -    if (u->ec->params.drift_compensation && u->sink->thread_info.state == PA_SINK_RUNNING)
> +    if (u->ec->params.drift_compensation)
>          do_push_drift_comp(u);
>      else
>          do_push(u);

It looks like the comment should be updated too.



More information about the pulseaudio-discuss mailing list