From 85bd72379184f71ae87c0975a95c635da8faa5eb Mon Sep 17 00:00:00 2001
From: Ivan Uskov <ivan.uskov@nablet.com>
Date: Tue, 7 Jul 2015 20:33:36 +0300
Subject: [PATCH] libavcodec/qsvenc.c: incorrect loop condition has been fixed.
 For example, the encoder may return MFX_WRN_INCOMPATIBLE_VIDEO_PARAM warning
 i.e. ret==5 old loop implementation will repeat several timesuntil output
 buffer overflow. New implementation explicitly uses loop only for device busy
 case.

---
 libavcodec/qsvenc.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
index dc8b5f2..0666624 100644
--- a/libavcodec/qsvenc.c
+++ b/libavcodec/qsvenc.c
@@ -399,9 +399,12 @@ int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext *q,
 
     do {
         ret = MFXVideoENCODE_EncodeFrameAsync(q->session, NULL, surf, &bs, &sync);
-        if (ret == MFX_WRN_DEVICE_BUSY)
+        if (ret == MFX_WRN_DEVICE_BUSY) {
             av_usleep(1);
-    } while (ret > 0);
+            continue;
+        }
+        break;
+    } while ( 1 );
 
     if (ret < 0)
         return (ret == MFX_ERR_MORE_DATA) ? 0 : ff_qsv_error(ret);
-- 
1.8.3.1

