diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-03-19 22:37:06 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-03-19 22:37:06 +0100 |
commit | 87c1783c77f4e688edceec165eaef287bd127622 (patch) | |
tree | 96c82b2726740057dcaa76743bb47964872a161d /libavcodec | |
parent | fc8ed1117e1cfa5efff6a1a3263b52ec3e92c98c (diff) | |
download | ffmpeg-87c1783c77f4e688edceec165eaef287bd127622.tar.gz |
snowenc: move runs from stack to heap.
Fixes ticket1082
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/snow.h | 1 | ||||
-rw-r--r-- | libavcodec/snowenc.c | 12 |
2 files changed, 8 insertions, 5 deletions
diff --git a/libavcodec/snow.h b/libavcodec/snow.h index 7990f1f519..32f116d34d 100644 --- a/libavcodec/snow.h +++ b/libavcodec/snow.h @@ -163,6 +163,7 @@ typedef struct SnowContext{ MpegEncContext m; // needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of MpegEncContext, so this will be removed then (FIXME/XXX) uint8_t *scratchbuf; + int *runs; }SnowContext; /* Tables */ diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index b71c8233b9..1f31db062f 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -248,6 +248,8 @@ static av_cold int encode_init(AVCodecContext *avctx) } } + s->runs = av_malloc(avctx->width * avctx->height * sizeof(*s->runs)); + return 0; } @@ -834,7 +836,6 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, if(1){ int run=0; - int runs[w*h]; int run_index=0; int max_index; @@ -868,7 +869,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, } if(!(/*ll|*/l|lt|t|rt|p)){ if(v){ - runs[run_index++]= run; + s->runs[run_index++]= run; run=0; }else{ run++; @@ -877,9 +878,9 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, } } max_index= run_index; - runs[run_index++]= run; + s->runs[run_index++]= run; run_index=0; - run= runs[run_index++]; + run= s->runs[run_index++]; put_symbol2(&s->c, b->state[30], max_index, 0); if(run_index <= max_index) @@ -923,7 +924,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, put_rac(&s->c, &b->state[0][context], !!v); }else{ if(!run){ - run= runs[run_index++]; + run= s->runs[run_index++]; if(run_index <= max_index) put_symbol2(&s->c, b->state[1], run, 3); @@ -1897,6 +1898,7 @@ static av_cold int encode_end(AVCodecContext *avctx) if (s->input_picture.data[0]) avctx->release_buffer(avctx, &s->input_picture); av_free(avctx->stats_out); + av_freep(&s->runs); return 0; } |