[FFmpeg-cvslog] avcodec/mediacodecdec: fix immediate EAGAIN with buffered packet
Aman Gupta
git at videolan.org
Tue Mar 13 21:32:45 EET 2018
ffmpeg | branch: master | Aman Gupta <aman at tmm1.net> | Tue Mar 13 02:40:09 2018 -0700| [3172b31223e1f0a64233fa5b355e11d7a00e477b] | committer: Aman Gupta
avcodec/mediacodecdec: fix immediate EAGAIN with buffered packet
In cases where the mediacodec decoder consumed a partial packet,
receive_frame() would start returning EAGAIN if the rest of the
packet couldn't be flushed and no frames were immediately available.
This fixes receive_frame() to perform its normal blocking wait for
new frames before returning EAGAIN. Fixes an issue I could reproduce
fairly often on a FireOS 6 device, and reported to be happening
intermittently by two mpv users.
Signed-off-by: Aman Gupta <aman at tmm1.net>
Signed-off-by: Matthieu Bouron <matthieu.bouron at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3172b31223e1f0a64233fa5b355e11d7a00e477b
---
libavcodec/mediacodecdec.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c
index 89d2421ae9..0d4a853f07 100644
--- a/libavcodec/mediacodecdec.c
+++ b/libavcodec/mediacodecdec.c
@@ -452,7 +452,7 @@ static int mediacodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
/* skip fetching new packet if we still have one buffered */
if (s->buffered_pkt.size > 0)
- return AVERROR(EAGAIN);
+ return mediacodec_send_receive(avctx, s, frame, true);
/* fetch new packet or eof */
ret = ff_decode_get_packet(avctx, &s->buffered_pkt);
More information about the ffmpeg-cvslog
mailing list