in the case of timer-based scheduling (where even module-alsa-sink
does not trust the result, i.e. discards it if it is greater than the
non-transformed time interval). And, if I recollect correctly, there
were complaints about it being fooled by batch cards, and they were
cited as one of the reasons not to enable timer-based scheduling on
batch cards. So - maybe, for the purposes of timer based-scheduling we
should just assume the worst case, i.e. the card that is, say, 0.75%
faster than nominal, and use the nominal rate together with the latest
snapshot time in {source,sink}_get_latency()? Basically, the fear is
that the smoother makes a greater mistake in the estimated rate than
just assuming the nominal one. Maybe you can try this suggestion?


For timer based scheduling the regulator works perfect, you would not
even need a stop criterion,
so why bother?

I think there is some misunderstanding. Let me repeat in a different way.

The smoother works perfectly (both for timer-based scheduling and for the needs of your module) on non-batch cards.

But, even for batch cards, where timer-based scheduling is disabled, the smoother is active and is actually used for reporting the latency to your module. An attempt to use the smoother for timer-based scheduling on batch cards has failed. That's why I suspect that it, on batch cards, also tells lies to your module.

OK, understood. I don't have anything to test it though.



For Tanu's patch status page: please leave the status of this patch as
unreviewed. The general idea of the patch does not look brilliant, but
it's the best known-working idea that we currently have on the topic,
and I have not reviewed all the fine details.


Well from a practical point of view it does a pretty good job although
the idea may not be brilliant.
I'm willing to implement your better idea when you come up with it.
  Did you ever test it? And compare it to what the current
module-loopback does?

I did not test it, will do it now and add some logging in order to
verify what you said above. And hopefully will try to implement an
alternative latency-snapshotting implementation, just to compare.


I can confirm (based on a reimplementation attempt) that the code after patching deals with the capture and playback timestamp difference 100% correctly - so it cannot be the problem. Just a minor nitpick: I moved saving of the timestamp to the message handlers. For me, this makes no difference, though. The patch (to be applied on top of yours) is attached. Could you please confirm or disprove that it makes no difference in your setup, either?


I tried the same and measured the time difference between the two methods. It is around 1 - 2 us. So it does not really matter if you obtain the time stamp within the snapshot or outside. I thought it was more simple the way I implemented it, but I have no objection to your change.

So, the current status of the patch, from my viewpoint, is:

1. The patch adds a perfectly correct (assuming no xruns) way to account for latency snapshots being made not simultaneously for playback and capture. I think that this is the main improvement, and it needs to be merged even if we disagree on the rest.

2. The result has an optimal coefficient that relates the observed latency difference and the resulting rate correction, assuming the currently-implemented way to snapshot the latency and assuming no interference from the smoother - which still has to be verified independently, possibly after merging.

3. The patch adds buffer_latency_msec, which seems to be an unrelated improvement, and I think it should be split out. I have no opinion on whether this change should be merged.

I'm fine with separating this out. I am even fine with dropping it completely, but I thought it might be useful for those who know what they are doing and for those who have to care
about used CPU cycles.


4. The patch has a criterion when to stop adjusting rates, and it is a source of disagreements. But I could not suggest anything constructive. So I think that a good approach would be to split it out and let others comment. Also, it would be a good idea to add a debugging message so that we can see when it happens.


It nearly always happens when you are approaching the requested latency. The case where you hit the base rate spot on is very rare, so a message doesn't make sense for me. Maybe it would make sense to print out the latency_error somewhere because it is an indicator how good your latency can be adjusted. Without stop criterion you will see instabilities with USB devices in certain situations, so I would not merge the patch without it. Even if the regulator were completely stable in all tested situations I would still add something like it, just to make sure. The current module-loopback also contains a stop criterion which
in my opinion is insufficient and should be replaced.

If you want, I can do the splitting for you.


Thanks, please do so. It makes more sense when you do it because you better know
what you want to separate.



_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to