[FFmpeg-cvslog] avcodec/ac3dec: Read spx flags at once, not one bit at a time
Andreas Rheinhardt
git at videolan.org
Wed Apr 2 10:37:34 EEST 2025
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Sun Mar 30 13:40:58 2025 +0200| [ffa56f73a9bc5505a0d4d1e1e04a65bf10113dee] | committer: Andreas Rheinhardt
avcodec/ac3dec: Read spx flags at once, not one bit at a time
Doing so gets rid of a stupid GCC -Wstringop-overflow= warning
(GCC somehow believes that fbw_channels can be 7 with the old
form of the code, so that channel_uses_spx[7] would be written
to, but now it no longer believes so).
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ffa56f73a9bc5505a0d4d1e1e04a65bf10113dee
---
libavcodec/ac3dec.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 2cf82abc19..49b170c235 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -854,16 +854,18 @@ static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
static inline int spx_strategy(AC3DecodeContext *s, int blk)
{
GetBitContext *bc = &s->gbc;
- int fbw_channels = s->fbw_channels;
int dst_start_freq, dst_end_freq, src_start_freq,
- start_subband, end_subband, ch;
+ start_subband, end_subband;
/* determine which channels use spx */
if (s->channel_mode == AC3_CHMODE_MONO) {
s->channel_uses_spx[1] = 1;
} else {
- for (ch = 1; ch <= fbw_channels; ch++)
- s->channel_uses_spx[ch] = get_bits1(bc);
+ unsigned channel_uses_spx = get_bits(bc, s->fbw_channels);
+ for (int ch = s->fbw_channels; ch >= 1; --ch) {
+ s->channel_uses_spx[ch] = channel_uses_spx & 1;
+ channel_uses_spx >>= 1;
+ }
}
/* get the frequency bins of the spx copy region and the spx start
More information about the ffmpeg-cvslog
mailing list