From 998391484026434b125d4856531fe1203f87fe50 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Date: Fri, 14 Mar 2025 02:31:51 +0100 Subject: [PATCH 16/17] avcodec/qdm2, vorbisdec: Use compile-time const max_depth in get_vlc2 It makes no sense to try to be exact with max depth in get_vlc2(): It will mean that the compiler emits code for all three stages of parsing and runtime checks for whether max_depth is big enough to parse the next stage when a not yet complete code has been encountered. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/qdm2.c | 6 +++--- libavcodec/vorbisdec.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c index e629e3b42a..ffb44015ec 100644 --- a/libavcodec/qdm2.c +++ b/libavcodec/qdm2.c @@ -34,6 +34,7 @@ #include <math.h> #include <stddef.h> +#include "libavutil/attributes.h" #include "libavutil/channel_layout.h" #include "libavutil/mem_internal.h" #include "libavutil/thread.h" @@ -199,9 +200,8 @@ static const int switchtable[23] = { static int qdm2_get_vlc(GetBitContext *gb, const VLC *vlc, int flag, int depth) { - int value; - - value = get_vlc2(gb, vlc->table, vlc->bits, depth); + int value = get_vlc2(gb, vlc->table, vlc->bits, + av_builtin_constant_p(depth) ? depth : 2); /* stage-2, 3 bits exponent escape sequence */ if (value < 0) diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c index 11111e7eb3..a778dc6b58 100644 --- a/libavcodec/vorbisdec.c +++ b/libavcodec/vorbisdec.c @@ -1150,7 +1150,7 @@ static int vorbis_floor0_decode(vorbis_context *vc, ff_dlog(NULL, "floor0 dec: maximum depth: %d\n", codebook.maxdepth); /* read temp vector */ vec_off = get_vlc2(&vc->gb, codebook.vlc.table, - codebook.nb_bits, codebook.maxdepth); + codebook.nb_bits, 3); if (vec_off < 0) return AVERROR_INVALIDDATA; vec_off *= codebook.dimensions; -- 2.45.2