On 12.12.2015 17:04, Alexander E. Patrakov wrote:
12.12.2015 20:39, Tanu Kaskinen wrote:
On Sat, 2015-12-12 at 11:52 +0100, Georg Chini wrote:
On 08.12.2015 21:47, Tanu Kaskinen wrote:
On Wed, 2015-02-25 at 19:43 +0100, Georg Chini wrote:
---
   src/modules/module-loopback.c | 18 +++++++++++++++++-
   1 file changed, 17 insertions(+), 1 deletion(-)
The commit message should say something about why the jitter is tracked.

OK

diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c
index cbd0ac9..b733663 100644
--- a/src/modules/module-loopback.c
+++ b/src/modules/module-loopback.c
@@ -95,6 +95,8 @@ struct userdata {

       pa_usec_t source_latency_sum;
       pa_usec_t sink_latency_sum;
+    pa_usec_t next_latency;
+    double latency_error;

       bool in_pop;
       bool pop_called;
@@ -263,15 +265,22 @@ static void adjust_rates(struct userdata *u) {
                   (double) current_latency / PA_USEC_PER_MSEC,
                   (double) corrected_latency / PA_USEC_PER_MSEC,
((double) u->latency_snapshot.sink_latency + current_buffer_latency + u->latency_snapshot.source_latency) / PA_USEC_PER_MSEC); - pa_log_debug("Latency difference: %0.2f ms, rate difference: %i Hz", + pa_log_debug("Latency difference: %0.2f ± %0.2f ms, rate difference: %i Hz",
What does "± %0.2f ms" mean? Is the real latency difference between
those bounds with 100% confidence, or less than 100% confidence?

This is just an indication of the current error (with respect to the model),
so not 100% confidence.

Can you assign any particular confidence to the numbers? If not, then
the numbers have very little meaning... They can be useful for seeing
whether the jitter is higher or lower compared to some other
measurements, but they say very little about whether the latency
difference really is between those bounds.

At the very least there should be a comment explaining how the numbers
should be interpreted.


                   (double) latency_difference / PA_USEC_PER_MSEC,
+ (double) 2.5 * u->latency_error * final_latency / PA_USEC_PER_MSEC,
Why is that 2.5 there?


Good question. I think it was copied over from the definition of the
deadband in the next
patch. The observed errors are however in good agreement with that factor.

What does that mean? What would be different if the factor wasn't
there? How would it be worse than with the magic factor?


I think I explained it in one of the other mails. With the factor 2.5 it matches the observation, meaning that when it says plus/minus 150 usec then it is highly likely that the next measurement will fit into that interval. I cannot give you a level of confidence however.

Well, the logic here is still based on the equivalent of the n-sigma-rule. We need to figure out whether the latency difference that we see can be adequately explained by "the usual noise" in the measurements (and thus, according to the current version of the patchset does not have to be corrected), or not (and thus has to be corrected as quickly as possible). By changing the magic number, one can trade one kind of errors for the other. If it is too low, then, quite often, the deadband logic will think "oh, we need to correct this latency difference", only to find out during the next cycle that the correction has to be undone. If it is too high, then more of the latency difference (due to the clock drift) will need to accumulate before the controller finally decides to correct that.

Future versions of the patchset, if I understand the situation correctly, will still contain similar logic, in order to switch between the "correct this slowly and carefully" and "correct this as quickly as possible" modes.

No, the strength of the P-controller is only dependent on the distance to the target latency in the latest version. The average error is only used to modify one parameter
of the drift controller.
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to