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