Commit 67242541 authored by Reimar Döffinger's avatar Reimar Döffinger

ffv1enc: reduce stack usage.

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: 's avatarReimar Döffinger <Reimar.Doeffinger@gmx.de>
parent efaa4a8d
...@@ -862,9 +862,11 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -862,9 +862,11 @@ static av_cold int encode_init(AVCodecContext *avctx)
} }
if (avctx->stats_in) { if (avctx->stats_in) {
char *p = 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; int gob_count = 0;
char *next; char *next;
if (!best_state)
return AVERROR(ENOMEM);
av_assert0(s->version >= 2); av_assert0(s->version >= 2);
...@@ -875,6 +877,7 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -875,6 +877,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
if (next == p) { if (next == p) {
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
"2Pass file invalid at %d %d [%s]\n", j, i, p); "2Pass file invalid at %d %d [%s]\n", j, i, p);
av_freep(&best_state);
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
p = next; p = next;
...@@ -888,6 +891,7 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -888,6 +891,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
"2Pass file invalid at %d %d %d %d [%s]\n", "2Pass file invalid at %d %d %d %d [%s]\n",
i, j, k, m, p); i, j, k, m, p);
av_freep(&best_state);
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
p = next; p = next;
...@@ -896,6 +900,7 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -896,6 +900,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
gob_count = strtol(p, &next, 0); gob_count = strtol(p, &next, 0);
if (next == p || gob_count <= 0) { if (next == p || gob_count <= 0) {
av_log(avctx, AV_LOG_ERROR, "2Pass file invalid\n"); av_log(avctx, AV_LOG_ERROR, "2Pass file invalid\n");
av_freep(&best_state);
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
p = next; p = next;
...@@ -933,6 +938,7 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -933,6 +938,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
} }
} }
} }
av_freep(&best_state);
} }
if (s->version > 1) { if (s->version > 1) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment