X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fffv1.c;h=1c580c3b49f16a409754b37a8c2b05010d8f89a7;hb=d7e0d428faaa04e2fd850eca82f314ca2ad3dfe5;hp=a14dd2aab24594eee0ff7a33e5a3a40dbae798c1;hpb=e427ba5c68a522b26a45bf7c61016d9349fab43d;p=ffmpeg diff --git a/libavcodec/ffv1.c b/libavcodec/ffv1.c index a14dd2aab24..1c580c3b49f 100644 --- a/libavcodec/ffv1.c +++ b/libavcodec/ffv1.c @@ -31,7 +31,6 @@ #include "libavutil/opt.h" #include "libavutil/imgutils.h" #include "libavutil/pixdesc.h" -#include "libavutil/timer.h" #include "avcodec.h" #include "internal.h" @@ -116,12 +115,11 @@ av_cold int ff_ffv1_init_slices_state(FFV1Context *f) av_cold int ff_ffv1_init_slice_contexts(FFV1Context *f) { - int i; + int i, max_slice_count = f->num_h_slices * f->num_v_slices; - f->max_slice_count = f->num_h_slices * f->num_v_slices; - av_assert0(f->max_slice_count > 0); + av_assert0(max_slice_count > 0); - for (i = 0; i < f->max_slice_count; i++) { + for (i = 0; i < max_slice_count;) { int sx = i % f->num_h_slices; int sy = i / f->num_h_slices; int sxs = f->avctx->width * sx / f->num_h_slices; @@ -133,7 +131,7 @@ av_cold int ff_ffv1_init_slice_contexts(FFV1Context *f) if (!fs) goto memfail; - f->slice_context[i] = fs; + f->slice_context[i++] = fs; memcpy(fs, f, sizeof(*fs)); memset(fs->rc_stat2, 0, sizeof(fs->rc_stat2)); @@ -146,21 +144,14 @@ av_cold int ff_ffv1_init_slice_contexts(FFV1Context *f) sizeof(*fs->sample_buffer)); fs->sample_buffer32 = av_malloc_array((fs->width + 6), 3 * MAX_PLANES * sizeof(*fs->sample_buffer32)); - if (!fs->sample_buffer || !fs->sample_buffer32) { - av_freep(&fs->sample_buffer); - av_freep(&fs->sample_buffer32); - av_freep(&f->slice_context[i]); + if (!fs->sample_buffer || !fs->sample_buffer32) goto memfail; - } } + f->max_slice_count = max_slice_count; return 0; memfail: - while(--i >= 0) { - av_freep(&f->slice_context[i]->sample_buffer); - av_freep(&f->slice_context[i]->sample_buffer32); - av_freep(&f->slice_context[i]); - } + f->max_slice_count = i; return AVERROR(ENOMEM); }