summaryrefslogtreecommitdiff
path: root/libavcodec/ffv1.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/ffv1.c')
-rw-r--r--libavcodec/ffv1.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/libavcodec/ffv1.c b/libavcodec/ffv1.c
index 5b52849400..1c580c3b49 100644
--- a/libavcodec/ffv1.c
+++ b/libavcodec/ffv1.c
@@ -119,7 +119,7 @@ av_cold int ff_ffv1_init_slice_contexts(FFV1Context *f)
av_assert0(max_slice_count > 0);
- for (i = 0; i < 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;
@@ -131,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));
@@ -144,22 +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);
}