From 78532b052dfb0961d1f6a5c2b0a8fa6a53a3731a Mon Sep 17 00:00:00 2001
From: Baptiste Coudurier <baptiste.coudurier@gmail.com>
Date: Sun, 2 Dec 2007 19:20:46 +0000
Subject: [PATCH] fix corner case when qscale 1 bits < frame bits but max bits
 with worst padding > frame bits

Originally committed as revision 11131 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavcodec/dnxhdenc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
index dc55ae0ef3d..10415347d3f 100644
--- a/libavcodec/dnxhdenc.c
+++ b/libavcodec/dnxhdenc.c
@@ -671,7 +671,7 @@ static int dnxhd_find_qscale(DNXHDEncContext *ctx)
         //        ctx->m.avctx->frame_number, qscale, bits, ctx->frame_bits, last_higher, last_lower);
         if (bits < ctx->frame_bits) {
             if (qscale == 1)
-                break;
+                return 1;
             if (last_higher == qscale - 1) {
                 qscale = last_higher;
                 break;
@@ -710,8 +710,8 @@ static int dnxhd_rc_cmp(const void *a, const void *b)
 static int dnxhd_encode_variance(AVCodecContext *avctx, DNXHDEncContext *ctx)
 {
     int max_bits = 0;
-    int x, y;
-    if (dnxhd_find_qscale(ctx) < 0)
+    int ret, x, y;
+    if ((ret = dnxhd_find_qscale(ctx)) < 0)
         return -1;
     for (y = 0; y < ctx->m.mb_height; y++) {
         for (x = 0; x < ctx->m.mb_width; x++) {
@@ -730,7 +730,7 @@ static int dnxhd_encode_variance(AVCodecContext *avctx, DNXHDEncContext *ctx)
         }
         max_bits += 31; //worst padding
     }
-    if (max_bits > ctx->frame_bits) {
+    if (!ret) {
         if (RC_VARIANCE)
             avctx->execute(avctx, dnxhd_mb_var_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count);
         qsort(ctx->mb_cmp, ctx->m.mb_num, sizeof(RCEntry), dnxhd_rc_cmp);
-- 
GitLab