[vlc-devel] Endless buffer-way-too-late / audio, resampling loop

Chris Smowton cs448 at cam.ac.uk
Tue May 29 16:42:12 CEST 2012


On 29/05/12 11:00, Rémi Denis-Courmant wrote:
> On Mon, 28 May 2012 18:31:34 +0100, Chris Smowton<cs448 at cam.ac.uk>  wrote:
>> >  Except tfor the mention of libmad of course. Then once dropping starts,
>> >  we see an interesting pattern in which the 'resampling' events seem to
>> >  make the situation worse (specific numbers made up):
> VLC upsamples when the audio output is late. If the decoder is on time,
> and only the output is late, that works, though it might cause pitch shift.
> If however the decoder is late also, then upsampling makes matters worse
> rather than better. That case is hopeless anyway.
I understand the output-late case you're trying to fix -- I guess this 
is for an output with a slightly slow crystal which would otherwise 
cause drift w.r.t. the video?

However I'm not sure I understand the "decoder is late also" case -- 
firstly, given that I was playing a file with no video, and so nothing 
to synchronise against, what does it even mean for the decoder to be 
late? Certainly it's late with respect to the arbitrary timescale VLC is 
trying to make it conform to, but in this case surely the right thing to 
do would be to reset the scale with respect to the buffer we're about to 
play?

Secondly, supposing there was video, then do I understand correctly that 
the "buffer way too late" messages are throwing away audio that's being 
delivered too late for the video, hoping that this will lead to the 
codec catching up with the video? If so, why does the date_Move call get 
made only *after* we've nearly caught up? Then when it is made, why does 
it harm the situation? I guess I don't understand why this loop of 
repeated failure is inevitable when one could just seek both streams to 
a good point, allow both to fill their buffers and then resume playback?
> With ALSA, this problem is known to occur when using the PulseAudio ALSA
> plugin. The native PulseAudio output should be used instead. Maybe it also
> happens with other ALSA output plugins or drivers. In that case, I'd
> suggest you stash your hacks away, replace '#if 1' at
> modules/audio_output/alsa.c:448 with '#if 0' and recompile. Hopefully that
> works around the problem.
This is correct -- I was using the ALSA->PA bridge in order to work 
around bug 
https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/751265which 
caused terrible sound distortion using native PA. I've applied that 
bug's suggested fix, and can now get reliable playback through the PA 
output driver.

C



More information about the vlc-devel mailing list