From 37e037c55320738b76ba6181ed6e5f4fd5fad852 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Date: Fri, 14 Mar 2025 00:11:31 +0100 Subject: [PATCH 14/17] avcodec/cfhd: Move GetBitContext from context to stack Its lifetime is extremely limited. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/cfhd.c | 17 +++++++++-------- libavcodec/cfhd.h | 3 --- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/libavcodec/cfhd.c b/libavcodec/cfhd.c index 6f1d960058..4ae5510448 100644 --- a/libavcodec/cfhd.c +++ b/libavcodec/cfhd.c @@ -772,6 +772,7 @@ static int cfhd_decode(AVCodecContext *avctx, AVFrame *pic, if (tag == BandHeader || tag == BandSecondPass) { int highpass_height, highpass_width, highpass_a_width, highpass_a_height, highpass_stride, a_expected; int expected; + GetBitContext gbit; int level, run, coeff; int count = 0, bytes; @@ -802,11 +803,11 @@ static int cfhd_decode(AVCodecContext *avctx, AVFrame *pic, av_log(avctx, AV_LOG_DEBUG, "Start subband coeffs plane %i level %i codebook %i expected %i\n", s->channel_num, s->level, s->codebook, expected); - ret = init_get_bits8(&s->gb, gb.buffer, bytestream2_get_bytes_left(&gb)); + ret = init_get_bits8(&gbit, gb.buffer, bytestream2_get_bytes_left(&gb)); if (ret < 0) goto end; { - OPEN_READER(re, &s->gb); + OPEN_READER(re, &gbit); const int lossless = s->band_encoding == 5; @@ -814,8 +815,8 @@ static int cfhd_decode(AVCodecContext *avctx, AVFrame *pic, s->codebook = 1; if (!s->codebook) { while (1) { - UPDATE_CACHE(re, &s->gb); - GET_RL_VLC(level, run, re, &s->gb, s->table_9_rl_vlc, + UPDATE_CACHE(re, &gbit); + GET_RL_VLC(level, run, re, &gbit, s->table_9_rl_vlc, VLC_BITS, 3, 1); /* escape */ @@ -845,8 +846,8 @@ static int cfhd_decode(AVCodecContext *avctx, AVFrame *pic, } } else { while (1) { - UPDATE_CACHE(re, &s->gb); - GET_RL_VLC(level, run, re, &s->gb, s->table_18_rl_vlc, + UPDATE_CACHE(re, &gbit); + GET_RL_VLC(level, run, re, &gbit, s->table_18_rl_vlc, VLC_BITS, 3, 1); /* escape */ @@ -875,7 +876,7 @@ static int cfhd_decode(AVCodecContext *avctx, AVFrame *pic, } } } - CLOSE_READER(re, &s->gb); + CLOSE_READER(re, &gbit); } if (count > expected) { @@ -888,7 +889,7 @@ static int cfhd_decode(AVCodecContext *avctx, AVFrame *pic, if (s->difference_coding) difference_coding(s->plane[s->channel_num].subband[s->subband_num_actual], highpass_width, highpass_height); - bytes = FFALIGN(AV_CEIL_RSHIFT(get_bits_count(&s->gb), 3), 4); + bytes = FFALIGN(AV_CEIL_RSHIFT(get_bits_count(&gbit), 3), 4); if (bytes > bytestream2_get_bytes_left(&gb)) { av_log(avctx, AV_LOG_ERROR, "Bitstream overread error\n"); ret = AVERROR(EINVAL); diff --git a/libavcodec/cfhd.h b/libavcodec/cfhd.h index 586d3360b6..2dbac80c66 100644 --- a/libavcodec/cfhd.h +++ b/libavcodec/cfhd.h @@ -25,7 +25,6 @@ #include "avcodec.h" #include "bytestream.h" -#include "get_bits.h" #include "cfhddsp.h" enum CFHDParam { @@ -144,8 +143,6 @@ typedef struct CFHDContext { int lut[2][256]; - GetBitContext gb; - int planes; int frame_type; int frame_index; -- 2.45.2