From 1307b017e5ece29921010a067504f3b0c207378c Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Sat, 15 Mar 2025 10:28:05 +0100
Subject: [PATCH 45/77] avcodec/msmpeg4dec: Avoid lookups when decoding motion
 vector

Up until now, the decoder uses VLCs to determine whether
this is an escape element or an index in two separate tables
giving the x and y components of the motion vector.
Given that both these components fit into an int16_t and therefore
into a VLCElem's symbol one can simply use a symbol table
to avoid the latter lookups.

This necessitated to combine the two tables for x and y components.
While just at it, also switch to ff_vlc_init_tables_from_lengths().
This will allow to get rid of the code tables (about 4KiB) once
the encoder has been ported, too.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/msmpeg4data.c | 510 ++++++++++++++++++++++++++++++++++++++-
 libavcodec/msmpeg4data.h |   7 +-
 libavcodec/msmpeg4dec.c  |  42 ++--
 libavcodec/msmpeg4enc.c  |   2 +-
 4 files changed, 536 insertions(+), 25 deletions(-)

diff --git a/libavcodec/msmpeg4data.c b/libavcodec/msmpeg4data.c
index 65546da66e..aac75abd7c 100644
--- a/libavcodec/msmpeg4data.c
+++ b/libavcodec/msmpeg4data.c
@@ -481,6 +481,515 @@ RLTable ff_rl_table[NB_RL_TABLES] = {
 
 /* motion vector table 0 */
 
+#define E(mvx, mvy) ((mvx << 8) | mvy)
+#define ESCAPE 0
+
+const uint16_t ff_msmp4_mv_table0[MSMPEG4_MV_TABLES_NB_ELEMS] = {
+    ESCAPE,    E(31, 39), E(38, 31), E(24, 32), E(23, 30), E(34, 20),
+    E(33, 22), E(21, 29), E(28, 34), E(33, 24), E(49, 32), E(27, 41),
+    E(32,  2), E(40, 33), E(34, 39), E(37, 25), E(29, 26), E(38, 28),
+    E(43, 31), E(37, 33), E(31, 35), E(32, 35), E(25, 29), E(26, 28),
+    E(32, 42), E(33, 23), E(42, 31), E(35, 36), E(27, 31), E(36, 30),
+    E(21, 32), E(23, 32), E(43, 32), E(36, 32), E(39, 29), E(38, 30),
+    E(36, 34), E(34, 36), E(19, 30), E(20, 38), E(41, 41), E(26, 44),
+    E(41, 53), E(42, 11), E(42, 20), E(42, 25), E(26, 45), E(26, 46),
+    E(26, 47), E(26, 48), E( 1, 39), E(26, 52), E(37, 46), E(37, 49),
+    E(37, 63), E(23, 55), E(34, 44), E(42, 38), E(27, 13), E(43, 13),
+    E(34, 57), E(27, 22), E(31, 51), E(24, 16), E(33, 12), E(16, 28),
+    E( 3, 35), E(31, 57), E(24, 25), E(31, 33), E(33, 33), E(34, 32),
+    E(31, 34), E(34, 31), E(33, 20), E(24, 26), E( 4, 28), E(44, 28),
+    E(44, 29), E(11, 32), E(44, 31), E(31, 62), E(13, 34), E(13, 35),
+    E(44, 35), E(45, 19), E(13, 49), E(25, 48), E(22, 39), E(38, 40),
+    E(26, 18), E(38, 43), E(38, 46), E(39, 11), E(32,  6), E(30, 48),
+    E(39, 19), E(30, 49), E(22, 41), E(32, 10), E(26, 23), E(30, 58),
+    E(47, 17), E(47, 21), E(47, 23), E(19, 34), E(47, 30), E(30, 60),
+    E(31,  0), E(35, 44), E( 8, 34), E(23, 26), E(47, 37), E(47, 46),
+    E(27, 43), E(35, 49), E(47, 59), E(31,  4), E(48, 34), E(35, 59),
+    E(19, 37), E(36, 22), E(49, 25), E(49, 28), E(33, 46), E(31,  6),
+    E(39, 40), E(27, 59), E(39, 42), E(49, 36), E(49, 61), E(50, 28),
+    E(50, 30), E(50, 31), E(39, 43), E(31, 10), E(51, 22), E(51, 23),
+    E(39, 47), E(28, 20), E(33, 52), E(33, 55), E(21, 36), E(40, 25),
+    E(31, 16), E(52,  1), E(53, 11), E(40, 27), E(53, 29), E( 9,  5),
+    E(33, 63), E(31, 18), E(53, 41), E(54, 31), E(54, 34), E(54, 38),
+    E(55,  1), E(55,  5), E(34, 13), E(15, 28), E(56, 31), E(25, 17),
+    E(56, 38), E(21, 39), E(21, 41), E(40, 36), E(40, 37), E(25, 22),
+    E(40, 39), E(58, 33), E(36, 43), E( 5, 43), E(41, 15), E(41, 17),
+    E(12, 49), E(60, 30), E(41, 21), E(41, 22), E(37, 20), E(22, 10),
+    E(61, 17), E(18, 25), E(29, 54), E(29, 57), E(30,  3), E(61, 34),
+    E(30,  8), E(61, 36), E(62, 25), E(62, 31), E(30, 14), E(30, 15),
+    E(63, 19), E(18, 29), E(13, 25), E(30, 18), E(45, 30), E( 1, 63),
+    E(34, 16), E(31, 42), E(22, 28), E(35, 13), E(15, 33), E(46, 33),
+    E(46, 35), E(35, 19), E(31, 46), E(28, 43), E(29, 17), E(29, 19),
+    E(23, 36), E(41, 39), E(27, 24), E(14, 31), E(53, 32), E(53, 33),
+    E(27, 26), E(24, 28), E(32, 62), E(57, 33), E(32, 63), E(17, 33),
+    E(42, 39), E(37, 19), E(29, 49), E(33, 17), E( 1, 31), E(25, 43),
+    E(32, 13), E(32, 15), E(63, 29), E(26, 25), E(40, 35), E(23, 34),
+    E(27, 25), E(22, 33), E(24, 29), E(22, 31), E(39, 39), E(43, 35),
+    E(27, 36), E(37, 24), E( 6, 32), E(42, 30), E(24, 33), E(40, 31),
+    E(28, 39), E(32,  1), E(32, 41), E(41, 32), E(36, 31), E(28, 32),
+    E(35, 31), E(29, 31), E(38, 32), E(23, 31), E(27, 30), E(32, 59),
+    E(32, 22), E(32, 21), E(30, 39), E(35, 25), E(26, 34), E(34, 38),
+    E(30, 28), E(44, 33), E(36, 23), E(47, 33), E(26, 27), E(30, 44),
+    E(31, 60), E(41, 30), E(39, 36), E(33, 19), E(33, 29), E(32, 36),
+    E(22, 34), E(45, 31), E(36, 24), E(32, 16), E(45, 35), E(19, 32),
+    E(36, 27), E(32,  4), E(43, 33), E(60, 32), E(37, 31), E(35, 33),
+    E(35, 32), E(34, 29), E(33, 28), E(25, 33), E(25, 34), E(21, 33),
+    E(36, 35), E(37, 32), E(29, 39), E(31, 24), E(30, 41), E(31,  3),
+    E(41, 35), E(22, 32), E(32, 39), E(32, 30), E(33, 32), E(32, 29),
+    E(33, 35), E(31, 28), E(28, 30), E(26, 33), E(31, 49), E(39, 41),
+    E(20, 28), E(20, 29), E(44, 34), E(23, 38), E(33,  7), E(34, 61),
+    E(29, 29), E(31, 38), E(35, 11), E(33, 50), E(33, 13), E(28, 41),
+    E(41, 19), E(23, 47), E(41, 25), E(41, 26), E(29, 15), E(25, 42),
+    E(26, 41), E(49, 29), E(29, 45), E(24, 27), E(37, 17), E(49, 35),
+    E(34, 33), E(30, 35), E(50, 32), E(51, 29), E(51, 32), E(26, 24),
+    E(39, 13), E(25, 26), E(26, 26), E(15, 31), E(39, 24), E(18, 33),
+    E(42, 28), E(17, 30), E( 4, 31), E(31, 11), E(32, 45), E(32, 46),
+    E(60, 33), E( 1, 33), E(42, 35), E(32, 57), E( 0, 32), E(12, 32),
+    E(19, 35), E(35, 45), E(22, 38), E(30, 21), E( 5, 33), E( 5, 31),
+    E(17, 31), E(29, 21), E(22, 35), E(31,  5), E(31, 17), E(43, 29),
+    E(37, 38), E(27, 38), E(32, 18), E(32, 58), E(32, 19), E(33, 43),
+    E(29, 41), E(33, 41), E(31, 37), E(30, 37), E(41, 33), E( 7, 32),
+    E(28, 31), E(34, 27), E(30, 27), E(37, 28), E(26, 36), E(34, 30),
+    E(31, 29), E(33, 30), E(27, 32), E(38, 29), E(30, 25), E(36, 28),
+    E(37, 36), E(21, 34), E(23, 39), E(19, 53), E(34, 41), E(36, 33),
+    E(32, 28), E(25, 32), E(29, 32), E(29, 33), E(33, 27), E(29, 27),
+    E(43, 30), E(35, 41), E(29, 43), E(26, 39), E(22, 29), E(32,  7),
+    E(19, 29), E(32, 17), E(25, 28), E(31, 19), E(41, 28), E(49, 31),
+    E(28, 25), E(34, 19), E(28, 40), E(39, 26), E(34, 21), E(19, 33),
+    E(37, 39), E(38, 23), E(29, 40), E(21, 30), E(36, 39), E(42, 34),
+    E(27, 28), E(59, 33), E(38, 33), E(35, 28), E(33, 34), E(30, 32),
+    E(30, 36), E(23, 35), E(33, 21), E(35, 23), E(31, 21), E(30, 26),
+    E(41, 31), E(39, 32), E(32, 27), E(26, 30), E(31, 22), E(37, 37),
+    E(38, 27), E(39, 27), E(32, 43), E(23, 29), E(32, 60), E(27, 39),
+    E(25, 35), E(61, 32), E(30, 33), E(30, 34), E(34, 28), E(33, 36),
+    E(37, 27), E(20, 22), E(20, 27), E(41, 20), E(13, 29), E( 2, 33),
+    E( 5, 41), E( 5, 42), E( 1, 35), E(32, 24), E(34, 24), E( 5, 62),
+    E(32, 50), E( 6, 29), E(32, 53), E(35, 50), E(20, 35), E(35, 55),
+    E(27, 42), E(35, 61), E(35, 63), E(36,  4), E(36,  7), E(13, 42),
+    E(36, 21), E(41, 46), E(41, 47), E(33, 37), E(28, 33), E(41, 49),
+    E( 3, 27), E(30, 46), E(42, 17), E(27, 55), E(20, 41), E(30, 50),
+    E(27, 63), E(28,  4), E(30, 56), E(21, 18), E(33,  8), E(33, 10),
+    E(14, 18), E(24, 51), E(30, 63), E(42, 36), E(24, 55), E(33, 18),
+    E(25,  5), E(42, 55), E(43,  9), E(14, 29), E(43, 17), E(43, 21),
+    E(14, 30), E(43, 27), E( 7,  1), E(36, 59), E(37,  7), E(37, 11),
+    E(37, 12), E(37, 15), E( 7,  5), E(14, 42), E(25, 24), E(43, 41),
+    E(43, 43), E(44,  7), E(15, 27), E(37, 22), E( 7, 25), E( 7, 31),
+    E( 3, 30), E( 1, 37), E( 8, 22), E(15, 39), E(15, 53), E( 8, 29),
+    E(44, 36), E(44, 37), E(44, 48), E(45,  0), E(45,  5), E(45, 13),
+    E(45, 17), E( 8, 31), E( 8, 32), E(45, 26), E(21, 46), E(45, 28),
+    E(28, 44), E(28, 45), E(28, 46), E(21, 53), E(28, 49), E(28, 51),
+    E(22,  3), E(37, 41), E(46,  3), E(46, 22), E(37, 42), E( 8, 33),
+    E(29,  5), E(37, 45), E(29,  7), E(22, 22), E(46, 40), E(37, 53),
+    E(22, 24), E(29, 14), E(47, 25), E(47, 27), E(38, 10), E(38, 12),
+    E(16, 34), E(38, 16), E(38, 17), E(33, 53), E(38, 20), E(22, 26),
+    E(47, 39), E(47, 45), E(29, 18), E(25, 45), E(16, 35), E( 0, 33),
+    E(48, 31), E( 1, 49), E(34,  4), E(48, 39), E(48, 42), E(34, 11),
+    E(25, 51), E(26,  5), E(26, 13), E(49, 26), E(49, 27), E(26, 17),
+    E( 1, 52), E(49, 30), E( 4,  0), E(26, 22), E( 4, 12), E(49, 34),
+    E( 1, 62), E( 9, 36), E(49, 38), E(49, 41), E(49, 47), E(10, 30),
+    E(49, 63), E(17, 38), E(38, 41), E(17, 43), E(17, 59), E(50, 33),
+    E(38, 45), E(50, 37), E(50, 38), E(22, 40), E(38, 47), E(51, 24),
+    E(38, 48), E(38, 49), E(51, 30), E(39,  1), E(39, 10), E(18, 22),
+    E(22, 49), E(39, 15), E(51, 39), E(22, 59), E(52, 31), E(52, 32),
+    E(52, 33), E(39, 18), E(53, 13), E(53, 15), E(10, 31), E(23, 21),
+    E(18, 27), E(29, 44), E(10, 42), E(53, 39), E(29, 46), E(54, 17),
+    E(11, 26), E(54, 32), E(11, 30), E(11, 31), E(55,  0), E( 1, 30),
+    E(18, 34), E(55,  9), E(55, 12), E(55, 13), E(55, 25), E(55, 31),
+    E(55, 32), E(29, 55), E(34, 43), E(18, 35), E(29, 61), E(56, 33),
+    E(56, 35), E(34, 46), E(57, 25), E(34, 47), E(34, 48), E(29, 62),
+    E(29, 63), E(57, 38), E(57, 61), E(35,  1), E(35,  2), E(35,  5),
+    E(35,  7), E(35,  9), E(39, 46), E(35, 10), E(59, 34), E(59, 35),
+    E(18, 36), E(59, 55), E(39, 51), E(30,  7), E(18, 40), E(40, 23),
+    E(60, 34), E(60, 37), E(61,  5), E(30, 13), E(18, 42), E(61, 18),
+    E(61, 25), E(19, 27), E(19, 28), E(41, 11), E(17, 37), E(26, 42),
+    E(20, 39), E(45, 37), E(46, 31), E(32, 49), E(37, 21), E(22, 27),
+    E(47, 29), E(29, 47), E(31, 53), E(27, 40), E(29, 51), E(30, 16),
+    E(21, 26), E(33,  1), E(35, 40), E(18, 30), E(25, 41), E(33, 44),
+    E(50, 34), E(51, 25), E(42, 27), E( 2, 31), E(15, 35), E(51, 35),
+    E(53, 31), E(33, 15), E(25, 49), E(29,  1), E(55, 35), E(37, 40),
+    E(38,  5), E(33, 58), E(38, 21), E(59, 29), E(38, 22), E(33, 59),
+    E(39, 45), E(13, 31), E(32,  9), E(40, 26), E(61,  9), E(61, 29),
+    E(32, 11), E( 9, 32), E(44, 30), E( 3,  3), E(31, 13), E(29, 20),
+    E(25, 18), E(24, 35), E(48, 32), E(16, 32), E(28, 24), E(49, 33),
+    E(22, 30), E(34, 40), E(31, 47), E(38, 39), E(39, 37), E(44, 32),
+    E(11, 33), E(35, 24), E(30, 23), E(33, 45), E(33, 47), E(36, 25),
+    E(31, 59), E(40, 34), E(25, 27), E(27, 27), E(38, 26), E(31, 40),
+    E(36, 37), E(28, 27), E(32, 31), E(31, 31), E(34, 35), E(32, 37),
+    E(34, 34), E(24, 31), E(39, 34), E(34, 37), E(27, 33), E(28, 35),
+    E(31, 61), E(36, 26), E(25, 39), E(45, 33), E(25, 31), E(35, 34),
+    E( 3, 31), E(34, 22), E(38, 37), E(39, 25), E(40, 30), E(38, 25),
+    E( 1, 32), E(25, 30), E(39, 35), E(30, 38), E(37, 29), E(32, 40),
+    E(28, 28), E(29, 38), E(32,  5), E(37, 34), E(31, 27), E(35, 27),
+    E(27, 29), E(23, 27), E(28, 23), E(33, 42), E(46, 32), E(15, 32),
+    E(13, 33), E(24, 36), E(41, 37), E(24, 37), E(34, 17), E(34, 18),
+    E(30, 22), E(26, 40), E(24, 38), E(14, 32), E(60, 31), E(21, 35),
+    E(29, 24), E(39, 17), E(23, 25), E(35, 17), E(37, 23), E(30, 24),
+    E(32, 61), E(19, 31), E(24, 34), E(25, 25), E(26, 38), E(45, 32),
+    E(38, 35), E(36, 29), E( 3, 32), E(26, 29), E(36, 36), E(30, 31),
+    E(59, 32), E(28, 36), E(63, 32), E(26, 32), E(38, 34), E(63, 33),
+    E(31, 20), E(27, 11), E(20, 32), E(24, 30), E(33,  3), E(37, 35),
+    E(28, 38), E(39, 30), E(32,  3), E(31, 26), E(39, 31), E(35, 29),
+    E(31, 30), E(32, 38), E(23, 33), E(23,  3), E( 9, 29), E(25, 40),
+    E( 9, 31), E(29, 53), E(20, 30), E(30, 17), E(30, 20), E(42, 37),
+    E(18, 31), E(28, 42), E(25, 47), E(28, 47), E(28, 54), E(21, 38),
+    E(29,  9), E(43, 34), E(29, 13), E(43, 37), E(26, 21), E(44, 25),
+    E(44, 27), E(21, 43), E(38, 42), E(35, 30), E(21, 45), E(24, 40),
+    E(45, 25), E(45, 27), E(35, 46), E(39, 22), E(22, 25), E(35, 53),
+    E(36, 20), E(34,  2), E(34, 14), E(45, 39), E(34, 15), E(29, 22),
+    E(31, 44), E(46, 34), E(25, 21), E(46, 38), E(16, 33), E(17, 27),
+    E(31, 48), E(20, 34), E(32, 52), E(47, 35), E(47, 47), E(47, 49),
+    E(32, 54), E(49,  2), E(49, 13), E(49, 23), E(31, 52), E( 1, 29),
+    E(27, 45), E(28, 22), E(39, 49), E(39, 54), E(21, 21), E(36, 40),
+    E(23, 42), E(51, 31), E( 2, 30), E(40, 29), E(51, 34), E(32,  0),
+    E(53, 25), E(24, 23), E(30, 51), E(24, 24), E(30, 59), E(21, 28),
+    E(40, 38), E(57, 29), E(57, 31), E(31,  2), E(41, 13), E(58, 31),
+    E(32,  8), E(12, 31), E( 4, 33), E(32, 12), E(34, 45), E(59, 41),
+    E(31,  7), E(32, 14), E(13, 30), E( 9, 25), E(35, 18), E(26, 43),
+    E(35, 20), E(37, 43), E(61, 35), E(37, 44), E(63,  1), E(26, 49),
+    E(29, 42), E(41, 42), E(45, 34), E(33, 51), E(34, 42), E(47, 31),
+    E(41, 36), E(22, 36), E(42, 29), E(35, 21), E(35, 22), E(23, 37),
+    E(32, 44), E(35, 43), E(43, 25), E(32, 47), E( 7, 33), E(31, 45),
+    E(41, 27), E(20, 31), E(31, 58), E(16, 31), E(13, 32), E(63, 31),
+    E(25, 38), E(30, 43), E(33, 61), E(31, 43), E(41, 29), E(34, 23),
+    E(39, 28), E(47, 32), E(40, 28), E(58, 32), E(59, 31), E(41, 34),
+    E(33,  5), E( 3, 33), E(17, 32), E(61, 33), E(42, 33), E(21, 31),
+    E(26, 35), E(35, 26), E(29, 36), E(26, 31), E(33, 38), E(30, 30),
+    E(31, 32), E(33, 31), E(37, 30), E(31, 23), E(30, 42), E(26, 37),
+    E(33, 26), E(27, 35), E(31, 36), E(27, 34), E(35, 37), E(29, 23),
+    E(36, 38), E(61, 31), E(33, 40), E(37, 26), E(62, 32), E(35, 38),
+    E(57, 32), E(31, 41), E(34, 26), E(34, 25), E(40, 32), E(35, 35),
+    E(29, 34), E(32, 25), E(29, 30), E(28, 26), E(38, 18), E(23, 41),
+    E(32, 20), E(29, 28), E(29, 25), E(28, 37), E(42, 32), E(33, 39),
+    E(32, 26), E(31, 25), E(30, 40), E(35, 47), E(30, 45), E(30, 54),
+    E(31,  1), E(32, 23), E(33, 25), E(42, 26), E(47, 34), E(39, 38),
+    E(38, 14), E(40, 22), E(40, 24), E(51, 33), E(55, 34), E(56, 32),
+    E(18, 32), E(21, 37), E(39, 21), E(39, 23), E(33, 49), E(17, 35),
+    E(41, 23), E(23, 28), E(24, 39), E(43, 39), E(25, 23), E(31, 55),
+    E(20, 33), E(25, 37), E(38, 38), E(25, 36), E(27, 37), E(29, 37),
+    E( 4, 32), E(39, 33), E( 5, 32), E(28, 29), E(38, 24), E(17, 29),
+    E(35, 39), E( 2, 32), E(38, 36), E(30, 29), E(29, 35), E(32, 34),
+    E(32, 33), E(32, 32),
+};
+
+const uint8_t ff_msmp4_mv_table0_lens[MSMPEG4_MV_TABLES_NB_ELEMS] = {
+     8, 12, 12, 13, 15, 15, 15, 15, 12, 15, 15, 15, 15, 14, 14, 14, 14, 14,
+    14, 11,  9,  8, 13, 14, 14, 14, 14, 13, 11, 12, 12, 12, 12, 10, 13, 13,
+    12, 12, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,  6,  6,  7,
+     8,  8, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 12, 11, 10,
+     9,  9, 11, 13, 13, 14, 14, 13, 13, 13, 13, 13, 12, 16, 16, 15, 15, 15,
+    15, 15, 15, 15,  9, 10, 15, 15, 15, 15, 15, 15, 14, 14, 14, 13, 11,  9,
+     8, 10, 11, 12, 14, 14, 13, 10, 13, 14, 14, 14, 14, 13, 11,  7,  5,  8,
+     9, 11, 12, 13, 16, 16, 16, 16, 16, 16, 16, 16, 11, 12, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8, 10, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    14, 14, 11, 12, 13, 13, 11, 12, 13, 14, 14,  9,  9,  8, 10, 13, 13, 13,
+    14, 16, 17, 17, 15, 11, 10, 10,  8,  9, 11, 13, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    14, 14, 12, 12,  8,  7, 11, 14, 14, 14, 14, 13, 13, 10, 10, 13, 14, 14,
+    14, 14, 14, 14, 14, 14, 13, 12,  8,  9, 11, 11, 14, 17, 17, 17, 17, 17,
+    17, 17, 17, 13, 13, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 11, 11, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14,
+    14, 14,  4,  5, 10, 10,  9, 13, 13, 12, 11, 12, 14, 14, 14, 14, 11, 10,
+    14, 14, 14, 14, 14, 14, 13, 13, 13, 12, 12, 13, 13, 13, 13, 12, 11, 12,
+    12, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 13, 12, 12, 13, 13,  8,
+    12, 13, 13, 11, 12, 15, 16, 16, 14, 14, 14, 12, 13, 13, 12, 12, 11, 10,
+     8, 11, 13, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 10, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13,
+    13, 13, 12, 12, 12,  9,  4,  5, 12, 13, 14, 14, 12, 12, 10, 12, 12, 14,
+    14, 14, 14, 14, 14, 13, 13, 13, 12, 12, 12, 10, 10, 10, 10, 14, 16, 16,
+    15, 13, 13, 13, 12, 12, 11, 11, 13, 15, 15, 15, 15, 12, 11, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 14, 14, 14, 13, 12, 12, 11, 12, 12, 14, 14, 13, 13, 13, 10, 10,  6,
+     4,  1,
+};
+
+/* motion vector table 1 */
+
+const uint16_t ff_msmp4_mv_table1[MSMPEG4_MV_TABLES_NB_ELEMS] = {
+    E(32, 32), E(42, 39), E(35, 53), E( 3, 28), E(51, 39), E(35, 57),
+    E(16, 46), E(35, 10), E(30, 52), E(63, 27), E(57, 35), E(39, 42),
+    E(39, 45), E(25, 59), E(35, 15), E(51, 34), E(31,  9), E(48, 34),
+    E( 2, 33), E( 6, 31), E(34, 49), E(30, 43), E(28, 42), E(33, 51),
+    E(39, 27), E(33, 42), E(37, 25), E(60, 34), E(38, 60), E( 9, 38),
+    E(38, 33), E(51, 32), E(30, 22), E(33, 23), E(32, 24), E(32, 26),
+    E(32, 29), E(40, 29), E(27, 23), E(46, 29), E(31, 14), E( 9, 30),
+    E(35, 45), E(29, 49), E(31, 11), E(47, 32), E(32, 48), E(39, 35),
+    E(37, 31), E(25, 34), E(30, 25), E(24, 30), E(35, 25), E(61, 32),
+    E(39, 24), E(16, 24), E(36, 23), E(50, 32), E(32, 45), E(19, 33),
+    E(59, 33), E(29, 25), E(30, 36), E(63, 33), E(45, 39), E(31, 12),
+    E(60, 29), E(14, 24), E(34,  0), E(42, 20), E(24, 16), E( 0, 28),
+    E(37, 43), E(18, 35), E(61, 28), E(57,  1), E(30, 30), E(31, 33),
+    E(31, 35), E(26, 32), E(37, 49), E(28,  4), E(53, 21), E(20, 42),
+    E(46, 39), E(14, 29), E(47,  3), E(38, 44), E(38, 21), E(38, 53),
+    E( 9, 55), E(34, 11), E(39,  5), E(43,  3), E(17, 39), E(39, 53),
+    E(59, 28), E( 5, 25), E(27, 19), E( 0, 34), E(55, 31), E(46, 28),
+    E(19, 35), E(37, 41), E(62, 30), E(34, 44), E(30, 18), E(16, 29),
+    E(19, 34), E(49, 35), E(30, 41), E(25, 27), E(43, 32), E( 4, 32),
+    E(34, 25), E(27, 25), E(33, 19), E(32, 41), E(25, 29), E(62, 31),
+    E(24, 35), E(32, 38), E(30, 32), E(34, 33), E(34, 29), E(41, 36),
+    E(12, 28), E(27, 21), E(41, 25), E(39, 26), E(30, 24), E(37, 21),
+    E(14, 31), E( 5, 30), E(13, 34), E(35, 19), E(55, 34), E(30, 44),
+    E(40, 36), E(40, 38), E(42, 25), E(31, 19), E(27, 36), E(30, 42),
+    E(37, 27), E(31, 17), E(21, 33), E(45, 31), E(32, 44), E(39, 28),
+    E(20, 33), E(46, 33), E(47, 31), E(35, 23), E(19, 31), E(33, 30),
+    E(28, 32), E(36, 32), E(33, 32), E(34, 40), E( 8, 31), E(20, 28),
+    E(35, 39), E(43, 33), E(25, 23), E(45, 37), E(35,  3), E(33, 55),
+    E(35, 29), E(36, 41), E(54, 30), E(38, 22), E(27, 41), E(37, 24),
+    E(62, 33), E(40, 26), E(15, 35), E(59, 35), E(49, 30), E( 1, 33),
+    E(40, 33), E(32,  0), E(29, 37), E(32,  2), E( 3, 32), E(42, 32),
+    E(49, 31), E(21, 34), E(21, 30), E(14, 32), E( 5, 31), E(28, 36),
+    E(31, 21), E(51, 33), E(31, 55), E(29, 51), E(31, 38), E(62, 32),
+    E(34, 47), E(34, 48), E(39, 38), E(24, 24), E(32, 30), E(29, 32),
+    E(30, 34), E(35, 34), E(29, 15), E(25, 21), E(26, 36), E(33, 61),
+    E(31, 26), E(32, 34), E(30, 33), E(27, 31), E(23, 35), E(29, 50),
+    E(21, 25), E(31, 47), E(36, 37), E(35, 41), E(58, 31), E(29, 23),
+    E(29, 41), E(21, 29), E(20, 30), E(33, 24), E(32, 22), E(42, 35),
+    E(29, 46), E(10, 30), E(61, 29), E(33, 10), E(49, 34), E(35, 42),
+    E(34, 45), E( 3, 29), E(38, 42), E(39, 22), E(29,  3), E( 7, 33),
+    E(41, 27), E( 1, 34), E(30, 31), E(13, 32), E(28, 25), E(12, 32),
+    E(40, 28), E(25, 35), E(31, 61), E(28, 31), E(29, 34), E(34, 35),
+    E(28, 33), E(26, 33), E(35,  1), E( 4, 34), E(31, 58), E(33,  2),
+    E(39, 37), E(21, 31), E(60, 33), E(23, 28), E(15, 34), E(38, 30),
+    E(37, 33), E(34, 34), E(31, 28), E(23, 36), E(11, 35), E(37, 23),
+    E(28, 23), E(35, 13), E(30, 58), E(30,  3), E(24, 26), E( 1, 63),
+    E(43, 25), E(56, 31), E( 8, 34), E(32, 14), E(44, 33), E(32, 35),
+    E(26, 31), E(31,  5), E(33, 49), E(31, 20), E(36, 33), E(32,  1),
+    E(27, 33), E(31, 34), E(31, 30), E(28, 39), E(37, 36), E(43, 31),
+    E(31, 59), E(34, 39), E(31, 27), E(34, 61), E(42, 38), E(24, 39),
+    E(45, 25), E(30, 61), E(20, 29), E(23, 37), E( 8, 30), E(38, 41),
+    E(22, 26), E(33, 48), E(17, 28), E(52, 33), E(34, 50), E(29, 21),
+    E(32,  9), E(30, 23), E(49, 33), E(43, 35), E(28, 24), E(39, 39),
+    E(33, 21), E(33, 34), E(32, 28), E(30, 29), E(25, 37), E(32, 11),
+    E(48, 33), E( 2, 30), E(15, 31), E(20, 31), E(22, 35), E(53, 30),
+    E(43, 37), E(44, 29), E(29, 30), E( 1, 29), E(27, 40), E(31,  6),
+    E(41, 39), E(43, 28), E(41, 28), E(30, 19), E(31,  8), E(36, 22),
+    E(30, 45), E(25, 28), E(31, 51), E(28, 40), E(32, 25), E(21, 35),
+    E(24, 29), E(25, 25), E(15, 33), E(20, 32), E(40, 30), E(39, 34),
+    E(31, 46), E(17, 35), E(22, 32), E(39, 31), E(33, 28), E(29, 29),
+    E(21, 32), E(37, 37), E(43, 30), E(18, 30), E(32,  8), E(37, 32),
+    E(31, 32), E(31, 22), E(31, 40), E(57, 32), E(38, 29), E(33, 37),
+    E(35, 35), E(33, 63), E( 5, 34), E(55, 35), E(31, 10), E(33, 58),
+    E(30, 17), E(40, 37), E(23, 39), E(15, 30), E(29, 18), E(34, 54),
+    E(34, 14), E(59, 29), E(34, 16), E(30, 59), E(11, 30), E(13, 35),
+    E(38, 23), E( 5, 35), E(24, 28), E(33, 15), E(37, 30), E(25, 31),
+    E(36, 40), E(13, 33), E(33, 45), E(31, 49), E(32, 16), E(42, 31),
+    E(25, 33), E(32, 36), E(39, 25), E(11, 32), E(33,  5), E(61, 31),
+    E(63, 32), E(31,  4), E( 0, 30), E(30, 47), E(32, 62), E(37, 29),
+    E(31,  2), E(42, 36), E( 5, 29), E(30, 55), E(29, 20), E(29, 35),
+    E(34, 12), E(10, 31), E(44, 35), E(30, 14), E(63, 29), E(35, 18),
+    E(12, 34), E( 3, 34), E(33, 47), E(32, 51), E(39, 36), E(37, 39),
+    E(32, 53), E(32, 10), E(29, 24), E(17, 29), E(32, 20), E(29, 39),
+    E(33, 27), E(31, 36), E(32, 27), E(31,  3), E(30, 39), E(44, 32),
+    E(31, 37), E( 5, 33), E(44, 30), E(46, 31), E(32, 40), E(36, 25),
+    E(35, 40), E(26, 38), E(37, 38), E(33, 38), E(25, 32), E( 2, 32),
+    E(58, 33), E(26, 24), E(15, 29), E(31,  1), E(31, 25), E(17, 26),
+    E(25, 22), E(34,  2), E(43, 27), E(39, 23), E(34,  8), E(56, 30),
+    E(29, 55), E(23, 38), E(30, 60), E(12, 31), E(30,  4), E(10, 34),
+    E(35, 49), E( 9, 34), E(24, 27), E(58, 34), E(10, 33), E(12, 30),
+    E(54, 31), E(32, 56), E(34, 23), E(38, 27), E( 8, 32), E(22, 31),
+    E(34, 24), E(36, 36), E(17, 32), E(38, 36), E(33, 25), E(32, 33),
+    E(32, 31), E(58, 32), E(38, 28), E(38, 37), E(38, 26), E(22, 29),
+    E(29, 43), E(32, 61), E(25, 36), E(16, 33), E(35, 24), E(32, 55),
+    E(35, 43), E(33,  9), E(43, 29), E(18, 34), E(46, 34), E(38, 24),
+    E(35, 26), E(32,  6), E(60, 31), E( 1, 32), E(23, 33), E(30, 35),
+    E(27, 32), E(33, 26), E(41, 31), E(35, 38), E(33, 54), E(37, 42),
+    E(20, 35), E(41, 38), E(35, 46), E(29, 44), E(18, 26), E(61, 27),
+    E(30,  9), E(40, 39), E(24, 25), E(39, 21), E(39, 32), E(53, 29),
+    E(62, 28), E(26, 42), E(29, 13), E(33,  0), E(34,  5), E(53, 34),
+    E(49, 37), E(21, 28), E(27, 24), E(11, 29), E(63, 63), E(50, 33),
+    E(33, 18), E(18, 33), E(53, 33), E(60, 30), E(13, 31), E(32, 50),
+    E(36, 24), E(24, 34), E(27, 34), E(32, 58), E(38, 35), E(35, 28),
+    E(16, 32), E(33, 60), E(51, 30), E(32,  4), E(36, 39), E(43, 34),
+    E(45, 30), E(27, 39), E(45, 33), E(42, 33), E(30, 38), E(32, 17),
+    E(31, 43), E(20, 26), E(26, 22), E(23, 27), E( 7, 29), E(13, 25),
+    E( 6, 33), E(47, 25), E(29, 61), E(30,  0), E( 9, 35), E(51, 25),
+    E(22, 36), E(34, 15), E(21, 27), E(25, 40), E(33, 53), E(32, 37),
+    E(56, 33), E(57,  3), E(30, 10), E(38, 16), E(51, 37), E(51, 38),
+    E(38, 18), E(63, 30), E(28, 46), E(40, 27), E(35,  9), E(33,  6),
+    E(42, 28), E(29, 22), E(24, 38), E(30,  2), E(25, 26), E(31, 63),
+    E(52, 32), E(31, 57), E(29, 26), E(35, 31), E(32,  5), E(41, 32),
+    E(35, 21), E(38, 39), E( 4, 31), E(30, 40), E(17, 31), E( 9, 33),
+    E(22, 28), E(34, 18), E( 4, 30), E(17, 34), E(28, 22), E(55, 33),
+    E(42, 29), E(40, 34), E(46, 32), E(38, 34), E(48, 32), E(63, 31),
+    E(23, 31), E(39, 33), E(33,  3), E( 3, 31), E(18, 29), E(33, 62),
+    E(33,  8), E(24, 42), E(58, 28), E(58, 29), E(34,  3), E(49, 25),
+    E(29, 16), E(43, 26), E( 4, 29), E( 1, 35), E( 4, 28), E(42, 27),
+    E(35, 51), E(35, 61), E(30, 48), E(17, 37), E( 5,  9), E(56, 34),
+    E(25, 41), E(17, 30), E(20, 34), E(47, 35), E(34, 21), E(33, 13),
+    E(16, 34), E(40, 35), E(32, 19), E(28, 35), E(33, 36), E(36, 30),
+    E(25, 39), E(16, 30), E(42, 30), E(19, 32), E(30, 46), E(53, 32),
+    E(32, 23), E(29, 42), E(10, 32), E(11, 31), E(14, 33), E(34, 38),
+    E(32, 39), E(41, 29), E(26, 26), E(61,  7), E(25, 49), E(22, 33),
+    E(28, 38), E(36, 38), E(45, 32), E(34, 27), E(28, 30), E(34, 28),
+    E(33, 59), E(37, 45), E(36, 20), E(55, 29), E(28, 21), E(35,  5),
+    E(29,  5), E(50, 29), E(48, 28), E(52, 34), E( 2, 29), E(42, 24),
+    E(34, 10), E(40, 24), E(46, 35), E(46, 36), E(43, 38), E(33, 11),
+    E( 4, 33), E(33, 40), E(32, 18), E(36, 34), E(27, 35), E(35, 22),
+    E(35, 55), E(29, 11), E(29, 38), E(41, 33), E(29, 28), E( 7, 32),
+    E(44, 31), E(26, 25), E(39, 29), E(32,  3), E(16, 31), E(31, 53),
+    E(26, 27), E(34, 43), E(38, 25), E(29, 40), E(41, 35), E(35, 27),
+    E(36, 29), E(38, 31), E(29, 27), E(32, 43), E(27, 29), E(30, 37),
+    E(24, 32), ESCAPE,    E(32, 63), E(24, 31), E(42, 34), E(48, 36),
+    E(20, 38), E(29, 53), E(31, 54), E(61, 33), E(41, 26), E( 7, 30),
+    E(30, 49), E(35, 20), E(19, 27), E(14, 30), E(21, 39), E( 8, 33),
+    E(39, 41), E(39, 49), E(40, 22), E(46, 38), E(55, 38), E(34,  4),
+    E( 6, 30), E(30,  8), E(34,  9), E(37,  3), E(25, 24), E(37, 22),
+    E(33, 50), E(22, 37), E(44, 36), E(52, 31), E(17, 27), E(35,  2),
+    E(31, 50), E(30, 21), E(24, 36), E(35, 33), E(22, 38), E(61, 30),
+    E(32, 12), E( 9, 31), E(45, 34), E(34, 20), E(31, 15), E(19, 29),
+    E( 9, 32), E(31, 62), E(18, 32), E(33, 17), E(33,  1), E(37, 34),
+    E(32, 15), E(22, 30), E(26, 30), E(59, 31), E(29,  9), E(36, 42),
+    E(46, 30), E(31, 13), E(35, 17), E(54, 32), E(29, 19), E(57, 31),
+    E(30, 20), E(50, 31), E( 3, 30), E(31,  7), E(63,  1), E(34, 17),
+    E(47, 34), E(41, 37), E(35, 63), E(40, 25), E(25, 30), E(37, 28),
+    E( 1, 31), E(26, 28), E(22, 34), E(35, 37), E(34, 32), E(60, 32),
+    E(27, 30), E(37, 19), E(28, 44), E(30,  1), E(50, 28), E(14, 28),
+    E(28, 48), E(55, 30), E( 6, 34), E(23, 41), E(19, 41), E(14, 38),
+    E(30, 12), E( 3, 27), E(30, 15), E(28,  0), E(28, 16), E(61, 34),
+    E(61, 35), E(47, 38), E(45, 28), E(48, 29), E(40, 40), E(40, 42),
+    E(34, 51), E(34, 52), E(25, 45), E(30, 54), E(29, 59), E(35, 59),
+    E( 4, 42), E(51, 31), E(18, 31), E(31, 44), E(14, 34), E(37, 26),
+    E(36, 35), E(37, 35), E(30, 26), E(31, 41), E(31, 39), E(23, 32),
+    E(23, 29), E(38, 40), E(31, 16), E(24, 37), E(32, 52), E(31, 48),
+    E(50, 30), E(28, 34), E(32, 21), E(33, 20), E(31, 18), E(49, 32),
+    E(34, 37), E(33, 29), E(31, 29), E(40, 31), E( 3, 33), E(28, 27),
+    E(26, 35), E(28, 28), E(33, 39), E(34, 26), E(26, 44), E(53, 37),
+    E(50, 26), E(26, 46), E(41, 24), E(27, 15), E(59, 39), E(27, 22),
+    E(29, 31), E(38, 46), E(39, 19), E( 3, 35), E(50, 38), E(43, 17),
+    E(47, 37), E(23, 23), E(33, 52), E(55, 55), E(35, 50), E(21, 37),
+    E(23, 26), E(35, 11), E(61, 37), E(33, 12), E(46, 24), E(52, 30),
+    E(35, 16), E(34, 13), E(24, 22), E(30, 13), E(43, 36), E(16, 35),
+    E(37, 40), E(21, 41), E( 2, 34), E(54, 33), E(27, 38), E( 9, 29),
+    E(33,  7), E(23, 25), E(19, 30), E(32, 54), E(29, 45), E(29, 47),
+    E(33, 46), E(28, 41), E(27, 27), E(32, 49), E(39, 30), E(33, 31),
+    E(59, 32), E(32, 42), E(33, 22), E(47, 29), E(49, 29), E(32, 59),
+    E(40, 32), E(31, 24), E(27, 37), E(23, 34), E(28, 37), E(36, 26),
+    E(32,  7), E(38, 32), E(29, 33), E(15, 32), E(30, 16), E(47, 30),
+    E(33, 14), E(27, 26), E(25, 38), E(54, 34), E(44, 34), E(45, 29),
+    E(50, 34), E(58, 30), E(51, 29), E(48, 30), E(33, 57), E(59, 30),
+    E( 6, 32), E(34, 22), E(27, 28), E(31, 45), E(30, 27), E(24, 33),
+    E(26, 29), E(33,  4), E(24, 41), E(45, 26), E(23, 30), E( 2, 31),
+    E(28, 29), E(35, 36), E(30, 28), E(34, 53), E(30, 51), E(55,  5),
+    E(55, 21), E( 1, 30), E(29,  2), E(29, 63), E(26, 41), E(28, 20),
+    E(25,  1), E(31, 56), E(36, 21), E(22, 24), E(17, 25), E(30,  5),
+    E(52, 28), E( 2, 35), E(44, 26), E(44, 28), E(57, 30), E(26, 18),
+    E(62, 29), E(41, 23), E(39, 40), E(57, 34), E(26, 20), E(46, 42),
+    E(49, 39), E(11, 34), E(16, 28), E(19, 61), E( 5, 38), E(34, 46),
+    E(57, 33), E(13, 29), E(26, 39), E(33, 44), E(13, 30), E(48, 31),
+    E(30, 50), E(11, 33), E( 7, 31), E(56, 32), E(34, 19), E(33, 43),
+    E(32, 46), E(34, 41), E(41, 30), E(36, 28), E(34, 31), E(33, 33),
+    E(33, 35), E(26, 34), E(28, 26), E(32, 13), E(41, 34), E( 0, 32),
+    E(32, 57), E(35, 30), E(35, 32), E(55, 32), E(26, 40), E( 0, 31),
+    E(26, 37), E(35, 47), E( 1,  1), E(51, 35), E(33, 16), E(53, 31),
+    E(31,  0), E(45, 35), E(12, 33), E(29,  1), E(29, 17), E(36, 27),
+    E( 5, 32), E(38, 38), E(59, 27), E(38, 62), E(39,  9), E(58, 36),
+    E(34, 42), E(31, 42), E(36, 31), E(47, 33), E(32, 47), E(17, 33),
+    E(31, 60), E(31, 23), E(33, 41), E(34, 30), E(34, 36), E(32, 60),
+    E(29, 36), E(38, 17), E(25,  9), E(49, 49), E(50, 24), E(22, 25),
+    E(28, 54), E(59, 34), E( 9, 39), E(59, 37), E( 7,  3), E(28,  1),
+    E(55, 25), E(17, 38), E( 4, 38), E(35, 44), E(50, 35), E(21, 36),
+    E(29, 12), E(44, 60), E(47, 36), E(18, 38), E(24, 40), E(19, 25),
+    E(25, 43), E(31, 31),
+};
+
+const uint8_t ff_msmp4_mv_table1_lens[MSMPEG4_MV_TABLES_NB_ELEMS] = {
+     2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 13, 13, 13, 14, 15, 15, 11, 13, 13, 12, 11, 10,
+     8, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 12, 10, 12, 12, 12, 12, 10,
+    14, 15, 15, 13, 13, 13, 12, 12, 11, 13, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15,  9,  6,  9, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 13, 13, 11, 11, 12, 13, 13, 11, 12, 13, 13, 10,  7,  8, 10, 14,
+    15, 15, 14, 14, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13,
+    13, 13, 12, 13, 13, 13, 13, 13, 13, 13, 13,  8,  9,  9,  5, 13, 14, 14,
+    12, 12, 14, 14, 14, 14, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13,
+    12, 12, 12, 11, 10, 11, 13, 13, 13, 13, 12, 12, 12, 13, 14, 14, 11, 12,
+    14, 14, 14, 14,  7,  8,  9, 10, 14, 14, 13, 12, 11,  7,  8, 10, 13, 14,
+    14, 13, 13, 13, 13, 13, 13, 13, 13, 12, 11, 13, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14,  8, 13, 13, 13, 13, 12, 12, 10, 10, 10,
+    10, 11, 14, 14, 13, 13, 13, 12, 13, 14, 14, 11, 10,  9, 10, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13,  8, 11, 12, 13, 13, 10, 10,
+    10,  8,  8, 13, 13, 12, 12, 12, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 12,  8,  9, 10, 13, 13,
+    13, 13, 13, 13, 14, 14, 14, 14, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 13, 13, 13,  9, 13, 13, 13, 13, 12, 12, 12, 13, 13, 11, 10, 10, 10,
+    11, 13, 13, 13, 13,  9,  4, 12, 12, 12, 12, 10, 10, 13, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 11, 10,
+    13, 13, 13, 13, 12, 12, 10,  9, 13, 13, 12, 11, 11, 13, 14, 14, 12, 11,
+    12, 14, 14, 14, 14, 10, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13,
+    13, 13, 13, 13, 12, 12, 10, 10,  9, 11, 12, 12, 10, 12, 13, 13, 11, 13,
+    13, 13, 13, 11,  9, 11, 13, 14, 14, 12, 10, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 12,
+    12, 12, 12, 12, 10,  5,  4, 12, 12, 13, 13, 13, 13, 10, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 12, 12, 12, 11, 11, 10,  9, 11, 11, 12, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14,  9, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 12, 11, 12, 12, 11,
+    12, 13, 13, 10, 13, 13, 13, 13, 12, 12, 11, 12, 12, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,  9, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 12,  8, 10, 10,
+    13, 13, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 11, 12, 12,
+    11, 10, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 12, 11, 10, 10,
+    13, 13, 12, 12, 13, 13, 10, 13, 13, 13, 13, 11,  9, 12, 13, 14, 14, 12,
+    12, 12, 12, 11, 10, 10, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 13, 13, 12, 12, 10, 11, 13, 14, 14, 12, 11, 11, 12,
+    13, 13, 11,  9, 13, 13, 13, 13, 13, 13, 12, 11, 11, 10, 11, 11, 11, 11,
+    10,  4, 11, 11, 12, 14, 14, 14, 14, 11, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    13, 13, 13,  8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 11,
+    12, 12, 11, 11, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 14, 14, 11, 12, 12, 12, 12, 11,  6, 10, 11, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 11, 11, 11, 11, 10, 10,
+    12, 13, 13, 13, 13, 13, 13, 10, 10, 13, 13, 12, 11,  8,  8, 11, 11, 12,
+    12, 11, 10, 11, 14, 14, 14, 14, 14, 14, 14, 14,  8, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 11,  5,
+    10, 11, 12, 13, 13, 10, 10, 11, 12, 12, 12, 12, 11,  9,  8, 12, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11,
+    12, 13, 14, 14, 12, 12, 11, 11, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12,
+    12, 12, 12, 11,  7,  5,  8, 11, 12, 12, 12, 12, 11,  9,  7, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 10, 12, 14, 14, 14, 14,
+    12, 12,  9, 12, 12, 12, 12, 11, 11,  8, 10, 10, 11, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14,  4,
+};
+
 static const uint16_t table0_mv_code[1100] = {
     0x0001, 0x0003, 0x0005, 0x0007, 0x0003, 0x0008, 0x000c, 0x0001,
     0x0002, 0x001b, 0x0006, 0x000b, 0x0015, 0x0002, 0x000e, 0x000f,
@@ -1045,7 +1554,6 @@ static const uint8_t table0_mvy[1099] = {
     25, 27, 28,
 };
 
-/* motion vector table 1 */
 static const uint16_t table1_mv_code[1100] = {
     0x0000, 0x0007, 0x0009, 0x000f, 0x000a, 0x0011, 0x001a, 0x001c,
     0x0011, 0x0031, 0x0025, 0x002d, 0x002f, 0x006f, 0x0075, 0x0041,
diff --git a/libavcodec/msmpeg4data.h b/libavcodec/msmpeg4data.h
index 4921548d0c..2217b5ea48 100644
--- a/libavcodec/msmpeg4data.h
+++ b/libavcodec/msmpeg4data.h
@@ -58,7 +58,12 @@ extern const uint8_t ff_wmv1_y_dc_scale_table[32];
 extern const uint8_t ff_wmv1_c_dc_scale_table[32];
 extern const uint8_t ff_old_ff_y_dc_scale_table[32];
 
-#define MSMPEG4_MV_TABLES_NB_ELEMS 1099
+#define MSMPEG4_MV_TABLES_NB_ELEMS 1100
+/// The entries are of the form (8 << mvx) | mvy. Escape value is zero.
+extern const uint16_t ff_msmp4_mv_table0[MSMPEG4_MV_TABLES_NB_ELEMS];
+extern const uint8_t  ff_msmp4_mv_table0_lens[MSMPEG4_MV_TABLES_NB_ELEMS];
+extern const uint16_t ff_msmp4_mv_table1[MSMPEG4_MV_TABLES_NB_ELEMS];
+extern const uint8_t  ff_msmp4_mv_table1_lens[MSMPEG4_MV_TABLES_NB_ELEMS];
 extern MVTable ff_mv_tables[2];
 
 extern const uint8_t ff_v2_mb_type[8][2];
diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c
index aac12882d7..b60e218f6a 100644
--- a/libavcodec/msmpeg4dec.c
+++ b/libavcodec/msmpeg4dec.c
@@ -46,6 +46,8 @@
 
 #define DEFAULT_INTER_INDEX 3
 
+static const VLCElem *mv_tables[2];
+
 static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n,
                                     int32_t **dc_val_ptr)
 {
@@ -300,7 +302,6 @@ static av_cold void msmpeg4_decode_init_static(void)
 {
     static VLCElem vlc_buf[3714 + 2694 + 1636 + 2648 + 1532 + 2488];
     VLCInitState state = VLC_INIT_STATE(vlc_buf);
-    MVTable *mv;
 
     INIT_FIRST_VLC_RL(ff_rl_table[0], 642);
     INIT_FIRST_VLC_RL(ff_rl_table[1], 1104);
@@ -326,18 +327,16 @@ static av_cold void msmpeg4_decode_init_static(void)
                           &ff_v2_mb_type[0][1], 2, 1,
                           &ff_v2_mb_type[0][0], 2, 1, 0);
 
-    mv = &ff_mv_tables[0];
-    mv->vlc = ff_vlc_init_tables_sparse(&state, MV_VLC_BITS,
-                                        MSMPEG4_MV_TABLES_NB_ELEMS + 1,
-                                        mv->table_mv_bits, 1, 1,
-                                        mv->table_mv_code, 2, 2,
-                                        NULL, 0, 0, 0);
-    mv = &ff_mv_tables[1];
-    mv->vlc = ff_vlc_init_tables_sparse(&state, MV_VLC_BITS,
-                                        MSMPEG4_MV_TABLES_NB_ELEMS + 1,
-                                        mv->table_mv_bits, 1, 1,
-                                        mv->table_mv_code, 2, 2,
-                                        NULL, 0, 0, 0);
+    mv_tables[0] = ff_vlc_init_tables_from_lengths(&state, MV_VLC_BITS,
+                                                   MSMPEG4_MV_TABLES_NB_ELEMS,
+                                                   ff_msmp4_mv_table0_lens, 1,
+                                                   ff_msmp4_mv_table0, 2, 2,
+                                                   0, 0);
+    mv_tables[1] = ff_vlc_init_tables_from_lengths(&state, MV_VLC_BITS,
+                                                   MSMPEG4_MV_TABLES_NB_ELEMS,
+                                                   ff_msmp4_mv_table1_lens, 1,
+                                                   ff_msmp4_mv_table1, 2, 2,
+                                                   0, 0);
 
     for (unsigned i = 0; i < 4; i++) {
         ff_mb_non_intra_vlc[i] =
@@ -817,18 +816,17 @@ int ff_msmpeg4_decode_block(MpegEncContext * s, int16_t * block,
 
 void ff_msmpeg4_decode_motion(MpegEncContext *s, int *mx_ptr, int *my_ptr)
 {
-    const MVTable *mv;
-    int code, mx, my;
-
-    mv = &ff_mv_tables[s->mv_table_index];
+    const VLCElem *const mv_vlc = mv_tables[s->mv_table_index];
+    int sym, mx, my;
 
-    code = get_vlc2(&s->gb, mv->vlc, MV_VLC_BITS, 2);
-    if (code == MSMPEG4_MV_TABLES_NB_ELEMS) {
+    sym = get_vlc2(&s->gb, mv_vlc, MV_VLC_BITS, 2);
+    if (sym) {
+        mx = sym >> 8;
+        my = sym & 0xFF;
+    } else {
+        /* Escape */
         mx = get_bits(&s->gb, 6);
         my = get_bits(&s->gb, 6);
-    } else {
-        mx = mv->table_mvx[code];
-        my = mv->table_mvy[code];
     }
 
     mx += *mx_ptr - 32;
diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c
index b5da98f03b..5ce54a8d16 100644
--- a/libavcodec/msmpeg4enc.c
+++ b/libavcodec/msmpeg4enc.c
@@ -67,7 +67,7 @@ static av_cold void init_mv_table(const MVTable *tab, uint32_t mv_vector_table[4
         mv_vector_table[i] = (escape_code << 20) | (i << 8) | escape_length;
     }
 
-    for (i = 0; i < MSMPEG4_MV_TABLES_NB_ELEMS; i++) {
+    for (i = 0; i < MSMPEG4_MV_TABLES_NB_ELEMS - 1; i++) {
         x = tab->table_mvx[i];
         y = tab->table_mvy[i];
         mv_vector_table[(x << 6) | y] = (tab->table_mv_code[i] << 8) | tab->table_mv_bits[i];
-- 
2.45.2