Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: [FFmpeg-devel] [PATCH 2/5] avcodec/cfhddata: Avoid code tables
Date: Sat,  3 Sep 2022 22:35:56 +0200
Message-ID: <AS8P250MB0744BFF08A5649EA67066BC98F7D9@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <AS8P250MB07443029028BA4485D8478F18F7D9@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM>

cfhddata.c initializes a RL VLC table via code tables and
corresponding tables for length, run and level. code and length
tables are used to initialize a VLC, no symbol table is used.
Afterwards the symbols of said VLC are just the indices of
the corresponding entries in the code and length table that
were used for initialization; they can therefore be used
to get the matching level and run entry and they are not used
for anything else. Therefore one can just permute these tables
without changing the resulting RL VLC tables.

This commit does just this. It permutes these tables so that
the code tables are ordered from left to right in the resulting
tree and then switches to ff_init_vlc_from_lengths(), which
allows to remove the codes table altogether.

Given that these tables are constructed on the stack, this
also reduces stack usage, potentially fixing part of #9399.
(The size of the tables on the stack decreases from 4752 to
2640.)

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/cfhddata.c | 372 +++++++++++++-----------------------------
 1 file changed, 111 insertions(+), 261 deletions(-)

diff --git a/libavcodec/cfhddata.c b/libavcodec/cfhddata.c
index 212dccadb9..7c4b1454f3 100644
--- a/libavcodec/cfhddata.c
+++ b/libavcodec/cfhddata.c
@@ -27,248 +27,106 @@
 #define NB_VLC_TABLE_9   (71 + 3)
 #define NB_VLC_TABLE_18 (263 + 1)
 
-static const uint32_t table_9_vlc_bits[NB_VLC_TABLE_9] = {
-            0,       0x2,       0xc,      0x1a,
-         0x1d,      0x1e,      0x39,      0x3e,
-         0x37,      0x7e,      0x6c,      0xe2,
-         0xfe,      0xdb,      0xe0,     0x1c3,
-        0x1c6,     0x1ff,     0x1fe,     0x1b5,
-        0x369,     0x385,     0x71d,     0x6d0,
-        0x708,     0x71f,     0xe3d,     0xe39,
-        0xe13,     0xe12,    0x1c71,    0x1b45,
-       0x1b47,    0x3689,    0x38f2,    0x38e1,
-       0x38e0,    0x38f1,    0x3688,    0x6d1b,
-       0x71e0,    0x6d19,    0x71e7,    0xe3cd,
-       0xda35,    0xda30,    0xe3c3,   0x1b469,
-      0x1b462,   0x1c798,   0x1b463,   0x1c799,
-      0x38f08,   0x38f09,   0x38f0a,   0x6d1a0,
-      0x6d1a3,   0x6d1a1,   0xda345,   0xda344,
-      0xe3c2d,   0xe3c2f,   0xe3c2e,  0x38f0b2,
-     0x71e160,  0x71e162,  0x71e166,  0x71e161,
-     0xe3c2ce,  0xe3c2c6,  0xe3c2c7, 0x1C7859E,
-    0x38F0B3F, 0x38F0B3E,
+typedef struct CFHD_RL_ELEM {
+    uint16_t run;
+    uint8_t level;
+    uint8_t len;
+} CFHD_RL_ELEM;
+
+static const CFHD_RL_ELEM table_9_vlc[NB_VLC_TABLE_9] = {
+    {   1,   0,  1 }, {   1,   1,  2 }, {   1,   2,  4 }, {   1,   3,  5 },
+    {   1,   6,  7 }, {   1,  15, 11 }, {   1,  26, 14 }, {   1,  27, 14 },
+    {   1,  23, 13 }, {   1,  36, 16 }, {   1,  40, 17 }, {   1,  41, 17 },
+    {   1,  32, 15 }, {   1,  48, 19 }, {   1,  49, 19 }, {   1,  51, 20 },
+    {   1,  52, 20 }, {   1,  50, 19 }, {   1,  42, 17 }, {   1,  37, 16 },
+    {   1,  33, 15 }, {   1,  24, 13 }, {   1,  13, 10 }, {   1,  10,  9 },
+    {   1,   8,  8 }, {   1,   5,  6 }, {  80,   0,  8 }, {   1,  16, 11 },
+    {   1,  19, 12 }, {   1,  20, 12 }, {   1,  14, 10 }, { 120,   0,  9 },
+    { 320,   0,  8 }, {   1,  11,  9 }, {   1,  28, 14 }, {   1,  29, 14 },
+    {   1,  25, 13 }, {   1,  21, 12 }, {   1,  17, 11 }, {   1,  34, 15 },
+    {   1,  45, 18 }, {   1,  46, 18 }, {   1,  47, 18 }, {   1,  57, 23 },
+    {   1,  58, 23 }, {   1,  59, 23 }, {   1,  62, 24 }, {   1,  63, 24 },
+    {   1,  56, 22 }, {   1,  60, 23 }, {   1,  61, 24 }, {   1,  64, 25 },
+    {   0,  64, 26 }, {   1,  64, 26 }, {   1,  53, 20 }, {   1,  54, 20 },
+    {   1,  55, 20 }, {   1,  38, 16 }, {   1,  30, 14 }, {   1,  31, 14 },
+    {   1,  43, 17 }, {   1,  44, 17 }, {   1,  39, 16 }, {   1,  35, 15 },
+    {   1,  22, 12 }, {   1,  18, 11 }, {  32,   0,  6 }, {  12,   0,  5 },
+    {   1,   4,  5 }, { 160,   0,  6 }, {   1,   7,  7 }, {   1,   9,  8 },
+    { 100,   0,  9 }, {   1,  12,  9 },
 };
 
-static const uint8_t table_9_vlc_len[NB_VLC_TABLE_9] = {
-     1,    2,    4,    5,    5,    5,    6,    6,
-     6,    7,    7,    8,    8,    8,    8,    9,
-     9,    9,    9,    9,   10,   10,   11,   11,
-    11,   11,   12,   12,   12,   12,   13,   13,
-    13,   14,   14,   14,   14,   14,   14,   15,
-    15,   15,   15,   16,   16,   16,   16,   17,
-    17,   17,   17,   17,   18,   18,   18,   19,
-    19,   19,   20,   20,   20,   20,   20,   22,
-    23,   23,   23,   23,   24,   24,   24,   25,
-    26,   26,
-};
-
-static const uint16_t table_9_vlc_run[NB_VLC_TABLE_9] = {
-    1,    1,    1,    1,   12,    1,   32,  160,
-    1,    1,    1,  320,    1,    1,   80,  120,
-    1,    1,  100,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    1,    1,    1,    1,    1,    1,    1,
-    1,    0,
-};
-
-static const uint8_t table_9_vlc_level[NB_VLC_TABLE_9] = {
-     0,    1,    2,    3,    0,    4,    0,    0,
-     5,    7,    6,    0,    9,    8,    0,    0,
-    11,   12,    0,   10,   13,   14,   17,   15,
-    16,   18,   22,   21,   20,   19,   25,   23,
-    24,   27,   31,   29,   28,   30,   26,   33,
-    34,   32,   35,   39,   37,   36,   38,   42,
-    40,   43,   41,   44,   45,   46,   47,   48,
-    50,   49,   52,   51,   53,   55,   54,   56,
-    57,   59,   60,   58,   61,   62,   63,   64,
-    64,   64,
-};
-
-static const uint32_t table_18_vlc_bits[NB_VLC_TABLE_18] = {
-            0,       0x2,       0x7,      0x19,
-         0x30,      0x36,      0x6f,      0x63,
-         0x69,      0x6b,      0xd1,      0xd4,
-         0xdc,     0x189,     0x18a,     0x1a0,
-        0x1ab,     0x377,     0x310,     0x316,
-        0x343,     0x354,     0x375,     0x623,
-        0x684,     0x685,     0x6ab,     0x6ec,
-        0xddb,     0xc5c,     0xc5e,     0xc44,
-        0xd55,     0xdd1,     0xdd3,    0x1bb5,
-       0x188b,    0x18bb,    0x18bf,    0x1aa8,
-       0x1ba0,    0x1ba5,    0x1ba4,    0x3115,
-       0x3175,    0x317d,    0x3553,    0x3768,
-       0x6e87,    0x6ed3,    0x62e8,    0x62f8,
-       0x6228,    0x6aa4,    0x6e85,    0xc453,
-       0xc5d3,    0xc5f3,    0xdda4,    0xdd08,
-       0xdd0c,   0x1bb4b,   0x1bb4a,   0x18ba5,
-      0x18be5,   0x1aa95,   0x1aa97,   0x188a4,
-      0x1ba13,   0x31748,   0x317c8,   0x35528,
-      0x3552c,   0x37424,   0x37434,   0x37436,
-      0x62294,   0x62e92,   0x62f92,   0x6aa52,
-      0x6aa5a,   0x6e86a,   0x6e86e,   0x6e84a,
-      0xc452a,   0xc5d27,   0xc5f26,   0xd54a6,
-      0xd54b6,   0xdd096,   0xdd0d6,   0xdd0de,
-     0x188a56,  0x18ba4d,  0x18be4e,  0x18be4f,
-     0x1aa96e,  0x1ba12e,  0x1ba12f,  0x1ba1af,
-     0x1ba1bf,  0x37435d,  0x37437d,  0x317498,
-     0x35529c,  0x35529d,  0x3552de,  0x3552df,
-     0x62e933,  0x62295d,  0x6aa53d,  0x6aa53f,
-     0x6aa53e,  0x6e86b9,  0x6e86f8,  0xd54a79,
-     0xc5d265,  0xc452b8,  0xdd0d71,  0xd54a78,
-     0xdd0d70,  0xdd0df2,  0xdd0df3, 0x188a5f6,
-    0x188a5f5, 0x188a5f4, 0x188a5f3, 0x188a5f2,
-    0x188a5f1, 0x188a5f0, 0x188a5ef, 0x188a5ee,
-    0x188a5ed, 0x188a5aa, 0x188a5e3, 0x188a5df,
-    0x188a589, 0x188a5dd, 0x188a578, 0x188a5e0,
-    0x188a588, 0x188a5d6, 0x188a5db, 0x188a5e1,
-    0x188a587, 0x188a59a, 0x188a5c4, 0x188a5ec,
-    0x188a586, 0x188a573, 0x188a59c, 0x188a5c8,
-    0x188a5fb, 0x188a5a1, 0x188a5eb, 0x188a5a8,
-    0x188a584, 0x188a5d2, 0x188a599, 0x188a598,
-    0x188a583, 0x18ba4c9, 0x188a5d0, 0x188a594,
-    0x188a582, 0x188a5cb, 0x188a5d8, 0x188a5e7,
-    0x188a581, 0x188a5ea, 0x188a5a9, 0x188a5a6,
-    0x188a580, 0x188a5a0, 0x188a59d, 0x188a5c3,
-    0x188a57f, 0x188a5c0, 0x188a5de, 0x188a5d4,
-    0x188a57e, 0x188a5c2, 0x188a592, 0x188a5cd,
-    0x188a57d, 0x188a5a3, 0x188a5e8, 0x188a5a2,
-    0x188a57c, 0x188a58e, 0x188a5b3, 0x188a5b2,
-    0x188a5b1, 0x188a5b0, 0x188a5af, 0x188a5ae,
-    0x188a5ad, 0x188a5ac, 0x188a5ab, 0x188a5da,
-    0x188a5e4, 0x188a5e5, 0x188a5d9, 0x188a5b5,
-    0x188a5bc, 0x188a5bd, 0x188a5e9, 0x188a5cc,
-    0x188a585, 0x188a5d3, 0x188a5e2, 0x188a595,
-    0x188a596, 0x188a5b8, 0x188a590, 0x188a5c9,
-    0x188a5a4, 0x188a5e6, 0x188a5a5, 0x188a5ce,
-    0x188a5bf, 0x188a572, 0x188a59b, 0x188a5be,
-    0x188a5c7, 0x188a5ca, 0x188a5d5, 0x188a57b,
-    0x188a58d, 0x188a58c, 0x188a58b, 0x188a58a,
-    0x18ba4c8, 0x188a5c5, 0x188a5fa, 0x188a5bb,
-    0x188a5c1, 0x188a5cf, 0x188a5b9, 0x188a5b6,
-    0x188a597, 0x188a5fe, 0x188a5d7, 0x188a5ba,
-    0x188a591, 0x188a5c6, 0x188a5dc, 0x188a57a,
-    0x188a59f, 0x188a5f9, 0x188a5b4, 0x188a5a7,
-    0x188a58f, 0x188a5fd, 0x188a5b7, 0x188a593,
-    0x188a59e, 0x188a5f8, 0x188a5ff, 0x188a5fc,
-    0x188a579, 0x188a5f7, 0x3114ba2, 0x3114ba3,
-};
-
-static const uint8_t table_18_vlc_len[NB_VLC_TABLE_18] = {
-     1,  2,  3,  5,  6,  6,  7,  7,
-     7,  7,  8,  8,  8,  9,  9,  9,
-     9, 10, 10, 10, 10, 10, 10, 11,
-    11, 11, 11, 11, 12, 12, 12, 12,
-    12, 12, 12, 13, 13, 13, 13, 13,
-    13, 13, 13, 14, 14, 14, 14, 14,
-    15, 15, 15, 15, 15, 15, 15, 16,
-    16, 16, 16, 16, 16, 17, 17, 17,
-    17, 17, 17, 17, 17, 18, 18, 18,
-    18, 18, 18, 18, 19, 19, 19, 19,
-    19, 19, 19, 19, 20, 20, 20, 20,
-    20, 20, 20, 20, 21, 21, 21, 21,
-    21, 21, 21, 21, 21, 22, 22, 22,
-    22, 22, 22, 22, 23, 23, 23, 23,
-    23, 23, 23, 24, 24, 24, 24, 24,
-    24, 24, 24, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 26, 26,
-};
-
-static const uint16_t table_18_vlc_run[NB_VLC_TABLE_18] = {
-     1,    1,    1,    1,    1,    1,    1,    1,
-    12,    1,   20,    1,    1,    1,   32,    1,
-     1,    1,    1,    1,   60,    1,    1,    1,
-     1,  100,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,  180,    1,
-     1,  320,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    1,
-     1,    1,    1,    1,    1,    1,    1,    0,
-};
-
-static const uint8_t table_18_vlc_level[NB_VLC_TABLE_18] = {
-      0,    1,    2,    3,    4,    5,    8,    6,
-      0,    7,    0,    9,   10,   11,    0,   12,
-     13,   18,   14,   15,    0,   16,   17,   19,
-     20,    0,   21,   22,   29,   24,   25,   23,
-     26,   27,   28,   35,   30,   31,    0,   32,
-     33,    0,   34,   36,   37,   38,   39,   40,
-     46,   47,   42,   43,   41,   44,   45,   48,
-     49,   50,   53,   51,   52,   61,   60,   55,
-     56,   57,   58,   54,   59,   62,   63,   64,
-     65,   66,   67,   68,   69,   70,   71,   72,
-     73,   75,   76,   74,   77,   78,   79,   80,
-     81,   82,   83,   84,   85,   86,   87,   88,
-     89,   90,   91,   92,   93,   99,  100,   94,
-     95,   96,   97,   98,  102,  101,  103,  105,
-    104,  106,  107,  111,  109,  108,  113,  110,
-    112,  114,  115,  225,  189,  188,  203,  202,
-    197,  207,  169,  223,  159,  235,  152,  192,
-    179,  201,  172,  149,  178,  120,  219,  150,
-    127,  211,  125,  158,  247,  238,  163,  228,
-    183,  217,  168,  122,  128,  249,  187,  186,
-    136,  181,  255,  230,  135,  233,  222,  145,
-    134,  167,  248,  209,  243,  216,  164,  140,
-    157,  239,  191,  251,  156,  139,  242,  133,
-    162,  213,  165,  212,  227,  198,  236,  234,
-    117,  215,  124,  123,  254,  253,  148,  218,
-    146,  147,  224,  143,  184,  185,  166,  132,
-    129,  250,  151,  119,  193,  176,  245,  229,
-    206,  144,  208,  137,  241,  237,  190,  240,
-    131,  232,  252,  171,  205,  204,  118,  214,
-    180,  126,  182,  175,  141,  138,  177,  153,
-    194,  160,  121,  174,  246,  130,  200,  170,
-    221,  196,  142,  210,  199,  155,  154,  244,
-    220,  195,  161,  231,  173,  226,  116,  255,
+static const CFHD_RL_ELEM table_18_vlc[NB_VLC_TABLE_18] = {
+    {   1,   0,  1 }, {   1,   1,  2 }, {   1,   4,  6 }, {   1,  14, 10 },
+    {   1,  23, 12 }, {   1,  41, 15 }, {   1,  54, 17 }, {   1,  69, 19 },
+    {   1,  77, 20 }, {   1,  85, 21 }, {   1, 108, 24 }, {   1, 237, 25 },
+    {   1, 238, 25 }, {   1, 101, 23 }, {   1, 172, 25 }, {   1, 173, 25 },
+    {   1, 170, 25 }, {   1, 171, 25 }, {   1, 227, 25 }, {   1, 162, 25 },
+    {   1, 156, 25 }, {   1, 157, 25 }, {   1, 243, 25 }, {   1, 134, 25 },
+    {   1, 135, 25 }, {   1, 136, 25 }, {   1, 128, 25 }, {   1, 129, 25 },
+    {   1, 247, 25 }, {   1, 127, 25 }, {   1, 178, 25 }, {   1, 179, 25 },
+    {   1, 214, 25 }, {   1, 118, 25 }, {   1, 204, 25 }, {   1, 205, 25 },
+    {   1, 198, 25 }, {   1, 199, 25 }, {   1, 245, 25 }, {   1, 246, 25 },
+    {   1, 242, 25 }, {   1, 244, 25 }, {   1, 230, 25 }, {   1, 119, 25 },
+    {   1, 193, 25 }, {   1, 194, 25 }, {   1, 186, 25 }, {   1, 187, 25 },
+    {   1, 211, 25 }, {   1, 190, 25 }, {   1, 163, 25 }, {   1, 164, 25 },
+    {   1, 220, 25 }, {   1, 221, 25 }, {   1, 216, 25 }, {   1, 217, 25 },
+    {   1, 212, 25 }, {   1, 213, 25 }, {   1, 206, 25 }, {   1, 208, 25 },
+    {   1, 209, 25 }, {   1, 210, 25 }, {   1, 122, 25 }, {   1, 248, 25 },
+    {   1, 235, 25 }, {   1, 148, 25 }, {   1, 253, 25 }, {   1, 254, 25 },
+    {   1, 123, 25 }, {   1, 124, 25 }, {   1, 215, 25 }, {   1, 117, 25 },
+    {   1, 234, 25 }, {   1, 236, 25 }, {   1, 142, 25 }, {   1, 143, 25 },
+    {   1, 153, 25 }, {   1, 154, 25 }, {   1, 176, 25 }, {   1, 177, 25 },
+    {   1, 174, 25 }, {   1, 175, 25 }, {   1, 184, 25 }, {   1, 185, 25 },
+    {   1, 240, 25 }, {   1, 241, 25 }, {   1, 239, 25 }, {   1, 141, 25 },
+    {   1, 139, 25 }, {   1, 140, 25 }, {   1, 125, 25 }, {   1, 126, 25 },
+    {   1, 130, 25 }, {   1, 131, 25 }, {   1, 228, 25 }, {   1, 229, 25 },
+    {   1, 232, 25 }, {   1, 233, 25 }, {   1, 132, 25 }, {   1, 133, 25 },
+    {   1, 137, 25 }, {   1, 138, 25 }, {   1, 255, 25 }, {   1, 116, 26 },
+    {   0, 255, 26 }, {   1, 249, 25 }, {   1, 250, 25 }, {   1, 251, 25 },
+    {   1, 252, 25 }, {   1, 120, 25 }, {   1, 121, 25 }, {   1, 222, 25 },
+    {   1, 224, 25 }, {   1, 218, 25 }, {   1, 219, 25 }, {   1, 200, 25 },
+    {   1, 201, 25 }, {   1, 191, 25 }, {   1, 192, 25 }, {   1, 149, 25 },
+    {   1, 150, 25 }, {   1, 151, 25 }, {   1, 152, 25 }, {   1, 146, 25 },
+    {   1, 147, 25 }, {   1, 144, 25 }, {   1, 145, 25 }, {   1, 165, 25 },
+    {   1, 166, 25 }, {   1, 167, 25 }, {   1, 168, 25 }, {   1, 158, 25 },
+    {   1, 159, 25 }, {   1, 223, 25 }, {   1, 169, 25 }, {   1, 207, 25 },
+    {   1, 197, 25 }, {   1, 202, 25 }, {   1, 203, 25 }, {   1, 188, 25 },
+    {   1, 189, 25 }, {   1, 225, 25 }, {   1, 226, 25 }, {   1, 195, 25 },
+    {   1, 196, 25 }, {   1, 182, 25 }, {   1, 183, 25 }, {   1, 231, 25 },
+    {   1, 155, 25 }, {   1, 160, 25 }, {   1, 161, 25 }, {   1,  48, 16 },
+    {   1,  36, 14 }, {   1,  30, 13 }, {   1,  19, 11 }, {   1,  11,  9 },
+    {  32,   0,  9 }, {   1,  15, 10 }, {   1,  24, 12 }, {   1,  42, 15 },
+    {   1,  62, 18 }, {   1,  70, 19 }, {   1,  94, 22 }, {   1, 180, 25 },
+    {   1, 181, 25 }, {   1, 109, 24 }, {   1, 102, 23 }, {   1,  86, 21 },
+    {   1,  78, 20 }, {   1,  55, 17 }, {   1,  49, 16 }, {   1,  37, 14 },
+    {   1,  31, 13 }, {   1,  25, 12 }, {   1,  43, 15 }, {   1,  63, 18 },
+    {   1,  71, 19 }, {   1,  79, 20 }, {   1,  87, 21 }, {   1,  88, 21 },
+    {   1,  56, 17 }, {   1,  50, 16 }, {   1,  38, 14 }, { 180,   0, 13 },
+    {   1,   6,  7 }, {   1,   3,  5 }, {   1,  12,  9 }, {   1,  20, 11 },
+    { 100,   0, 11 }, {  60,   0, 10 }, {  20,   0,  8 }, {  12,   0,  7 },
+    {   1,   9,  8 }, {   1,  16, 10 }, {   1,  32, 13 }, {   1,  44, 15 },
+    {   1,  64, 18 }, {   1,  72, 19 }, {   1,  80, 20 }, {   1,  95, 22 },
+    {   1,  96, 22 }, {   1, 110, 24 }, {   1, 111, 24 }, {   1, 103, 23 },
+    {   1, 104, 23 }, {   1, 105, 23 }, {   1,  57, 17 }, {   1,  65, 18 },
+    {   1,  73, 19 }, {   1,  81, 20 }, {   1,  89, 21 }, {   1,  97, 22 },
+    {   1,  98, 22 }, {   1,  58, 17 }, {   1,  39, 14 }, {   1,  26, 12 },
+    {   1,  21, 11 }, {   1,  13,  9 }, {   1,   7,  7 }, {   1,   5,  6 },
+    {   1,  10,  8 }, {   1,  33, 13 }, {   1,  51, 16 }, {   1,  66, 18 },
+    {   1,  74, 19 }, {   1,  82, 20 }, {   1,  90, 21 }, {   1,  91, 21 },
+    {   1,  59, 17 }, {   1,  45, 15 }, {   1,  52, 16 }, {   1,  67, 18 },
+    {   1,  75, 19 }, {   1,  83, 20 }, {   1, 112, 24 }, {   1, 113, 24 },
+    {   1, 106, 23 }, {   1,  99, 22 }, {   1,  92, 21 }, {   1,  68, 18 },
+    {   1,  76, 19 }, {   1,  84, 20 }, {   1, 107, 23 }, {   1, 114, 24 },
+    {   1, 115, 24 }, {   1, 100, 22 }, {   1,  93, 21 }, {   1,  46, 15 },
+    {   1,  27, 12 }, {   1,  34, 13 }, { 320,   0, 13 }, {   1,  28, 12 },
+    {   1,  17, 10 }, {   1,  22, 11 }, {   1,  40, 14 }, {   1,  53, 16 },
+    {   1,  60, 17 }, {   1,  61, 17 }, {   1,  47, 15 }, {   1,  35, 13 },
+    {   1,  29, 12 }, {   1,  18, 10 }, {   1,   8,  7 }, {   1,   2,  3 },
 };
 
 av_cold int ff_cfhd_init_vlcs(CFHDContext *s)
 {
     int i, j, ret = 0;
-    uint32_t new_cfhd_vlc_bits[NB_VLC_TABLE_18 * 2];
     uint8_t  new_cfhd_vlc_len[NB_VLC_TABLE_18 * 2];
     uint16_t new_cfhd_vlc_run[NB_VLC_TABLE_18 * 2];
     int16_t  new_cfhd_vlc_level[NB_VLC_TABLE_18 * 2];
@@ -277,26 +135,22 @@ av_cold int ff_cfhd_init_vlcs(CFHDContext *s)
 
     /* Table 9 */
     for (i = 0, j = 0; i < NB_VLC_TABLE_9; i++, j++) {
-        new_cfhd_vlc_bits[j]  = table_9_vlc_bits[i];
-        new_cfhd_vlc_len[j]   = table_9_vlc_len[i];
-        new_cfhd_vlc_run[j]   = table_9_vlc_run[i];
-        new_cfhd_vlc_level[j] = table_9_vlc_level[i];
+        new_cfhd_vlc_len[j]   = table_9_vlc[i].len;
+        new_cfhd_vlc_run[j]   = table_9_vlc[i].run;
+        new_cfhd_vlc_level[j] = table_9_vlc[i].level;
 
         /* Don't include the zero level nor escape bits */
-        if (table_9_vlc_level[i] &&
-            new_cfhd_vlc_bits[j] != table_9_vlc_bits[NB_VLC_TABLE_9-1]) {
-            new_cfhd_vlc_bits[j] <<= 1;
+        if (table_9_vlc[i].level && table_9_vlc[i].run) {
             new_cfhd_vlc_len[j]++;
             j++;
-            new_cfhd_vlc_bits[j]  = (table_9_vlc_bits[i] << 1) | 1;
-            new_cfhd_vlc_len[j]   =  table_9_vlc_len[i] + 1;
-            new_cfhd_vlc_run[j]   =  table_9_vlc_run[i];
-            new_cfhd_vlc_level[j] = -table_9_vlc_level[i];
+            new_cfhd_vlc_len[j]   =  table_9_vlc[i].len + 1;
+            new_cfhd_vlc_run[j]   =  table_9_vlc[i].run;
+            new_cfhd_vlc_level[j] = -table_9_vlc[i].level;
         }
     }
 
-    ret = init_vlc(&s->vlc_9, VLC_BITS, j, new_cfhd_vlc_len,
-                   1, 1, new_cfhd_vlc_bits, 4, 4, 0);
+    ret = ff_init_vlc_from_lengths(&s->vlc_9, VLC_BITS, j, new_cfhd_vlc_len,
+                                   1, NULL, 0, 0, 0, 0, s->avctx);
     if (ret < 0)
         return ret;
     for (i = 0; i < s->vlc_9.table_size; i++) {
@@ -318,26 +172,22 @@ av_cold int ff_cfhd_init_vlcs(CFHDContext *s)
 
     /* Table 18 */
     for (i = 0, j = 0; i < NB_VLC_TABLE_18; i++, j++) {
-        new_cfhd_vlc_bits[j]  = table_18_vlc_bits[i];
-        new_cfhd_vlc_len[j]   = table_18_vlc_len[i];
-        new_cfhd_vlc_run[j]   = table_18_vlc_run[i];
-        new_cfhd_vlc_level[j] = table_18_vlc_level[i];
+        new_cfhd_vlc_len[j]   = table_18_vlc[i].len;
+        new_cfhd_vlc_run[j]   = table_18_vlc[i].run;
+        new_cfhd_vlc_level[j] = table_18_vlc[i].level;
 
         /* Don't include the zero level nor escape bits */
-        if (table_18_vlc_level[i] &&
-            new_cfhd_vlc_bits[j] != table_18_vlc_bits[NB_VLC_TABLE_18-1]) {
-            new_cfhd_vlc_bits[j] <<= 1;
+        if (table_18_vlc[i].level && table_18_vlc[i].run) {
             new_cfhd_vlc_len[j]++;
             j++;
-            new_cfhd_vlc_bits[j]  = (table_18_vlc_bits[i] << 1) | 1;
-            new_cfhd_vlc_len[j]   =  table_18_vlc_len[i] + 1;
-            new_cfhd_vlc_run[j]   =  table_18_vlc_run[i];
-            new_cfhd_vlc_level[j] = -table_18_vlc_level[i];
+            new_cfhd_vlc_len[j]   =  table_18_vlc[i].len + 1;
+            new_cfhd_vlc_run[j]   =  table_18_vlc[i].run;
+            new_cfhd_vlc_level[j] = -table_18_vlc[i].level;
         }
     }
 
-    ret = init_vlc(&s->vlc_18, VLC_BITS, j, new_cfhd_vlc_len,
-                   1, 1, new_cfhd_vlc_bits, 4, 4, 0);
+    ret = ff_init_vlc_from_lengths(&s->vlc_18, VLC_BITS, j, new_cfhd_vlc_len,
+                                   1, NULL, 0, 0, 0, 0, s->avctx);
     if (ret < 0)
         return ret;
     av_assert0(s->vlc_18.table_size == 4572);
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  reply	other threads:[~2022-09-03 20:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-03 20:30 [FFmpeg-devel] [PATCH 1/5] avcodec/cfhd, cfhddata: Simplify check for escape Andreas Rheinhardt
2022-09-03 20:35 ` Andreas Rheinhardt [this message]
2022-09-03 20:35 ` [FFmpeg-devel] [PATCH 3/5] avcodec/cfhddata: Avoid code duplication when creating codebooks Andreas Rheinhardt
2022-09-03 20:35 ` [FFmpeg-devel] [PATCH 4/5] avcodec/cfhd, cfhddata: Free VLC as soon as it is not needed Andreas Rheinhardt
2022-09-03 20:35 ` [FFmpeg-devel] [PATCH 5/5] avcodec/cfhddata: Reduce stack usage Andreas Rheinhardt
2022-09-03 21:49   ` Paul B Mahol
2022-09-03 21:56     ` Andreas Rheinhardt
2022-09-05 10:25       ` Paul B Mahol

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AS8P250MB0744BFF08A5649EA67066BC98F7D9@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM \
    --to=andreas.rheinhardt@outlook.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git