[pulseaudio-discuss] [PATCH v4] Make module loopback honor requested latency
Georg Chini
georg at chini.tk
Sun Feb 8 03:27:37 PST 2015
>>>> 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
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20150208/f9095de1/attachment-0001.html>
More information about the pulseaudio-discuss
mailing list