On 11.11.2015 22:15, Alexander E. Patrakov wrote:
12.11.2015 01:24, Georg Chini wrote:
On 11.11.2015 20:30, Alexander E. Patrakov wrote:
Note: I did not say that following this method is good for our
purposes. The PID controller recommended in these papers (and used in
Jack) is not optimal in the sense of Ziegler-Nichols method:
http://kokkinizita.linuxaudio.org/papers/usingdll.pdf
http://kokkinizita.linuxaudio.org/papers/adapt-resamp.pdf
Hi Alexander,
regarding your note: I was under the impression that we agreed that we
could both not
come up with a better way of controlling the latency in this context.
Well - technically yes. However, since then, I have reevaluated the
papers, and want to express my new opinion regarding the patch set as
a whole.
You have explained why limiting the rate change (i.e. doing the
adjustment in the small steps) is incompatible with aiming to correct
the whole difference, and invented the non-linear expression for
min_cycles to avoid the problem (successfully). However, it is based
on the following assumptions:
1. Doing the adjustment in the small steps is actually desired.
2. Doing rate adjustment is indeed the way to deal with large latency
differences.
3. Correcting as much latency difference as possible in one step
(unless it conflicts with the constraints on the rate change) is
indeed the way forward.
4. Large values of adjust_time have to be supported at all.
Jack questions these assumptions, as follows:
1. For correcting reasonable latency differences, there is just no
need to make big changes of the rate. I.e. the constraint mentioned in
the comment is never hit in the steady state and thus is not necessary.
Well, this is true for my controller as well, as long as you are in a
steady state the constraints
are never hit and it acts as a simple P-controller.
2. For correcting unreasonable latency differences (and they can
appear only after an xrun or initially), one can drop samples or
insert silence as appropriate. No need to change the rate temporarily.
I disagree here. Your approach would double the audio disruptions
because for each xrun
you would have another event where samples are dropped/inserted. It is
the goal of the
controller to minimize such disruptions, so it should be able to handle
latency jumps gracefully.
3, 4. Jack measures the latency difference often (with a good side
effect of averaging out any error and jitter), but corrects it slowly.
This means it does not use a PID controller optimal in the sense of
Ziegler-Nichols, and that's why the note quoted above.
Apart from measuring the latency often (which is a good idea), what is
the advantage of correcting
it slowly?
Also note that Jack has no deadband - it uses a good lowpass filter
(of 4th order, instead of your 0th order filter) and thus does not
need it even for USB cards.
Constructions like high order filters are CPU consuming and introduce
significant delays.
Is there really a practical advantage over the deadband? I think that
the need to "correct
slowly" mentioned above arises from the use of a good lowpass.
But also I understand that perfect is the enemy of the good. So I
neither ACK nor NACK the patches in the current form. But if you
implement (2) and either demonstrate that the non-linear term is still
needed even for an aggressive definition of "unreasonable" latency
difference, or eliminate it, then I promise to review the updated
patches. Anyway, if Tanu accepts them as they are, this is a potential
improvement that can be done on top of that.
And - as another side
note - my controller is only optimal in the sense of Ziegler-Nichols for
small latency differences.
I agree with this note, but for me (due to considerations above, and
also purely subjectively) it is not very important.
For me this is very important because it is the way large latency
differences are handled.
The non-linearity introduced by min_cycles ensures that the rate
difference is kept within
bounds.
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss