summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-03-19 22:37:06 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-03-19 22:37:06 +0100
commit87c1783c77f4e688edceec165eaef287bd127622 (patch)
tree96c82b2726740057dcaa76743bb47964872a161d /libavcodec
parentfc8ed1117e1cfa5efff6a1a3263b52ec3e92c98c (diff)
downloadffmpeg-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.h1
-rw-r--r--libavcodec/snowenc.c12
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;
}