diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2024-05-28 03:41:59 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2024-05-31 14:18:33 +0200 |
commit | d1d40a7c9b59b3a94451c4180b66de48686e8899 (patch) | |
tree | c82a467faf907a10b502846f7b9557bf32f67dc0 | |
parent | c30928566623110354e4cb3a10f28183cee01684 (diff) | |
download | ffmpeg-d1d40a7c9b59b3a94451c4180b66de48686e8899.tar.gz |
avcodec/vc2enc: Move transient PutBitContext from ctx to stack
Reviewed-by: Lynne <dev@lynne.ee>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r-- | libavcodec/vc2enc.c | 17 |
1 files 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; } } |