[FFmpeg-cvslog] avcodec/vlc: fix min/max bits calculation in multi vlc

Paul B Mahol git at videolan.org
Tue Sep 26 23:45:29 EEST 2023


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Tue Sep 26 21:50:45 2023 +0200| [58d9b5caf3d332c6495f9af437158bf45531a05e] | committer: Paul B Mahol

avcodec/vlc: fix min/max bits calculation in multi vlc

Improves speed with >8 bit depth inputs.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=58d9b5caf3d332c6495f9af437158bf45531a05e
---

 libavcodec/vlc.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/libavcodec/vlc.c b/libavcodec/vlc.c
index 8beab9a0a2..21b9fffe27 100644
--- a/libavcodec/vlc.c
+++ b/libavcodec/vlc.c
@@ -403,8 +403,14 @@ static int vlc_multi_gen(VLC_MULTI_ELEM *table, const VLC *single,
     unsigned count[VLC_MULTI_MAX_SYMBOLS-1] = { 0, };
     VLC_MULTI_ELEM info = { { 0, }, 0, };
 
-    minbits = buf[nb_codes-1].bits;
-    maxbits = FFMIN(buf[0].bits, numbits);
+    minbits = buf[0].bits;
+    maxbits = buf[0].bits;
+
+    for (int n = 1; n < nb_codes; n++) {
+        minbits = FFMIN(minbits, buf[n].bits);
+        maxbits = FFMAX(maxbits, buf[n].bits);
+    }
+    maxbits = FFMIN(maxbits, numbits);
 
     while (max >= nb_codes/2) {
         if (buf[max].bits+minbits > maxbits)



More information about the ffmpeg-cvslog mailing list