diff options
author | James Almer <jamrial@gmail.com> | 2022-08-23 20:20:10 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2022-08-24 15:21:44 -0300 |
commit | 57041bb7b5d39b2de22da793b53cc7fbda556a41 (patch) | |
tree | 9c7f65884d1f994ca1d2faab64b0aa7396e7817e /libavcodec/libvpxenc.c | |
parent | 48cb2c7a8a2deca40dd2f143848dd5addc25465c (diff) | |
download | ffmpeg-57041bb7b5d39b2de22da793b53cc7fbda556a41.tar.gz |
avcodec/libvpxenc: use av_fast_realloc() to resize the stats buffer
Reviewed-by: James Zern <jzern@google.com>
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/libvpxenc.c')
-rw-r--r-- | libavcodec/libvpxenc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index e08df5fb96..bbbe56c0dc 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -80,6 +80,7 @@ typedef struct VPxEncoderContext { struct vpx_image rawimg_alpha; uint8_t is_alpha; struct vpx_fixed_buf twopass_stats; + unsigned twopass_stats_size; int deadline; //i.e., RT/GOOD/BEST uint64_t sse[4]; int have_sse; /**< true if we have pending sse[] */ @@ -1356,16 +1357,20 @@ static int queue_frames(AVCodecContext *avctx, struct vpx_codec_ctx *encoder, break; case VPX_CODEC_STATS_PKT: { struct vpx_fixed_buf *stats = &ctx->twopass_stats; - int err; + uint8_t *tmp; if (!pkt_out) break; - if ((err = av_reallocp(&stats->buf, - stats->sz + - pkt->data.twopass_stats.sz)) < 0) { + tmp = av_fast_realloc(stats->buf, + &ctx->twopass_stats_size, + stats->sz + + pkt->data.twopass_stats.sz); + if (!tmp) { + av_freep(&stats->buf); stats->sz = 0; av_log(avctx, AV_LOG_ERROR, "Stat buffer realloc failed\n"); - return err; + return AVERROR(ENOMEM); } + stats->buf = tmp; memcpy((uint8_t*)stats->buf + stats->sz, pkt->data.twopass_stats.buf, pkt->data.twopass_stats.sz); stats->sz += pkt->data.twopass_stats.sz; |