[vlc-devel] [PATCH] decoder: unblock broken decoders when flushing

Rémi Denis-Courmont remi at remlab.net
Mon Oct 27 13:54:59 CET 2014

Le 2014-10-27 14:41, Thomas Guillem a écrit :
> MediaCodec or iomx with direct rendering can be stuck waiting for an 
> output
> buffer when video is paused since output buffers are released by 
> vout.

That is pretty much the correct behaviour. If you cannot yet obtain a 
picture buffer to decode into, you can only wait or discard the picture. 
If exiting or flushing, then discarding the picture might be best, but 
somewhat obviously not when paused. Futhermore, picture buffer 
references must be retained during pause so that the decoder can resume 
properly. There are no warranties that we are on the edge of a group of 
picture or whatever it is called.

The same goes for audio. If blocks were dropped during pause, there 
would be a gap on resume, and likely audible glitches due to resampling.

> This previous hack didn't fix a deadlock when video was flushed on 
> pause.

There is no flush on pause to begin with, at least not in 
decoder.c:input_DecoderChangePause(). Flushing on pause would be wrong 
in many ways, notably as above.

If, hypothetically, some component flushes on pause upstream of the 
decoder, then that component needs fixing.

Rémi Denis-Courmont

More information about the vlc-devel mailing list