From 064c4bc1c1ffec7814d35dfb92a210dd77990014 Mon Sep 17 00:00:00 2001 From: philippegorley <philippe.gorley@savoirfairelinux.com> Date: Wed, 28 Mar 2018 11:49:01 -0400 Subject: [PATCH] media: don't return failure code if EAGAIN FFmpeg docs state that if avcodec_send_packet returns EAGAIN, avcodec_receive_frame must be called; it is not an error. Change-Id: I5e84a8a0103fe868056915b9c4ea2fc8d090f7ee --- src/media/media_decoder.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp index c11d83f430..c29d612308 100644 --- a/src/media/media_decoder.cpp +++ b/src/media/media_decoder.cpp @@ -272,7 +272,7 @@ MediaDecoder::decode(VideoFrame& result) auto frame = result.pointer(); int frameFinished = 0; ret = avcodec_send_packet(decoderCtx_, &inpacket); - if (ret < 0) { + if (ret < 0 && ret != AVERROR(EAGAIN)) { return ret == AVERROR_EOF ? Status::Success : Status::DecodeError; } ret = avcodec_receive_frame(decoderCtx_, frame); @@ -343,7 +343,7 @@ MediaDecoder::decode(const AudioFrame& decodedFrame) int frameFinished = 0; ret = avcodec_send_packet(decoderCtx_, &inpacket); - if (ret < 0) + if (ret < 0 && ret != AVERROR(EAGAIN)) return ret == AVERROR_EOF ? Status::Success : Status::DecodeError; ret = avcodec_receive_frame(decoderCtx_, frame); @@ -393,7 +393,7 @@ MediaDecoder::flush(VideoFrame& result) int frameFinished = 0; int ret = 0; ret = avcodec_send_packet(decoderCtx_, &inpacket); - if (ret < 0) + if (ret < 0 && ret != AVERROR(EAGAIN)) return ret == AVERROR_EOF ? Status::Success : Status::DecodeError; ret = avcodec_receive_frame(decoderCtx_, result.pointer()); -- GitLab