]> git.sesse.net Git - ffmpeg/commitdiff
vc2enc: fix packet underallocation and minimum bitrate with interlacing
authorRostislav Pehlivanov <atomnuker@gmail.com>
Tue, 1 Mar 2016 13:44:18 +0000 (13:44 +0000)
committerRostislav Pehlivanov <atomnuker@gmail.com>
Tue, 1 Mar 2016 13:44:18 +0000 (13:44 +0000)
This was a regression introduced by commit e7345abe052 which
enabled full use of the allocated packet but due to the overhead of
using field coding the buffer was too small and triggered warnings and
crashes.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
libavcodec/vc2enc.c

index 2d875d13d3ea9670b158da09aac2ab34c0e88be5..868875439db61685fc87a418769acc3bdf9be6b6 100644 (file)
@@ -987,7 +987,7 @@ static av_cold int vc2_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 
     s->slice_min_bytes = s->slice_max_bytes - s->slice_max_bytes*(s->tolerance/100.0f);
 
-    ret = ff_alloc_packet2(avctx, avpkt, max_frame_bytes*2, 0);
+    ret = ff_alloc_packet2(avctx, avpkt, max_frame_bytes*3, 0);
     if (ret < 0) {
         av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
         return ret;
@@ -1197,6 +1197,8 @@ static av_cold int vc2_encode_init(AVCodecContext *avctx)
                                  avctx->time_base.den);
     min_bits_per_frame = minimum_frame_bits(s) + 8*sizeof(LIBAVCODEC_IDENT) + 8*40 + 8*20000;
     if (bits_per_frame < min_bits_per_frame) {
+        if (s->interlaced)
+            min_bits_per_frame += min_bits_per_frame + min_bits_per_frame/2;
         avctx->bit_rate = av_rescale(min_bits_per_frame, avctx->time_base.den,
                                      avctx->time_base.num);
         av_log(avctx, AV_LOG_WARNING,