Commit 87c1783c authored by Michael Niedermayer's avatar Michael Niedermayer

snowenc: move runs from stack to heap.

Fixes ticket1082
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent fc8ed111
...@@ -163,6 +163,7 @@ typedef struct SnowContext{ ...@@ -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) 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; uint8_t *scratchbuf;
int *runs;
}SnowContext; }SnowContext;
/* Tables */ /* Tables */
......
...@@ -248,6 +248,8 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -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; return 0;
} }
...@@ -834,7 +836,6 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, ...@@ -834,7 +836,6 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src,
if(1){ if(1){
int run=0; int run=0;
int runs[w*h];
int run_index=0; int run_index=0;
int max_index; int max_index;
...@@ -868,7 +869,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, ...@@ -868,7 +869,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src,
} }
if(!(/*ll|*/l|lt|t|rt|p)){ if(!(/*ll|*/l|lt|t|rt|p)){
if(v){ if(v){
runs[run_index++]= run; s->runs[run_index++]= run;
run=0; run=0;
}else{ }else{
run++; run++;
...@@ -877,9 +878,9 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, ...@@ -877,9 +878,9 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src,
} }
} }
max_index= run_index; max_index= run_index;
runs[run_index++]= run; s->runs[run_index++]= run;
run_index=0; run_index=0;
run= runs[run_index++]; run= s->runs[run_index++];
put_symbol2(&s->c, b->state[30], max_index, 0); put_symbol2(&s->c, b->state[30], max_index, 0);
if(run_index <= max_index) if(run_index <= max_index)
...@@ -923,7 +924,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, ...@@ -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); put_rac(&s->c, &b->state[0][context], !!v);
}else{ }else{
if(!run){ if(!run){
run= runs[run_index++]; run= s->runs[run_index++];
if(run_index <= max_index) if(run_index <= max_index)
put_symbol2(&s->c, b->state[1], run, 3); put_symbol2(&s->c, b->state[1], run, 3);
...@@ -1897,6 +1898,7 @@ static av_cold int encode_end(AVCodecContext *avctx) ...@@ -1897,6 +1898,7 @@ static av_cold int encode_end(AVCodecContext *avctx)
if (s->input_picture.data[0]) if (s->input_picture.data[0])
avctx->release_buffer(avctx, &s->input_picture); avctx->release_buffer(avctx, &s->input_picture);
av_free(avctx->stats_out); av_free(avctx->stats_out);
av_freep(&s->runs);
return 0; return 0;
} }
......
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