libavcodec/qsvenc.c: fix incorrect loop condition.
authorIvan Uskov <ivan.uskov@nablet.com>
Tue, 7 Jul 2015 17:33:36 +0000 (20:33 +0300)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 9 Jul 2015 00:25:39 +0000 (02:25 +0200)
For example, the encoder may return MFX_WRN_INCOMPATIBLE_VIDEO_PARAM warning
i.e. ret==5 old loop implementation will repeat several times until output buffer
overflow. New implementation explicitly uses loop only for device busy case.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/qsvenc.c

index dc8b5f2..0666624 100644 (file)
@@ -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);