changeset 5662:77297fe0311c libavcodec

allocate slice buffer after parsing the header containing needed parameters argh i really wish i had never accepted these slice patches ...
author michael
date Sun, 09 Sep 2007 12:33:34 +0000
parents 5da86360c38b
children 4264b8bb3659
files snow.c
diffstat 1 files changed, 4 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/snow.c	Sun Sep 09 12:25:12 2007 +0000
+++ b/snow.c	Sun Sep 09 12:33:34 2007 +0000
@@ -580,12 +580,9 @@
 
     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 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 @@
     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