aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2007-09-09 12:33:34 +0000
committerMichael Niedermayer <michaelni@gmx.at>2007-09-09 12:33:34 +0000
commit014f9d233f1ae658bfc7317e0efa44f2473e367e (patch)
tree44c91c09ed546f9c09256093e8cc3eb2a3c0f894 /libavcodec
parentba8964db60592febf238678adb2d3e62562a9d47 (diff)
downloadffmpeg-014f9d233f1ae658bfc7317e0efa44f2473e367e.tar.gz
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
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/snow.c11
1 files changed, 4 insertions, 7 deletions
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