vlc | branch: master | Alexandre Janniaux <aja...@videolabs.io> | Tue Feb 16 14:46:39 2021 +0100| [1fa05cf40605a459c6a256a2073c96b9ac21c15f] | committer: Alexandre Janniaux
mediacodec: release pictures after decoder close Avoid trying to queue picture after the closing of the decoder. Indeed, the mediacodec loop cannot be killed yet at the decoder close function because it is still needed for the integrity of the picture still used in the pipeline. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1fa05cf40605a459c6a256a2073c96b9ac21c15f --- modules/codec/omxil/mediacodec.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/codec/omxil/mediacodec.c b/modules/codec/omxil/mediacodec.c index 07e1107879..2bcc27c704 100644 --- a/modules/codec/omxil/mediacodec.c +++ b/modules/codec/omxil/mediacodec.c @@ -115,6 +115,11 @@ typedef struct decoder_sys_t bool b_aborted; bool b_drained; bool b_adaptive; + + /* If true, the decoder_t object has been closed and decoder_* functions + * are now unavailable. */ + bool b_decoder_dead; + int i_decode_flags; enum es_format_category_e cat; @@ -846,6 +851,7 @@ static int OpenDecoder(vlc_object_t *p_this, pf_MediaCodecApi_init pf_init) p_sys->video.i_mpeg_dar_num = 0; p_sys->video.i_mpeg_dar_den = 0; p_sys->video.surfacetexture = NULL; + p_sys->b_decoder_dead = false; if (pf_init(&p_sys->api) != 0) { @@ -1058,6 +1064,8 @@ static void CloseDecoder(vlc_object_t *p_this) decoder_sys_t *p_sys = p_dec->p_sys; vlc_mutex_lock(&p_sys->lock); + p_sys->b_closed = true; + /* Unblock output thread waiting in dequeue_out */ DecodeFlushLocked(p_sys); /* Cancel the output thread */ @@ -1415,8 +1423,9 @@ static void *OutThread(void *data) vlc_mutex_lock(&p_sys->lock); - /* Ignore dequeue_out errors caused by flush */ - if (p_sys->b_flush_out) + /* Ignore dequeue_out errors caused by flush, or late picture being + * dequeued after close. */ + if (p_sys->b_flush_out || p_sys->b_decoder_dead) { /* If i_index >= 0, Release it. There is no way to know if i_index * is owned by us, so don't check the error. */ _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits