wmaenc: check final frame size against output packet size
authorJustin Ruggles <justin.ruggles@gmail.com>
Fri, 2 Mar 2012 21:42:21 +0000 (16:42 -0500)
committerJustin Ruggles <justin.ruggles@gmail.com>
Sat, 3 Mar 2012 23:20:10 +0000 (18:20 -0500)
Currently we have an assert() that prevents the frame from being too large,
but it is more user-friendly to give an error message instead of aborting on
assert(). This condition is quite unlikely due to the minimum bit rate check
in encode_init(), but it is still worth having.

libavcodec/wmaenc.c

index 5135b98..c00f136 100644 (file)
@@ -394,11 +394,13 @@ static int encode_superframe(AVCodecContext *avctx,
     }
 #endif
 
-    encode_frame(s, s->coefs, buf, buf_size, total_gain);
+    if ((i = encode_frame(s, s->coefs, buf, buf_size, total_gain)) >= 0) {
+        av_log(avctx, AV_LOG_ERROR, "required frame size too large. please "
+               "use a higher bit rate.\n");
+        return AVERROR(EINVAL);
+    }
     assert((put_bits_count(&s->pb) & 7) == 0);
-    i= s->block_align - (put_bits_count(&s->pb)+7)/8;
-    assert(i>=0);
-    while(i--)
+    while (i++)
         put_bits(&s->pb, 8, 'N');
 
     flush_put_bits(&s->pb);