[FFmpeg-devel] [PATCH 038/114] avcodec/mpc7: Reduce size of tables used to initialize VLCs

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Tue Nov 10 12:47:35 EET 2020


By switching to ff_init_vlc_from_lengths() one can replace tables of
codes of type uint16_t with tables of symbols of type uint8_t, saving
space.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
---
 libavcodec/mpc7.c     |  27 ++++----
 libavcodec/mpc7data.h | 156 ++++++++++++++++++++----------------------
 2 files changed, 90 insertions(+), 93 deletions(-)

diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
index 6482029efc..532ea113c2 100644
--- a/libavcodec/mpc7.c
+++ b/libavcodec/mpc7.c
@@ -54,7 +54,7 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
 
     static VLC_TYPE quant_tables[7224][2];
     VLC_TYPE (*quant_table)[2] = quant_tables;
-    const uint16_t *raw_quant_table = mpc7_quant_vlcs;
+    const uint8_t *raw_quant_table = mpc7_quant_vlcs;
 
     /* Musepack SV7 is always stereo */
     if (avctx->channels != 2) {
@@ -93,23 +93,24 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
 
     if(vlc_initialized) return 0;
     av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n");
-    INIT_VLC_STATIC(&scfi_vlc, MPC7_SCFI_BITS, MPC7_SCFI_SIZE,
-                    &mpc7_scfi[1], 2, 1,
-                    &mpc7_scfi[0], 2, 1, 1 << MPC7_SCFI_BITS);
-    INIT_VLC_STATIC(&dscf_vlc, MPC7_DSCF_BITS, MPC7_DSCF_SIZE,
-                    &mpc7_dscf[1], 2, 1,
-                    &mpc7_dscf[0], 2, 1, 1 << MPC7_DSCF_BITS);
-    INIT_VLC_STATIC(&hdr_vlc, MPC7_HDR_BITS, MPC7_HDR_SIZE,
-                    &mpc7_hdr[1], 2, 1,
-                    &mpc7_hdr[0], 2, 1, 1 << MPC7_HDR_BITS);
+    INIT_VLC_STATIC_FROM_LENGTHS(&scfi_vlc, MPC7_SCFI_BITS, MPC7_SCFI_SIZE,
+                                 &mpc7_scfi[1], 2,
+                                 &mpc7_scfi[0], 2, 1, 0, 0, 1 << MPC7_SCFI_BITS);
+    INIT_VLC_STATIC_FROM_LENGTHS(&dscf_vlc, MPC7_DSCF_BITS, MPC7_DSCF_SIZE,
+                                 &mpc7_dscf[1], 2,
+                                 &mpc7_dscf[0], 2, 1, 0, 0, 1 << MPC7_DSCF_BITS);
+    INIT_VLC_STATIC_FROM_LENGTHS(&hdr_vlc, MPC7_HDR_BITS, MPC7_HDR_SIZE,
+                                 &mpc7_hdr[1], 2,
+                                 &mpc7_hdr[0], 2, 1, 0, 0, 1 << MPC7_HDR_BITS);
     for(i = 0; i < MPC7_QUANT_VLC_TABLES; i++){
         for(j = 0; j < 2; j++){
             quant_vlc[i][j].table = quant_table;
             quant_vlc[i][j].table_allocated = quant_sizes[i * 2 + j];
             quant_table += quant_sizes[i * 2 + j];
-            init_vlc(&quant_vlc[i][j], 9, mpc7_quant_vlc_sizes[i],
-                     raw_quant_table + 1, 4, 2,
-                     raw_quant_table, 4, 2, INIT_VLC_USE_NEW_STATIC);
+            ff_init_vlc_from_lengths(&quant_vlc[i][j], 9, mpc7_quant_vlc_sizes[i],
+                                     &raw_quant_table[1], 2,
+                                     &raw_quant_table[0], 2, 1,
+                                     0, INIT_VLC_USE_NEW_STATIC);
             raw_quant_table += 2 * mpc7_quant_vlc_sizes[i];
         }
     }
diff --git a/libavcodec/mpc7data.h b/libavcodec/mpc7data.h
index b9c5f208a4..b578cbdb27 100644
--- a/libavcodec/mpc7data.h
+++ b/libavcodec/mpc7data.h
@@ -33,21 +33,21 @@ static const int8_t mpc7_idx51[] = { -2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0,
 #define MPC7_SCFI_SIZE  4
 #define MPC7_SCFI_BITS  3
 static const uint8_t mpc7_scfi[MPC7_SCFI_SIZE * 2] = {
-    0x2, 3, 0x1, 1, 0x3, 3, 0x0, 2
+    0x03, 2, 0x00, 3, 0x02, 3, 0x01, 1,
 };
 
 #define MPC7_DSCF_SIZE 16
 #define MPC7_DSCF_BITS  6
 static const uint8_t mpc7_dscf[MPC7_DSCF_SIZE * 2] = {
-    0x20, 6, 0x04, 5, 0x11, 5, 0x1E, 5, 0x0D, 4, 0x00, 3, 0x03, 3, 0x09, 4,
-    0x05, 3, 0x02, 3, 0x0E, 4, 0x03, 4, 0x1F, 5, 0x05, 5, 0x21, 6, 0x0C, 4
+    0x05, 3, 0x01, 5, 0x0D, 5, 0x0B, 4, 0x09, 3, 0x06, 3, 0x00, 6, 0x0E, 6,
+    0x02, 5, 0x07, 4, 0x08, 3, 0x0F, 4, 0x04, 4, 0x0A, 4, 0x03, 5, 0x0C, 5,
 };
 
 #define MPC7_HDR_SIZE  10
 #define MPC7_HDR_BITS   9
 static const uint8_t mpc7_hdr[MPC7_HDR_SIZE * 2] = {
-    0x5C, 8, 0x2F, 7, 0x0A, 5, 0x04, 4, 0x00, 2,
-    0x01, 1, 0x03, 3, 0x16, 6, 0xBB, 9, 0xBA, 9
+    0x04, 2, 0x03, 4, 0x02, 5, 0x07, 6, 0x00, 8,
+    0x09, 9, 0x08, 9, 0x01, 7, 0x06, 3, 0x05, 1,
 };
 
 #define MPC7_QUANT_VLC_TABLES 7
@@ -59,81 +59,77 @@ static const uint8_t mpc7_quant_vlc_off[MPC7_QUANT_VLC_TABLES] = {
     0, 0, 3, 4, 7, 15, 31
 };
 
-static const uint16_t mpc7_quant_vlcs[177 * 2 * 2] = {
-        0x0036,  6, 0x0009,  5, 0x0020,  6, 0x0005,  5, 0x000A,  4, 0x0007,  5,
-        0x0034,  6, 0x0000,  5, 0x0023,  6, 0x000A,  5, 0x0006,  4, 0x0004,  5,
-        0x000B,  4, 0x0007,  3, 0x000C,  4, 0x0003,  5, 0x0007,  4, 0x000B,  5,
-        0x0022,  6, 0x0001,  5, 0x0035,  6, 0x0006,  5, 0x0009,  4, 0x0002,  5,
-        0x0021,  6, 0x0008,  5, 0x0037,  6,
-        0x0067,  8, 0x003E,  7, 0x00E1,  9, 0x0037,  7, 0x0003,  4, 0x0034,  7,
-        0x0065,  8, 0x003C,  7, 0x00E3,  9, 0x0018,  6, 0x0000,  4, 0x003D,  7,
-        0x0004,  4, 0x0001,  1, 0x0005,  4, 0x003F,  7, 0x0001,  4, 0x003B,  7,
-        0x00E2,  9, 0x0039,  7, 0x0064,  8, 0x0035,  7, 0x0002,  4, 0x0036,  7,
-        0x00E0,  9, 0x003A,  7, 0x0066,  8,
-
-        0x0059,  7, 0x002F,  6, 0x000F,  5, 0x0000,  5, 0x005B,  7, 0x0004,  5,
-        0x0006,  4, 0x000D,  4, 0x0004,  4, 0x0005,  5, 0x0014,  5, 0x000C,  4,
-        0x0004,  3, 0x000F,  4, 0x000E,  5, 0x0003,  5, 0x0003,  4, 0x000E,  4,
-        0x0005,  4, 0x0001,  5, 0x005A,  7, 0x0002,  5, 0x0015,  5, 0x002E,  6,
-        0x0058,  7,
-        0x0399, 10, 0x0071,  7, 0x0033,  6, 0x00E7,  8, 0x039A, 10, 0x0068,  7,
-        0x001E,  5, 0x0000,  3, 0x001D,  5, 0x0069,  7, 0x0032,  6, 0x0001,  3,
-        0x0002,  2, 0x0003,  3, 0x0031,  6, 0x006B,  7, 0x001B,  5, 0x0002,  3,
-        0x001F,  5, 0x0070,  7, 0x0398, 10, 0x006A,  7, 0x0030,  6, 0x0072,  7,
-        0x039B, 10,
-
-        0x000C,  4, 0x0004,  3, 0x0000,  2, 0x0001,  2, 0x0007,  3, 0x0005,  3,
-        0x000D,  4,
-        0x0004,  5, 0x0003,  4, 0x0002,  2, 0x0003,  2, 0x0001,  2, 0x0000,  3,
-        0x0005,  5,
-
-        0x0005,  4, 0x0000,  3, 0x0004,  3, 0x0006,  3, 0x0007,  3, 0x0005,  3,
-        0x0003,  3, 0x0001,  3, 0x0004,  4,
-        0x0009,  5, 0x000C,  4, 0x0003,  3, 0x0000,  2, 0x0002,  2, 0x0007,  3,
-        0x000D,  4, 0x0005,  4, 0x0008,  5,
-
-        0x0039,  6, 0x0017,  5, 0x0008,  4, 0x000A,  4, 0x000D,  4, 0x0000,  3,
-        0x0002,  3, 0x0003,  3, 0x0001,  3, 0x000F,  4, 0x000C,  4, 0x0009,  4,
-        0x001D,  5, 0x0016,  5, 0x0038,  6,
-        0x00E5,  8, 0x0038,  6, 0x0007,  5, 0x0002,  4, 0x0000,  3, 0x0003,  3,
-        0x0005,  3, 0x0006,  3, 0x0004,  3, 0x0002,  3, 0x000F,  4, 0x001D,  5,
-        0x0006,  5, 0x0073,  7, 0x00E4,  8,
-
-        0x0041,  7, 0x0006,  6, 0x002C,  6, 0x002D,  6, 0x003B,  6, 0x000D,  5,
-        0x0011,  5, 0x0013,  5, 0x0017,  5, 0x0015,  5, 0x001A,  5, 0x001E,  5,
-        0x0000,  4, 0x0002,  4, 0x0005,  4, 0x0007,  4, 0x0003,  4, 0x0004,  4,
-        0x001F,  5, 0x001C,  5, 0x0019,  5, 0x001B,  5, 0x0018,  5, 0x0014,  5,
-        0x0012,  5, 0x000C,  5, 0x0002,  5, 0x003A,  6, 0x0021,  6, 0x0007,  6,
-        0x0040,  7,
-        0x1948, 13, 0x194A, 13, 0x0328, 10, 0x0195,  9, 0x00CB,  8, 0x0066,  7,
-        0x0031,  6, 0x0009,  5, 0x000F,  5, 0x001F,  5, 0x0002,  4, 0x0006,  4,
-        0x0008,  4, 0x000B,  4, 0x000D,  4, 0x0000,  3, 0x000E,  4, 0x000A,  4,
-        0x0009,  4, 0x0005,  4, 0x0003,  4, 0x001E,  5, 0x000E,  5, 0x0008,  5,
-        0x0030,  6, 0x0067,  7, 0x00C9,  8, 0x00C8,  8, 0x0653, 11, 0x1949, 13,
-        0x194B, 13,
-
-        0x0067,  8, 0x0099,  8, 0x00B5,  8, 0x00E9,  8, 0x0040,  7, 0x0041,  7,
-        0x004D,  7, 0x0051,  7, 0x005B,  7, 0x0071,  7, 0x0070,  7, 0x0018,  6,
-        0x001D,  6, 0x0023,  6, 0x0025,  6, 0x0029,  6, 0x002C,  6, 0x002E,  6,
-        0x0033,  6, 0x0031,  6, 0x0036,  6, 0x0037,  6, 0x0039,  6, 0x003C,  6,
-        0x0000,  5, 0x0002,  5, 0x000A,  5, 0x0005,  5, 0x0009,  5, 0x0006,  5,
-        0x000D,  5, 0x0007,  5, 0x000B,  5, 0x000F,  5, 0x0008,  5, 0x0004,  5,
-        0x0003,  5, 0x0001,  5, 0x003F,  6, 0x003E,  6, 0x003D,  6, 0x0035,  6,
-        0x003B,  6, 0x0034,  6, 0x0030,  6, 0x002F,  6, 0x002B,  6, 0x002A,  6,
-        0x0027,  6, 0x0024,  6, 0x0021,  6, 0x001C,  6, 0x0075,  7, 0x0065,  7,
-        0x0064,  7, 0x0050,  7, 0x0045,  7, 0x0044,  7, 0x0032,  7, 0x00E8,  8,
-        0x00B4,  8, 0x0098,  8, 0x0066,  8,
-        0x37A4, 14, 0x37AD, 14, 0x37A6, 14, 0x37AE, 14, 0x0DEA, 12, 0x02F0, 10,
-        0x02F1, 10, 0x00A0,  9, 0x00A2,  9, 0x01BC,  9, 0x007A,  8, 0x00DF,  8,
-        0x003C,  7, 0x0049,  7, 0x006E,  7, 0x000E,  6, 0x0018,  6, 0x0019,  6,
-        0x0022,  6, 0x0025,  6, 0x0036,  6, 0x0003,  5, 0x0009,  5, 0x000B,  5,
-        0x0010,  5, 0x0013,  5, 0x0015,  5, 0x0018,  5, 0x001A,  5, 0x001D,  5,
-        0x001F,  5, 0x0002,  4, 0x0000,  4, 0x001E,  5, 0x001C,  5, 0x0019,  5,
-        0x0016,  5, 0x0014,  5, 0x000E,  5, 0x000D,  5, 0x0008,  5, 0x0006,  5,
-        0x0002,  5, 0x002E,  6, 0x0023,  6, 0x001F,  6, 0x0015,  6, 0x000F,  6,
-        0x005F,  7, 0x0048,  7, 0x0029,  7, 0x00BD,  8, 0x007B,  8, 0x0179,  9,
-        0x00A1,  9, 0x037B, 10, 0x0147, 10, 0x0146, 10, 0x0DE8, 12, 0x37AF, 14,
-        0x37A7, 14, 0x37AC, 14, 0x37A5, 14
+static const uint8_t mpc7_quant_vlcs[177 * 2 * 2] = {
+    /* quant_vlc[0][0] - 27 entries */
+    0x07,  5, 0x13,  5, 0x17,  5, 0x0F,  5, 0x0B,  5, 0x03,  5, 0x15,  5,
+    0x05,  5, 0x19,  5, 0x01,  5, 0x09,  5, 0x11,  5, 0x0A,  4, 0x10,  4,
+    0x02,  6, 0x18,  6, 0x12,  6, 0x08,  6, 0x16,  4, 0x04,  4, 0x0C,  4,
+    0x0E,  4, 0x06,  6, 0x14,  6, 0x00,  6, 0x1A,  6, 0x0D,  3,
+    /* quant_vlc[0][1] - 27 entries */
+    0x0A,  4, 0x10,  4, 0x16,  4, 0x04,  4, 0x0C,  4, 0x0E,  4, 0x09,  6,
+    0x14,  8, 0x06,  8, 0x1A,  8, 0x00,  8, 0x05,  7, 0x15,  7, 0x17,  7,
+    0x03,  7, 0x18,  9, 0x02,  9, 0x12,  9, 0x08,  9, 0x13,  7, 0x19,  7,
+    0x11,  7, 0x07,  7, 0x0B,  7, 0x01,  7, 0x0F,  7, 0x0D,  1,
+    /* quant_vlc[1][0] - 25 entries */
+    0x03,  5, 0x13,  5, 0x15,  5, 0x0F,  5, 0x05,  5, 0x09,  5, 0x10,  4,
+    0x08,  4, 0x12,  4, 0x06,  4, 0x0E,  5, 0x02,  5, 0x0C,  3, 0x0A,  5,
+    0x16,  5, 0x18,  7, 0x00,  7, 0x14,  7, 0x04,  7, 0x17,  6, 0x01,  6,
+    0x0B,  4, 0x07,  4, 0x11,  4, 0x0D,  4,
+    /* quant_vlc[1][1] - 25 entries */
+    0x07,  3, 0x0B,  3, 0x11,  3, 0x0D,  3, 0x0C,  2, 0x16,  6, 0x0E,  6,
+    0x0A,  6, 0x02,  6, 0x05,  7, 0x09,  7, 0x15,  7, 0x0F,  7, 0x10,  5,
+    0x13,  7, 0x01,  7, 0x17,  7, 0x14, 10, 0x00, 10, 0x04, 10, 0x18, 10,
+    0x03,  8, 0x08,  5, 0x06,  5, 0x12,  5,
+    /* quant_vlc[2][0] - 7 entries */
+    0x02,  2, 0x03,  2, 0x01,  3, 0x05,  3, 0x00,  4, 0x06,  4, 0x04,  3,
+    /* quant_vlc[2][1] - 7 entries */
+    0x05,  3, 0x00,  5, 0x06,  5, 0x01,  4, 0x04,  2, 0x02,  2, 0x03,  2,
+    /* quant_vlc[3][0] - 9 entries */
+    0x01,  3, 0x07,  3, 0x08,  4, 0x00,  4, 0x06,  3, 0x02,  3, 0x05,  3,
+    0x03,  3, 0x04,  3,
+    /* quant_vlc[3][1] - 9 entries */
+    0x03,  2, 0x08,  5, 0x00,  5, 0x07,  4, 0x02,  3, 0x04,  2, 0x01,  4,
+    0x06,  4, 0x05,  3,
+    /* quant_vlc[4][0] - 15 entries */
+    0x05,  3, 0x08,  3, 0x06,  3, 0x07,  3, 0x02,  4, 0x0B,  4, 0x03,  4,
+    0x0D,  5, 0x01,  5, 0x0A,  4, 0x04,  4, 0x0E,  6, 0x00,  6, 0x0C,  5,
+    0x09,  4,
+    /* quant_vlc[4][1] - 15 entries */
+    0x04,  3, 0x03,  4, 0x0C,  5, 0x02,  5, 0x09,  3, 0x05,  3, 0x08,  3,
+    0x06,  3, 0x07,  3, 0x01,  6, 0x0E,  8, 0x00,  8, 0x0D,  7, 0x0B,  5,
+    0x0A,  4,
+    /* quant_vlc[5][0] - 31 entries */
+    0x0C,  4, 0x1A,  5, 0x01,  6, 0x1D,  6, 0x0D,  4, 0x10,  4, 0x11,  4,
+    0x0E,  4, 0x19,  5, 0x05,  5, 0x0F,  4, 0x1E,  7, 0x00,  7, 0x1C,  6,
+    0x06,  5, 0x18,  5, 0x07,  5, 0x17,  5, 0x09,  5, 0x02,  6, 0x03,  6,
+    0x08,  5, 0x16,  5, 0x14,  5, 0x0A,  5, 0x15,  5, 0x13,  5, 0x1B,  6,
+    0x04,  6, 0x0B,  5, 0x12,  5,
+    /* quant_vlc[5][1] - 31 entries */
+    0x0F,  3, 0x0A,  4, 0x14,  4, 0x17,  5, 0x07,  5, 0x13,  4, 0x0B,  4,
+    0x16,  5, 0x08,  5, 0x0C,  4, 0x12,  4, 0x11,  4, 0x0D,  4, 0x18,  6,
+    0x06,  6, 0x1B,  8, 0x1A,  8, 0x02, 10, 0x00, 13, 0x1D, 13, 0x01, 13,
+    0x1E, 13, 0x1C, 11, 0x03,  9, 0x04,  8, 0x05,  7, 0x19,  7, 0x0E,  4,
+    0x10,  4, 0x15,  5, 0x09,  5,
+    /* quant_vlc[6][0] - 63 entries */
+    0x18,  5, 0x25,  5, 0x19,  5, 0x24,  5, 0x23,  5, 0x1B,  5, 0x1D,  5,
+    0x1F,  5, 0x22,  5, 0x1C,  5, 0x1A,  5, 0x20,  5, 0x0B,  6, 0x3A,  7,
+    0x3E,  8, 0x00,  8, 0x1E,  5, 0x33,  6, 0x0C,  6, 0x21,  5, 0x04,  7,
+    0x05,  7, 0x32,  6, 0x39,  7, 0x38,  7, 0x0D,  6, 0x31,  6, 0x0E,  6,
+    0x3D,  8, 0x01,  8, 0x06,  7, 0x30,  6, 0x37,  7, 0x07,  7, 0x0F,  6,
+    0x2F,  6, 0x2E,  6, 0x10,  6, 0x3C,  8, 0x02,  8, 0x08,  7, 0x11,  6,
+    0x2D,  6, 0x2C,  6, 0x13,  6, 0x36,  7, 0x35,  7, 0x12,  6, 0x2B,  6,
+    0x29,  6, 0x14,  6, 0x15,  6, 0x0A,  7, 0x09,  7, 0x16,  6, 0x3B,  8,
+    0x03,  8, 0x34,  7, 0x2A,  6, 0x17,  6, 0x28,  6, 0x27,  6, 0x26,  6,
+    /* quant_vlc[6][1] - 63 entries */
+    0x20,  4, 0x2A,  5, 0x15,  5, 0x1F,  4, 0x29,  5, 0x0F,  6, 0x2F,  6,
+    0x28,  5, 0x16,  5, 0x07,  9, 0x36,  9, 0x08,  9, 0x39, 10, 0x38, 10,
+    0x32,  7, 0x2E,  6, 0x17,  5, 0x10,  6, 0x11,  6, 0x27,  5, 0x26,  5,
+    0x0C,  7, 0x0A,  8, 0x34,  8, 0x2D,  6, 0x18,  5, 0x12,  6, 0x2C,  6,
+    0x31,  7, 0x0D,  7, 0x13,  6, 0x19,  5, 0x25,  5, 0x1A,  5, 0x24,  5,
+    0x2B,  6, 0x05, 10, 0x06, 10, 0x35,  9, 0x33,  8, 0x30,  7, 0x1B,  5,
+    0x23,  5, 0x1C,  5, 0x14,  6, 0x0E,  7, 0x09,  9, 0x3A, 12, 0x00, 14,
+    0x3E, 14, 0x02, 14, 0x3C, 14, 0x04, 12, 0x3D, 14, 0x01, 14, 0x03, 14,
+    0x3B, 14, 0x37, 10, 0x0B,  8, 0x22,  5, 0x1D,  5, 0x21,  5, 0x1E,  5,
 };
 
 #endif /* AVCODEC_MPC7DATA_H */
-- 
2.25.1



More information about the ffmpeg-devel mailing list