From 672425411804becc64447c2b830335c1426db9a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Tue, 2 Sep 2014 20:31:39 +0200 Subject: [PATCH] ffv1enc: reduce stack usage. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A bit more complex than e.g. adding it to the context, but using the context for something that will be used only during initialization seemed a bit wasteful. Signed-off-by: Reimar Döffinger --- libavcodec/ffv1enc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index b63ed429d9..e2d3707710 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -862,9 +862,11 @@ static av_cold int encode_init(AVCodecContext *avctx) } if (avctx->stats_in) { char *p = avctx->stats_in; - uint8_t best_state[256][256]; + uint8_t (*best_state)[256] = av_malloc_array(256, 256); int gob_count = 0; char *next; + if (!best_state) + return AVERROR(ENOMEM); av_assert0(s->version >= 2); @@ -875,6 +877,7 @@ static av_cold int encode_init(AVCodecContext *avctx) if (next == p) { av_log(avctx, AV_LOG_ERROR, "2Pass file invalid at %d %d [%s]\n", j, i, p); + av_freep(&best_state); return AVERROR_INVALIDDATA; } p = next; @@ -888,6 +891,7 @@ static av_cold int encode_init(AVCodecContext *avctx) av_log(avctx, AV_LOG_ERROR, "2Pass file invalid at %d %d %d %d [%s]\n", i, j, k, m, p); + av_freep(&best_state); return AVERROR_INVALIDDATA; } p = next; @@ -896,6 +900,7 @@ static av_cold int encode_init(AVCodecContext *avctx) gob_count = strtol(p, &next, 0); if (next == p || gob_count <= 0) { av_log(avctx, AV_LOG_ERROR, "2Pass file invalid\n"); + av_freep(&best_state); return AVERROR_INVALIDDATA; } p = next; @@ -933,6 +938,7 @@ static av_cold int encode_init(AVCodecContext *avctx) } } } + av_freep(&best_state); } if (s->version > 1) {