From 33b9fe562a307629d8db61edcf729c4cb8f78413 Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Wed, 29 Feb 2012 14:39:50 +0100 Subject: [PATCH] encode_video2: shrink packet after encoding. With the encode2 API, encoders allocate huge packets to be sure they have enough room (a typical case is mpeg4, which allocs ~10M for 1280x768 yuv420p) but only actually use a very small part of the buffer. --- libavcodec/utils.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 63f7fae88a..99e36f84a8 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1198,6 +1198,7 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx, { int ret; int user_packet = !!avpkt->data; + void *new_data; *got_packet_ptr = 0; @@ -1218,6 +1219,12 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx, avpkt->size = 0; else if (!(avctx->codec->capabilities & CODEC_CAP_DELAY)) avpkt->pts = avpkt->dts = frame->pts; + if (avpkt->data) { + new_data = av_realloc(avpkt->data, + avpkt->size + FF_INPUT_BUFFER_PADDING_SIZE); + if (new_data) + avpkt->data = new_data; + } avctx->frame_number++; }