]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/motionpixels: Use symbols table
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Thu, 29 Oct 2020 09:56:32 +0000 (10:56 +0100)
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Tue, 24 Nov 2020 10:35:03 +0000 (11:35 +0100)
If allows us to directly store the deltas in the VLC table and therefore
avoids a level of indirection.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
libavcodec/motionpixels.c

index a65250efe5a36e05f4f683f213263d6dfdd94bce..927f9fdc14015e93c5c3226ede4ac7fdf1b8d396 100644 (file)
@@ -192,10 +192,8 @@ static void mp_set_rgb_from_yuv(MotionPixelsContext *mp, int x, int y, const Yuv
 
 static av_always_inline int mp_get_vlc(MotionPixelsContext *mp, GetBitContext *gb)
 {
-    int i;
-
-    i = (mp->codes_count == 1) ? 0 : get_vlc2(gb, mp->vlc.table, mp->max_codes_bits, 1);
-    return mp->codes[i].delta;
+    return mp->vlc.table ? get_vlc2(gb, mp->vlc.table, mp->max_codes_bits, 1)
+                         : mp->codes[0].delta;
 }
 
 static void mp_decode_line(MotionPixelsContext *mp, GetBitContext *gb, int y)
@@ -322,9 +320,14 @@ static int mp_decode_frame(AVCodecContext *avctx,
     if (sz == 0)
         goto end;
 
-    if (mp->codes_count > 1)
-    if (init_vlc(&mp->vlc, mp->max_codes_bits, mp->codes_count, &mp->codes[0].size, sizeof(HuffCode), 1, &mp->codes[0].code, sizeof(HuffCode), 4, 0))
-        goto end;
+    if (mp->codes_count > 1) {
+        ret = ff_init_vlc_sparse(&mp->vlc, mp->max_codes_bits, mp->codes_count,
+                                 &mp->codes[0].size,  sizeof(HuffCode), 1,
+                                 &mp->codes[0].code,  sizeof(HuffCode), 4,
+                                 &mp->codes[0].delta, sizeof(HuffCode), 1, 0);
+        if (ret < 0)
+            goto end;
+    }
     mp_decode_frame_helper(mp, &gb);
     ff_free_vlc(&mp->vlc);