diff options
author | sfan5 <sfan5@live.de> | 2022-09-18 18:26:43 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2022-10-02 11:59:25 +0200 |
commit | 954784b1209f4277fa68ad755654667afbf8addd (patch) | |
tree | 91f5bd3b842afb3acc92b10fa5967a01a62c5acd /libavcodec/mediacodecdec_common.c | |
parent | 8bafe8a418f478d9f7d911266ae173518f12b04c (diff) |
lavc/mediacodecdec_common: enable refcounting of buffers unconditionally
This allows av_mediacodec_release_buffer to be called safely after
the decoder is closed, this was already the case with delay_flush=1.
Note that this causes holding onto frames to keep the decoding context
alive which is generally considered to be the intended behavior.
Signed-off-by: sfan5 <sfan5@live.de>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavcodec/mediacodecdec_common.c')
-rw-r--r-- | libavcodec/mediacodecdec_common.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index 9fa769656c..2a605e7f5b 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -265,8 +265,7 @@ static void mediacodec_buffer_release(void *opaque, uint8_t *data) ff_AMediaCodec_releaseOutputBuffer(ctx->codec, buffer->index, 0); } - if (ctx->delay_flush) - ff_mediacodec_dec_unref(ctx); + ff_mediacodec_dec_unref(ctx); av_freep(&buffer); } @@ -321,8 +320,7 @@ static int mediacodec_wrap_hw_buffer(AVCodecContext *avctx, buffer->ctx = s; buffer->serial = atomic_load(&s->serial); - if (s->delay_flush) - ff_mediacodec_dec_ref(s); + ff_mediacodec_dec_ref(s); buffer->index = index; buffer->pts = info->presentationTimeUs; @@ -872,7 +870,7 @@ int ff_mediacodec_dec_receive(AVCodecContext *avctx, MediaCodecDecContext *s, */ int ff_mediacodec_dec_flush(AVCodecContext *avctx, MediaCodecDecContext *s) { - if (!s->surface || atomic_load(&s->refcount) == 1) { + if (!s->surface || !s->delay_flush || atomic_load(&s->refcount) == 1) { int ret; /* No frames (holding a reference to the codec) are retained by the |