From d1d40a7c9b59b3a94451c4180b66de48686e8899 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Tue, 28 May 2024 03:41:59 +0200 Subject: [PATCH] avcodec/vc2enc: Move transient PutBitContext from ctx to stack Reviewed-by: Lynne Signed-off-by: Andreas Rheinhardt --- libavcodec/vc2enc.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/libavcodec/vc2enc.c b/libavcodec/vc2enc.c index cad7390055..e2ff27ddb8 100644 --- a/libavcodec/vc2enc.c +++ b/libavcodec/vc2enc.c @@ -105,9 +105,11 @@ typedef struct Plane { } Plane; typedef struct SliceArgs { - PutBitContext pb; - int cache[DIRAC_MAX_QUANT_INDEX]; const struct VC2EncContext *ctx; + union { + int cache[DIRAC_MAX_QUANT_INDEX]; + uint8_t *buf; + }; int x; int y; int quant_idx; @@ -724,9 +726,9 @@ static int calc_slice_sizes(VC2EncContext *s) /* VC-2 13.5.3 - hq_slice */ static int encode_hq_slice(AVCodecContext *avctx, void *arg) { - SliceArgs *slice_dat = arg; + const SliceArgs *slice_dat = arg; const VC2EncContext *s = slice_dat->ctx; - PutBitContext *pb = &slice_dat->pb; + PutBitContext pb0, *const pb = &pb0; const int slice_x = slice_dat->x; const int slice_y = slice_dat->y; const int quant_idx = slice_dat->quant_idx; @@ -735,8 +737,9 @@ static int encode_hq_slice(AVCodecContext *avctx, void *arg) int p, level, orientation; /* The reference decoder ignores it, and its typical length is 0 */ - memset(put_bits_ptr(pb), 0, s->prefix_bytes); - skip_put_bytes(pb, s->prefix_bytes); + memset(slice_dat->buf, 0, s->prefix_bytes); + + init_put_bits(pb, slice_dat->buf + s->prefix_bytes, slice_dat->bytes - s->prefix_bytes); put_bits(pb, 8, quant_idx); @@ -789,7 +792,7 @@ static int encode_slices(VC2EncContext *s) for (slice_y = 0; slice_y < s->num_y; slice_y++) { for (slice_x = 0; slice_x < s->num_x; slice_x++) { SliceArgs *args = &enc_args[s->num_x*slice_y + slice_x]; - init_put_bits(&args->pb, buf + skip, args->bytes); + args->buf = buf + skip; skip += args->bytes; } }