From 014f9d233f1ae658bfc7317e0efa44f2473e367e Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 9 Sep 2007 12:33:34 +0000 Subject: allocate slice buffer after parsing the header containing needed parameters argh i really wish i had never accepted these slice patches ... Originally committed as revision 10453 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/snow.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/snow.c b/libavcodec/snow.c index c24dacaaa8..13ebad93a3 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -580,12 +580,9 @@ static void slice_buffer_destroy(slice_buffer * buf) for (i = buf->data_count - 1; i >= 0; i--) { - assert(buf->data_stack[i]); av_freep(&buf->data_stack[i]); } - assert(buf->data_stack); av_freep(&buf->data_stack); - assert(buf->line); av_freep(&buf->line); } @@ -4398,15 +4395,11 @@ static int encode_end(AVCodecContext *avctx) static int decode_init(AVCodecContext *avctx) { SnowContext *s = avctx->priv_data; - int block_size; avctx->pix_fmt= PIX_FMT_YUV420P; common_init(avctx); - block_size = MB_SIZE >> s->block_max_depth; - - slice_buffer_init(&s->sb, s->plane[0].height, block_size + s->spatial_decomposition_count * 8 + 1, s->plane[0].width, s->spatial_idwt_buffer); return 0; } @@ -4423,6 +4416,10 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8 s->current_picture.pict_type= FF_I_TYPE; //FIXME I vs. P decode_header(s); + // realloc slice buffer for the case that spatial_decomposition_count changed + slice_buffer_destroy(&s->sb); + slice_buffer_init(&s->sb, s->plane[0].height, (MB_SIZE >> s->block_max_depth) + s->spatial_decomposition_count * 8 + 1, s->plane[0].width, s->spatial_idwt_buffer); + for(plane_index=0; plane_index<3; plane_index++){ Plane *p= &s->plane[plane_index]; p->fast_mc= p->diag_mc && p->htaps==6 && p->hcoeff[0]==40 -- cgit v1.2.3