aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthieu Bouron <matthieu.bouron@stupeflix.com>2016-06-20 18:15:21 +0200
committerMatthieu Bouron <matthieu.bouron@stupeflix.com>2016-06-23 14:14:15 +0200
commit55816c926955799de1ebb7e0a03a0ebb5ea95bcc (patch)
tree5982937bf8a3f04e4b8aaae20680c04307efd48a
parentb316ebf46dd6b025bf116751cd6e0c6b0149f48c (diff)
downloadffmpeg-55816c926955799de1ebb7e0a03a0ebb5ea95bcc.tar.gz
lavc/mediacodec: increase buffer dequeue timeout when the codec needs to be drained
Increase buffer dequeue timeout when the codec needs to be drained as it could happen that no input buffer is available when we receive a null packet for the first time (meaning we are unable to signal end of stream and mark the codec as draining). Fixes potential loss of last frames after sending a null packet.
-rw-r--r--libavcodec/mediacodecdec.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c
index 7cef90b4b8..e29637ea9c 100644
--- a/libavcodec/mediacodecdec.c
+++ b/libavcodec/mediacodecdec.c
@@ -446,9 +446,9 @@ int ff_mediacodec_dec_decode(AVCodecContext *avctx, MediaCodecDecContext *s,
}
}
- if (s->flushing) {
- /* If the codec is flushing, block for a fair amount of time to
- * ensure we got a frame */
+ if (need_flushing || s->flushing) {
+ /* If the codec is flushing or need to be flushed, block for a fair
+ * amount of time to ensure we got a frame */
output_dequeue_timeout_us = OUTPUT_DEQUEUE_BLOCK_TIMEOUT_US;
} else if (s->dequeued_buffer_nb == 0) {
/* If the codec hasn't produced any frames, do not block so we