From a6c58353ac033798fb799cd761e6a78b4fb12d60 Mon Sep 17 00:00:00 2001 From: Lynne Date: Sun, 13 Oct 2024 12:07:27 +0200 Subject: [PATCH] ffv1enc: move slice allocation out of generic encode init --- libavcodec/ffv1enc.c | 48 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 3174de8d40..352a0fde13 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -738,32 +738,8 @@ av_cold int ff_ffv1_encode_init(AVCodecContext *avctx) /* Disable slices when the version doesn't support them */ s->num_h_slices = 1; s->num_v_slices = 1; - } else { - if ((ret = encode_determine_slices(avctx)) < 0) - return ret; - - if ((ret = ff_ffv1_write_extradata(avctx)) < 0) - return ret; } - if ((ret = ff_ffv1_init_slice_contexts(s)) < 0) - return ret; - s->slice_count = s->max_slice_count; - - for (int j = 0; j < s->slice_count; j++) { - for (int i = 0; i < s->plane_count; i++) { - PlaneContext *const p = &s->slices[j].plane[i]; - - p->quant_table_index = s->context_model; - p->context_count = s->context_count[p->quant_table_index]; - } - - ff_build_rac_states(&s->slices[j].c, 0.05 * (1LL << 32), 256 - 8); - } - - if ((ret = ff_ffv1_init_slices_state(s)) < 0) - return ret; - return 0; } @@ -942,6 +918,30 @@ static int encode_init_internal(AVCodecContext *avctx) if (ret < 0) return ret; + if ((ret = encode_determine_slices(avctx)) < 0) + return ret; + + if ((ret = ff_ffv1_write_extradata(avctx)) < 0) + return ret; + + if ((ret = ff_ffv1_init_slice_contexts(s)) < 0) + return ret; + s->slice_count = s->max_slice_count; + + for (int j = 0; j < s->slice_count; j++) { + for (int i = 0; i < s->plane_count; i++) { + PlaneContext *const p = &s->slices[j].plane[i]; + + p->quant_table_index = s->context_model; + p->context_count = s->context_count[p->quant_table_index]; + } + + ff_build_rac_states(&s->slices[j].c, 0.05 * (1LL << 32), 256 - 8); + } + + if ((ret = ff_ffv1_init_slices_state(s)) < 0) + return ret; + #define STATS_OUT_SIZE 1024 * 1024 * 6 if (avctx->flags & AV_CODEC_FLAG_PASS1) { avctx->stats_out = av_mallocz(STATS_OUT_SIZE);