[vlc-devel] [PATCH 3/3] mediacodec: implementation of MediaCodec direct rendering based on the work by Martin Storsjö.

Rémi Denis-Courmont remi at remlab.net
Mon Dec 30 18:26:29 CET 2013


Le lundi 30 décembre 2013, 18:01:45 Felix Abecassis a écrit :
> > Because that's what you claim deadlocked your decoder in the first place.
> 
> What's happening is the following: the video is paused and we hit the
> "back" button to exit the video, function input_DecoderDelete is
> called. This function calls vlc_cancel and vlc_join on the decoder
> thread. Since the vout is not releasing the MediaCodec buffers sent by
> the decoder, the decoder is not able to exit the DecodeVideo loop:

The way the input is designed currently, the decoder cannot "wait" to get an 
output buffer. This will always risk deadlocking one way or another. If there 
is no buffer, it is supposed to discard the current frame, but mostly, the core 
is supposed to compute a sufficiently large number of output buffers.

This is a bit shaky design - even with CPU decoding. In particular, filters 
cannot influence the number of buffers, and the output can only influence it by 
second guessing the core and allocating more buffers than requested.

That said, waiting should only fix lost frames in live playback. I do not 
really understand how paused state would be special with respect to pictures 
allocation. Afterall the video output and decoder do not even know about being 
paused.

> we
> are stuck in the loop until we can get an input buffer (to consume the
> block) or an output buffer (to return a picture_t).

I don't really understand how vlc_object_alive or ExitRequested helps. The 
decoder thread will be sleeping within your custom picture pool code. The 
input thread will not be able to wake up the decoder thread after it sets the 
exiting flag.

-- 
Rémi Denis-Courmont
http://www.remlab.net/




More information about the vlc-devel mailing list