Coverage Report

Created: 2026-02-14 06:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/bgmc.c
Line
Count
Source
1
/*
2
 * Block Gilbert-Moore decoder
3
 * Copyright (c) 2010 Thilo Borgmann <thilo.borgmann _at_ mail.de>
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
22
/**
23
 * @file
24
 * Block Gilbert-Moore decoder as used by MPEG-4 ALS
25
 * @author Thilo Borgmann <thilo.borgmann _at_ mail.de>
26
 */
27
28
#include "libavutil/attributes.h"
29
#include "libavutil/mem.h"
30
#include "bgmc.h"
31
32
143M
#define FREQ_BITS  14                      // bits used by frequency counters
33
434M
#define VALUE_BITS 18                      // bits used to represent the values
34
434M
#define TOP_VALUE  ((1 << VALUE_BITS) - 1) // maximum value
35
470M
#define FIRST_QTR  (TOP_VALUE / 4 + 1)     // first quarter of values maximum value
36
338M
#define HALF       (2 * FIRST_QTR)         // first half of values maximum value
37
16.1M
#define THIRD_QTR  (3 * FIRST_QTR)         // third quarter of values maximum value
38
39
29.4M
#define LUT_BITS   (FREQ_BITS - 8)         // number of bits used to index lookup tables
40
3.80M
#define LUT_SIZE   (1 << LUT_BITS)         // size of the lookup tables
41
64.5k
#define LUT_BUFF   4                       // number of buffered lookup tables
42
43
44
/** Cumulative frequency tables for block Gilbert-Moore coding. */
45
static const uint16_t cf_tables_1[3][129] = {
46
    {
47
        16384, 16066, 15748, 15431, 15114, 14799, 14485, 14173, 13861, 13552,
48
        13243, 12939, 12635, 12336, 12038, 11745, 11452, 11161, 10870, 10586,
49
        10303, 10027,  9751,  9483,  9215,  8953,  8692,  8440,  8189,  7946,
50
         7704,  7472,  7240,  7008,  6776,  6554,  6333,  6122,  5912,  5711,
51
         5512,  5320,  5128,  4947,  4766,  4595,  4425,  4264,  4104,  3946,
52
         3788,  3640,  3493,  3355,  3218,  3090,  2963,  2842,  2721,  2609,
53
         2498,  2395,  2292,  2196,  2100,  2004,  1908,  1820,  1732,  1651,
54
         1570,  1497,  1424,  1355,  1287,  1223,  1161,  1100,  1044,   988,
55
          938,   888,   839,   790,   746,   702,   662,   623,   588,   553,
56
          520,   488,   459,   431,   405,   380,   357,   334,   311,   288,
57
          268,   248,   230,   213,   197,   182,   168,   154,   142,   130,
58
          119,   108,    99,    90,    81,    72,    64,    56,    49,    42,
59
           36,    30,    25,    20,    15,    11,     7,     3,     0
60
    },
61
    {
62
        16384, 16080, 15776, 15473, 15170, 14868, 14567, 14268, 13970, 13674,
63
        13378, 13086, 12794, 12505, 12218, 11936, 11654, 11373, 11092, 10818,
64
        10544, 10276, 10008,  9749,  9490,  9236,  8982,  8737,  8492,  8256,
65
         8020,  7792,  7564,  7336,  7108,  6888,  6669,  6459,  6249,  6050,
66
         5852,  5660,  5468,  5286,  5104,  4931,  4760,  4598,  4436,  4275,
67
         4115,  3965,  3816,  3674,  3534,  3403,  3272,  3147,  3023,  2907,
68
         2792,  2684,  2577,  2476,  2375,  2274,  2173,  2079,  1986,  1897,
69
         1810,  1724,  1645,  1567,  1493,  1419,  1351,  1284,  1222,  1161,
70
         1105,  1050,   995,   941,   891,   842,   797,   753,   713,   673,
71
          636,   599,   566,   533,   503,   473,   446,   419,   392,   365,
72
          340,   316,   294,   272,   253,   234,   216,   199,   184,   169,
73
          155,   142,   130,   118,   106,    95,    85,    75,    66,    57,
74
           49,    41,    34,    27,    21,    15,    10,     5,     0
75
    },
76
    {
77
        16384, 16092, 15801, 15510, 15219, 14930, 14641, 14355, 14069, 13785,
78
        13501, 13219, 12938, 12661, 12384, 12112, 11841, 11571, 11301, 11037,
79
        10773, 10514, 10256, 10005,  9754,  9508,  9263,  9025,  8787,  8557,
80
         8327,  8103,  7879,  7655,  7431,  7215,  7000,  6792,  6585,  6387,
81
         6190,  5998,  5807,  5625,  5445,  5272,  5100,  4937,  4774,  4613,
82
         4452,  4301,  4150,  4007,  3865,  3731,  3597,  3469,  3341,  3218,
83
         3099,  2981,  2869,  2758,  2652,  2546,  2440,  2334,  2234,  2134,
84
         2041,  1949,  1864,  1779,  1699,  1620,  1547,  1474,  1407,  1340,
85
         1278,  1217,  1157,  1097,  1043,   989,   940,   891,   846,   801,
86
          759,   718,   680,   643,   609,   575,   543,   511,   479,   447,
87
          418,   389,   363,   337,   314,   291,   270,   249,   230,   212,
88
          195,   179,   164,   149,   135,   121,   108,    96,    85,    74,
89
          64,     54,    45,    36,    28,    20,    13,     6,     0
90
    }
91
};
92
93
94
static const uint16_t cf_tables_2[8][193] = {
95
    {
96
        16384, 16104, 15825, 15546, 15268, 14991, 14714, 14439, 14164, 13891,
97
        13620, 13350, 13081, 12815, 12549, 12287, 12025, 11765, 11505, 11250,
98
        10996, 10746, 10497, 10254, 10011,  9772,  9534,  9303,  9072,  8848,
99
         8624,  8406,  8188,  7970,  7752,  7539,  7327,  7123,  6919,  6724,
100
         6529,  6339,  6150,  5970,  5790,  5618,  5446,  5282,  5119,  4957,
101
         4795,  4642,  4490,  4345,  4201,  4065,  3929,  3798,  3669,  3547,
102
         3425,  3310,  3196,  3086,  2976,  2866,  2756,  2650,  2545,  2447,
103
         2350,  2260,  2170,  2085,  2000,  1921,  1843,  1770,  1698,  1632,
104
         1566,  1501,  1436,  1376,  1316,  1261,  1207,  1157,  1108,  1061,
105
         1015,   973,   931,   893,   855,   819,   783,   747,   711,   677,
106
          644,   614,   584,   557,   530,   505,   480,   458,   436,   416,
107
          396,   378,   360,   343,   326,   310,   295,   281,   267,   255,
108
          243,   232,   221,   211,   201,   192,   183,   174,   166,   158,
109
          150,   142,   134,   126,   119,   112,   106,   100,    95,    90,
110
           85,    80,    76,    72,    69,    66,    63,    60,    57,    54,
111
           51,    48,    46,    44,    42,    40,    38,    36,    34,    33,
112
           32,    31,    30,    29,    28,    27,    26,    25,    24,    23,
113
           22,    21,    20,    19,    18,    17,    16,    15,    14,    13,
114
           12,    11,    10,     9,     8,     7,     6,     5,     4,     3,
115
            2,     1,     0
116
    },
117
    {
118
        16384, 16116, 15849, 15582, 15316, 15050, 14785, 14521, 14257, 13995,
119
        13734, 13476, 13218, 12963, 12708, 12457, 12206, 11956, 11706, 11460,
120
        11215, 10975, 10735, 10500, 10265, 10034,  9803,  9579,  9355,  9136,
121
         8917,  8703,  8489,  8275,  8061,  7853,  7645,  7444,  7244,  7051,
122
         6858,  6671,  6484,  6305,  6127,  5956,  5785,  5622,  5459,  5298,
123
         5137,  4983,  4830,  4684,  4539,  4401,  4263,  4131,  3999,  3874,
124
         3750,  3632,  3515,  3401,  3287,  3173,  3059,  2949,  2840,  2737,
125
         2635,  2539,  2444,  2354,  2264,  2181,  2098,  2020,  1943,  1872,
126
         1801,  1731,  1661,  1596,  1532,  1472,  1412,  1357,  1303,  1251,
127
         1200,  1153,  1106,  1063,  1020,   979,   938,   897,   856,   818,
128
          780,   746,   712,   681,   650,   621,   592,   566,   540,   517,
129
          494,   473,   452,   431,   410,   391,   373,   356,   340,   325,
130
          310,   296,   282,   270,   258,   247,   236,   225,   214,   203,
131
          192,   182,   172,   162,   153,   144,   136,   128,   121,   114,
132
          108,   102,    97,    92,    87,    82,    77,    73,    69,    65,
133
           62,    59,    56,    53,    50,    47,    45,    43,    41,    39,
134
           37,    35,    33,    31,    29,    27,    26,    25,    24,    23,
135
           22,    21,    20,    19,    18,    17,    16,    15,    14,    13,
136
           12,    11,    10,     9,     8,     7,     6,     5,     4,     3,
137
            2,     1,     0
138
    },
139
    {
140
        16384, 16128, 15872, 15617, 15362, 15107, 14853, 14600, 14347, 14096,
141
        13846, 13597, 13350, 13105, 12860, 12618, 12376, 12135, 11894, 11657,
142
        11421, 11189, 10957, 10730, 10503, 10279, 10056,  9838,  9620,  9407,
143
         9195,  8987,  8779,  8571,  8363,  8159,  7955,  7758,  7561,  7371,
144
         7182,  6997,  6812,  6635,  6459,  6289,  6120,  5957,  5795,  5634,
145
         5473,  5319,  5165,  5018,  4871,  4732,  4593,  4458,  4324,  4197,
146
         4071,  3951,  3831,  3714,  3597,  3480,  3363,  3250,  3138,  3032,
147
         2927,  2828,  2729,  2635,  2541,  2453,  2366,  2284,  2202,  2126,
148
         2050,  1975,  1900,  1830,  1761,  1697,  1633,  1574,  1515,  1459,
149
         1403,  1351,  1300,  1252,  1205,  1160,  1115,  1070,  1025,   982,
150
          939,   899,   860,   824,   789,   756,   723,   693,   663,   636,
151
          609,   584,   559,   535,   511,   489,   467,   447,   427,   409,
152
          391,   374,   358,   343,   328,   313,   300,   287,   274,   261,
153
          248,   235,   223,   211,   200,   189,   179,   169,   160,   151,
154
          143,   135,   128,   121,   115,   109,   103,    97,    92,    87,
155
           82,    77,    73,    69,    65,    61,    58,    55,    52,    49,
156
           46,    43,    40,    37,    35,    33,    31,    29,    27,    25,
157
           23,    21,    20,    19,    18,    17,    16,    15,    14,    13,
158
           12,    11,    10,     9,     8,     7,     6,     5,     4,     3,
159
            2,     1,     0
160
    },
161
    {
162
        16384, 16139, 15894, 15649, 15405, 15162, 14919, 14677, 14435, 14195,
163
        13955, 13717, 13479, 13243, 13008, 12775, 12542, 12310, 12079, 11851,
164
        11623, 11399, 11176, 10956, 10737, 10521, 10305, 10094,  9883,  9677,
165
         9471,  9268,  9065,  8862,  8659,  8459,  8260,  8067,  7874,  7688,
166
         7502,  7321,  7140,  6965,  6790,  6621,  6452,  6290,  6128,  5968,
167
         5808,  5655,  5503,  5356,  5209,  5069,  4929,  4794,  4660,  4532,
168
         4404,  4282,  4160,  4041,  3922,  3803,  3684,  3568,  3452,  3343,
169
         3234,  3131,  3029,  2931,  2833,  2741,  2649,  2563,  2477,  2396,
170
         2316,  2236,  2157,  2083,  2009,  1940,  1871,  1807,  1743,  1683,
171
         1623,  1567,  1511,  1459,  1407,  1357,  1307,  1257,  1207,  1159,
172
         1111,  1067,  1023,   983,   943,   905,   868,   834,   800,   769,
173
          738,   709,   681,   653,   625,   600,   575,   552,   529,   508,
174
          487,   466,   447,   428,   410,   392,   376,   360,   344,   328,
175
          313,   298,   283,   268,   255,   242,   230,   218,   207,   196,
176
          186,   176,   167,   158,   150,   142,   135,   128,   121,   114,
177
          108,   102,    97,    92,    87,    82,    78,    74,    70,    66,
178
           62,    58,    54,    50,    47,    44,    41,    38,    35,    32,
179
           30,    28,    26,    24,    22,    20,    18,    16,    14,    13,
180
           12,    11,    10,     9,     8,     7,     6,     5,     4,     3,
181
            2,     1,     0
182
    },
183
    {
184
        16384, 16149, 15915, 15681, 15447, 15214, 14981, 14749, 14517, 14286,
185
        14055, 13827, 13599, 13373, 13147, 12923, 12699, 12476, 12253, 12034,
186
        11815, 11599, 11383, 11171, 10959, 10750, 10541, 10337, 10133,  9933,
187
         9733,  9536,  9339,  9142,  8945,  8751,  8557,  8369,  8181,  7998,
188
         7816,  7638,  7460,  7288,  7116,  6950,  6785,  6625,  6465,  6306,
189
         6147,  5995,  5843,  5697,  5551,  5411,  5271,  5135,  5000,  4871,
190
         4742,  4618,  4495,  4374,  4253,  4132,  4011,  3893,  3775,  3663,
191
         3552,  3446,  3340,  3239,  3138,  3043,  2948,  2858,  2768,  2684,
192
         2600,  2516,  2433,  2355,  2278,  2205,  2133,  2065,  1997,  1932,
193
         1867,  1807,  1747,  1690,  1634,  1580,  1526,  1472,  1418,  1366,
194
         1314,  1266,  1218,  1174,  1130,  1088,  1047,  1009,   971,   936,
195
          901,   868,   836,   804,   772,   743,   714,   685,   658,   631,
196
          606,   582,   559,   536,   515,   494,   475,   456,   437,   418,
197
          399,   380,   362,   344,   328,   312,   297,   283,   270,   257,
198
          245,   233,   222,   211,   201,   191,   181,   172,   163,   155,
199
          147,   139,   132,   125,   119,   113,   107,   101,    96,    91,
200
           86,    81,    76,    71,    66,    62,    58,    54,    50,    46,
201
           43,    40,    37,    34,    31,    28,    26,    24,    22,    20,
202
           18,    16,    14,    12,    10,     8,     6,     5,     4,     3,
203
            2,     1,     0
204
    },
205
    {
206
        16384, 16159, 15934, 15709, 15485, 15261, 15038, 14816, 14594, 14373,
207
        14152, 13933, 13714, 13497, 13280, 13065, 12850, 12636, 12422, 12211,
208
        12000, 11791, 11583, 11378, 11173, 10971, 10769, 10571, 10373, 10179,
209
         9985,  9793,  9601,  9409,  9217,  9029,  8842,  8658,  8475,  8297,
210
         8120,  7946,  7773,  7604,  7435,  7271,  7108,  6950,  6792,  6634,
211
         6477,  6326,  6175,  6029,  5883,  5742,  5602,  5466,  5330,  5199,
212
         5068,  4943,  4818,  4696,  4574,  4452,  4330,  4211,  4093,  3979,
213
         3866,  3759,  3652,  3549,  3446,  3348,  3250,  3157,  3065,  2977,
214
         2889,  2802,  2716,  2634,  2553,  2476,  2399,  2326,  2254,  2185,
215
         2117,  2052,  1987,  1926,  1866,  1808,  1750,  1692,  1634,  1578,
216
         1522,  1470,  1418,  1369,  1321,  1275,  1229,  1187,  1145,  1105,
217
         1066,  1027,   991,   955,   919,   883,   850,   817,   786,   756,
218
          728,   700,   674,   648,   624,   600,   578,   556,   534,   512,
219
          490,   468,   447,   426,   407,   388,   371,   354,   338,   322,
220
          307,   293,   280,   267,   255,   243,   231,   219,   209,   199,
221
          189,   179,   170,   161,   153,   145,   138,   131,   124,   117,
222
          111,   105,    99,    93,    87,    81,    76,    71,    66,    61,
223
           57,    53,    49,    45,    42,    39,    36,    33,    30,    27,
224
           24,    21,    19,    17,    15,    13,    11,     9,     7,     5,
225
            3,     1,     0
226
    },
227
    {
228
        16384, 16169, 15954, 15739, 15524, 15310, 15096, 14883, 14670, 14458,
229
        14246, 14035, 13824, 13614, 13405, 13198, 12991, 12785, 12579, 12376,
230
        12173, 11972, 11772, 11574, 11377, 11182, 10987, 10795, 10603, 10414,
231
        10226, 10040,  9854,  9668,  9482,  9299,  9116,  8937,  8759,  8585,
232
         8411,  8241,  8071,  7906,  7741,  7580,  7419,  7263,  7107,  6952,
233
         6797,  6647,  6497,  6353,  6209,  6070,  5931,  5796,  5661,  5531,
234
         5401,  5275,  5150,  5027,  4904,  4781,  4658,  4538,  4419,  4304,
235
         4190,  4081,  3972,  3867,  3762,  3662,  3562,  3467,  3372,  3281,
236
         3191,  3101,  3012,  2928,  2844,  2764,  2684,  2608,  2533,  2460,
237
         2387,  2318,  2250,  2185,  2121,  2059,  1997,  1935,  1873,  1813,
238
         1754,  1698,  1642,  1588,  1535,  1483,  1433,  1384,  1338,  1292,
239
         1249,  1206,  1165,  1125,  1085,  1045,  1008,   971,   937,   903,
240
          871,   840,   810,   780,   752,   724,   698,   672,   647,   622,
241
          597,   572,   548,   524,   502,   480,   460,   440,   421,   403,
242
          386,   369,   353,   337,   323,   309,   295,   281,   268,   255,
243
          243,   231,   220,   209,   199,   189,   180,   171,   163,   155,
244
          147,   139,   131,   123,   116,   109,   102,    95,    89,    83,
245
           77,    72,    67,    62,    57,    52,    48,    44,    40,    36,
246
           32,    28,    25,    22,    19,    16,    13,    10,     8,     6,
247
            4,     2,     0
248
    },
249
    {
250
        16384, 16177, 15970, 15764, 15558, 15353, 15148, 14944, 14740, 14537,
251
        14334, 14132, 13930, 13729, 13529, 13330, 13131, 12933, 12735, 12539,
252
        12343, 12150, 11957, 11766, 11576, 11388, 11200, 11015, 10830, 10647,
253
        10465, 10285, 10105,  9925,  9745,  9568,  9391,  9218,  9045,  8876,
254
         8707,  8541,  8375,  8213,  8051,  7894,  7737,  7583,  7429,  7277,
255
         7125,  6977,  6830,  6687,  6544,  6406,  6268,  6133,  5998,  5868,
256
         5738,  5612,  5487,  5364,  5241,  5118,  4995,  4875,  4755,  4640,
257
         4525,  4414,  4304,  4198,  4092,  3990,  3888,  3790,  3693,  3600,
258
         3507,  3415,  3323,  3235,  3147,  3064,  2981,  2902,  2823,  2746,
259
         2670,  2594,  2522,  2450,  2382,  2314,  2248,  2182,  2116,  2050,
260
         1987,  1924,  1864,  1804,  1748,  1692,  1638,  1585,  1534,  1484,
261
         1437,  1390,  1346,  1302,  1258,  1215,  1174,  1133,  1095,  1057,
262
         1021,   986,   952,   918,   887,   856,   827,   798,   770,   742,
263
          714,   686,   659,   632,   607,   582,   559,   536,   514,   492,
264
          472,   452,   433,   415,   398,   381,   364,   348,   333,   318,
265
          304,   290,   277,   264,   252,   240,   229,   218,   208,   198,
266
          188,   178,   168,   158,   149,   140,   132,   124,   116,   108,
267
          101,    94,    87,    81,    75,    69,    64,    59,    54,    49,
268
           44,    39,    35,    31,    27,    23,    19,    15,    12,     9,
269
            6,     3,     0
270
    }
271
};
272
273
274
static const uint16_t cf_tables_3[5][257] = {
275
    {
276
        16384, 16187, 15990, 15793, 15597, 15401, 15205, 15009, 14813, 14618,
277
        14423, 14230, 14037, 13845, 13653, 13463, 13273, 13083, 12894, 12706,
278
        12518, 12332, 12146, 11962, 11778, 11597, 11416, 11237, 11059, 10882,
279
        10706, 10532, 10358, 10184, 10010,  9838,  9666,  9497,  9328,  9163,
280
         8999,  8837,  8675,  8517,  8359,  8205,  8051,  7901,  7751,  7602,
281
         7453,  7308,  7163,  7022,  6882,  6745,  6609,  6476,  6343,  6214,
282
         6085,  5960,  5835,  5712,  5589,  5466,  5343,  5223,  5103,  4987,
283
         4872,  4761,  4650,  4542,  4435,  4332,  4229,  4130,  4031,  3936,
284
         3841,  3747,  3653,  3563,  3473,  3387,  3302,  3220,  3138,  3059,
285
         2980,  2905,  2830,  2759,  2688,  2619,  2550,  2481,  2412,  2345,
286
         2278,  2215,  2152,  2092,  2032,  1974,  1917,  1863,  1809,  1758,
287
         1707,  1659,  1611,  1564,  1517,  1473,  1429,  1387,  1346,  1307,
288
         1268,  1230,  1193,  1158,  1123,  1090,  1058,  1026,   994,   962,
289
          930,   899,   869,   841,   813,   786,   760,   735,   710,   687,
290
          664,   643,   622,   602,   582,   562,   543,   525,   507,   490,
291
          473,   457,   442,   427,   412,   398,   385,   373,   361,   349,
292
          337,   325,   313,   301,   290,   279,   269,   259,   249,   240,
293
          231,   222,   214,   206,   199,   192,   185,   178,   171,   165,
294
          159,   153,   148,   143,   138,   133,   128,   123,   119,   115,
295
          111,   107,   103,    99,    95,    91,    87,    83,    80,    77,
296
           74,    71,    68,    65,    63,    61,    59,    57,    55,    53,
297
           51,    49,    47,    45,    43,    41,    40,    39,    38,    37,
298
           36,    35,    34,    33,    32,    31,    30,    29,    28,    27,
299
           26,    25,    24,    23,    22,    21,    20,    19,    18,    17,
300
           16,    15,    14,    13,    12,    11,    10,     9,     8,     7,
301
            6,     5,     4,     3,     2,     1,     0
302
    },
303
    {
304
        16384, 16195, 16006, 15817, 15629, 15441, 15253, 15065, 14878, 14692,
305
        14506, 14321, 14136, 13952, 13768, 13585, 13402, 13219, 13037, 12857,
306
        12677, 12499, 12321, 12144, 11967, 11792, 11617, 11444, 11271, 11100,
307
        10930, 10762, 10594, 10426, 10258, 10091,  9925,  9761,  9598,  9438,
308
         9278,  9120,  8963,  8809,  8655,  8504,  8354,  8207,  8060,  7914,
309
         7769,  7627,  7485,  7347,  7209,  7074,  6939,  6807,  6676,  6548,
310
         6420,  6296,  6172,  6050,  5928,  5806,  5684,  5564,  5444,  5328,
311
         5212,  5100,  4988,  4879,  4771,  4667,  4563,  4462,  4362,  4265,
312
         4169,  4073,  3978,  3886,  3795,  3707,  3619,  3535,  3451,  3369,
313
         3288,  3210,  3133,  3059,  2985,  2913,  2841,  2769,  2697,  2627,
314
         2557,  2490,  2424,  2360,  2297,  2237,  2177,  2119,  2062,  2007,
315
         1953,  1901,  1849,  1798,  1748,  1700,  1652,  1607,  1562,  1519,
316
         1476,  1435,  1394,  1355,  1317,  1281,  1245,  1210,  1175,  1140,
317
         1105,  1071,  1037,  1005,   973,   943,   913,   885,   857,   830,
318
          804,   779,   754,   731,   708,   685,   663,   642,   621,   601,
319
          581,   563,   545,   528,   511,   495,   479,   463,   448,   433,
320
          419,   405,   391,   377,   364,   351,   338,   326,   314,   302,
321
          291,   280,   270,   260,   251,   242,   234,   226,   218,   210,
322
          202,   195,   188,   181,   174,   168,   162,   156,   150,   144,
323
          139,   134,   129,   124,   119,   114,   109,   104,   100,    96,
324
           92,    88,    84,    80,    77,    74,    71,    68,    65,    62,
325
           59,    56,    54,    52,    50,    48,    46,    44,    42,    40,
326
           38,    36,    34,    33,    32,    31,    30,    29,    28,    27,
327
           26,    25,    24,    23,    22,    21,    20,    19,    18,    17,
328
           16,    15,    14,    13,    12,    11,    10,     9,     8,     7,
329
            6,     5,     4,     3,     2,     1,     0
330
    },
331
    {
332
        16384, 16203, 16022, 15842, 15662, 15482, 15302, 15122, 14942, 14763,
333
        14584, 14406, 14228, 14051, 13874, 13698, 13522, 13347, 13172, 12998,
334
        12824, 12652, 12480, 12310, 12140, 11971, 11803, 11637, 11471, 11307,
335
        11143, 10980, 10817, 10654, 10491, 10330, 10169, 10011,  9853,  9697,
336
         9542,  9389,  9236,  9086,  8936,  8789,  8642,  8498,  8355,  8212,
337
         8070,  7931,  7792,  7656,  7520,  7388,  7256,  7126,  6996,  6870,
338
         6744,  6621,  6498,  6377,  6256,  6135,  6014,  5895,  5776,  5660,
339
         5545,  5433,  5321,  5212,  5104,  4999,  4895,  4793,  4692,  4594,
340
         4496,  4400,  4304,  4211,  4118,  4028,  3939,  3853,  3767,  3684,
341
         3601,  3521,  3441,  3364,  3287,  3212,  3137,  3062,  2987,  2915,
342
         2843,  2773,  2704,  2638,  2572,  2508,  2445,  2384,  2324,  2266,
343
         2208,  2153,  2098,  2044,  1990,  1939,  1888,  1839,  1791,  1745,
344
         1699,  1655,  1611,  1569,  1527,  1487,  1448,  1409,  1370,  1331,
345
         1292,  1255,  1218,  1183,  1148,  1115,  1082,  1051,  1020,   990,
346
          960,   932,   904,   878,   852,   826,   801,   777,   753,   731,
347
          709,   687,   666,   645,   625,   605,   586,   567,   550,   533,
348
          516,   499,   482,   465,   449,   433,   418,   403,   389,   375,
349
          362,   349,   337,   325,   314,   303,   293,   283,   273,   263,
350
          254,   245,   236,   227,   219,   211,   204,   197,   190,   183,
351
          177,   171,   165,   159,   153,   147,   141,   135,   130,   125,
352
          120,   115,   110,   105,   101,    97,    93,    89,    85,    81,
353
           77,    74,    71,    68,    65,    62,    59,    56,    53,    51,
354
           49,    47,    45,    43,    41,    39,    37,    35,    33,    31,
355
           29,    27,    25,    23,    22,    21,    20,    19,    18,    17,
356
           16,    15,    14,    13,    12,    11,    10,     9,     8,     7,
357
            6,     5,     4,     3,     2,     1,     0
358
    },
359
    {
360
        16384, 16210, 16036, 15863, 15690, 15517, 15344, 15172, 15000, 14828,
361
        14656, 14485, 14314, 14145, 13976, 13808, 13640, 13472, 13304, 13137,
362
        12970, 12804, 12639, 12475, 12312, 12149, 11987, 11827, 11667, 11508,
363
        11349, 11192, 11035, 10878, 10721, 10565, 10410, 10257, 10104,  9953,
364
         9802,  9654,  9506,  9359,  9213,  9070,  8927,  8787,  8647,  8508,
365
         8369,  8233,  8097,  7964,  7831,  7700,  7570,  7442,  7315,  7190,
366
         7065,  6943,  6821,  6701,  6581,  6461,  6341,  6223,  6105,  5990,
367
         5876,  5764,  5653,  5545,  5437,  5331,  5226,  5124,  5022,  4924,
368
         4826,  4729,  4632,  4538,  4444,  4353,  4262,  4174,  4087,  4002,
369
         3917,  3835,  3753,  3674,  3595,  3518,  3441,  3364,  3287,  3212,
370
         3138,  3066,  2995,  2926,  2858,  2792,  2726,  2662,  2599,  2538,
371
         2478,  2420,  2362,  2305,  2249,  2195,  2141,  2089,  2037,  1988,
372
         1939,  1891,  1844,  1799,  1754,  1711,  1668,  1626,  1584,  1542,
373
         1500,  1459,  1418,  1380,  1342,  1305,  1269,  1234,  1199,  1166,
374
         1133,  1102,  1071,  1041,  1012,   983,   954,   926,   899,   872,
375
          847,   822,   798,   774,   751,   728,   707,   686,   666,   646,
376
          627,   608,   589,   570,   552,   534,   517,   500,   484,   468,
377
          453,   438,   424,   410,   397,   384,   372,   360,   348,   336,
378
          325,   314,   303,   293,   283,   273,   264,   255,   246,   237,
379
          229,   221,   213,   205,   197,   189,   181,   174,   167,   160,
380
          154,   148,   142,   136,   131,   126,   121,   116,   111,   106,
381
          101,    97,    93,    89,    85,    81,    77,    73,    70,    67,
382
           64,    61,    58,    55,    52,    49,    46,    43,    40,    37,
383
           35,    33,    31,    29,    27,    25,    23,    21,    19,    17,
384
           16,    15,    14,    13,    12,    11,    10,     9,     8,     7,
385
            6,     5,     4,     3,     2,     1,     0
386
    },
387
    {
388
        16384, 16218, 16052, 15886, 15720, 15554, 15389, 15224, 15059, 14895,
389
        14731, 14567, 14403, 14240, 14077, 13915, 13753, 13591, 13429, 13269,
390
        13109, 12950, 12791, 12633, 12476, 12320, 12164, 12009, 11854, 11701,
391
        11548, 11396, 11244, 11092, 10940, 10790, 10640, 10492, 10344, 10198,
392
        10052,  9908,  9764,  9622,  9481,  9342,  9203,  9066,  8929,  8793,
393
         8657,  8524,  8391,  8261,  8131,  8003,  7875,  7749,  7624,  7502,
394
         7380,  7260,  7140,  7022,  6904,  6786,  6668,  6551,  6435,  6322,
395
         6209,  6099,  5989,  5881,  5773,  5668,  5563,  5461,  5359,  5260,
396
         5161,  5063,  4965,  4871,  4777,  4686,  4595,  4506,  4417,  4331,
397
         4245,  4162,  4079,  3999,  3919,  3841,  3763,  3685,  3607,  3530,
398
         3454,  3380,  3307,  3236,  3166,  3097,  3029,  2963,  2897,  2834,
399
         2771,  2710,  2650,  2591,  2532,  2475,  2418,  2363,  2309,  2257,
400
         2205,  2155,  2105,  2057,  2009,  1963,  1918,  1873,  1828,  1783,
401
         1738,  1694,  1650,  1607,  1565,  1524,  1484,  1445,  1407,  1369,
402
         1333,  1297,  1263,  1229,  1197,  1165,  1134,  1103,  1073,  1043,
403
         1015,   987,   960,   933,   907,   882,   858,   834,   811,   788,
404
          766,   744,   722,   700,   679,   658,   638,   618,   599,   581,
405
          563,   545,   528,   511,   495,   480,   465,   451,   437,   423,
406
          410,   397,   384,   372,   360,   348,   337,   326,   315,   305,
407
          295,   285,   275,   265,   255,   245,   236,   227,   219,   211,
408
          203,   195,   188,   181,   174,   167,   161,   155,   149,   143,
409
          137,   131,   126,   121,   116,   111,   106,   101,    97,    93,
410
           89,    85,    81,    77,    73,    69,    65,    61,    58,    55,
411
           52,    49,    46,    43,    40,    37,    34,    32,    30,    28,
412
           26,    24,    22,    20,    18,    16,    14,    12,    10,     8,
413
            6,     5,     4,     3,     2,     1,     0
414
    }
415
};
416
417
418
static const uint16_t *const cf_table[16] = {
419
    cf_tables_1[0], cf_tables_1[1], cf_tables_1[2], cf_tables_2[0],
420
    cf_tables_2[1], cf_tables_2[2], cf_tables_2[3], cf_tables_2[4],
421
    cf_tables_2[5], cf_tables_2[6], cf_tables_2[7], cf_tables_3[0],
422
    cf_tables_3[1], cf_tables_3[2], cf_tables_3[3], cf_tables_3[4]
423
};
424
425
426
/** Initialize a given lookup table using a given delta */
427
static void bgmc_lut_fillp(uint8_t *lut, int *lut_status, int delta)
428
3.53k
{
429
3.53k
    unsigned int sx, i;
430
431
60.1k
    for (sx = 0; sx < 16; sx++)
432
3.67M
        for (i = 0; i < LUT_SIZE; i++) {
433
3.62M
            unsigned int target = (i + 1) << (FREQ_BITS - LUT_BITS);
434
3.62M
            unsigned int symbol = 1 << delta;
435
436
15.0M
            while (cf_table[sx][symbol] > target)
437
11.4M
                symbol += 1 << delta;
438
439
3.62M
            *lut++ = symbol >> delta;
440
3.62M
        }
441
442
3.53k
    *lut_status = delta;
443
3.53k
}
444
445
446
/** Retune the index of a suitable lookup table for a given delta */
447
static uint8_t *bgmc_lut_getp(uint8_t *lut, int *lut_status, int delta)
448
62.8k
{
449
62.8k
    unsigned int i = av_clip(delta, 0, LUT_BUFF - 1);
450
451
62.8k
    lut += (i * LUT_SIZE) << 4;
452
453
62.8k
    if (lut_status[i] != delta)
454
3.53k
        bgmc_lut_fillp(lut, &lut_status[i], delta);
455
456
62.8k
    return lut;
457
62.8k
}
458
459
460
/** Initialize the lookup table arrays */
461
av_cold int ff_bgmc_init(void *logctx,
462
                         uint8_t **cf_lut, int **cf_lut_status)
463
550
{
464
550
    *cf_lut        = av_malloc(sizeof(**cf_lut)        * LUT_BUFF * 16 * LUT_SIZE);
465
550
    *cf_lut_status = av_malloc(sizeof(**cf_lut_status) * LUT_BUFF);
466
467
550
    if (!*cf_lut || !*cf_lut_status) {
468
0
        ff_bgmc_end(cf_lut, cf_lut_status);
469
0
        av_log(logctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
470
0
        return AVERROR(ENOMEM);
471
550
    } else {
472
        // initialize lut_status buffer to a value never used to compare against
473
550
        memset(*cf_lut_status, -1, sizeof(**cf_lut_status) * LUT_BUFF);
474
550
    }
475
476
550
    return 0;
477
550
}
478
479
480
/** Release the lookup table arrays */
481
av_cold void ff_bgmc_end(uint8_t **cf_lut, int **cf_lut_status)
482
2.58k
{
483
2.58k
    av_freep(cf_lut);
484
2.58k
    av_freep(cf_lut_status);
485
2.58k
}
486
487
488
/** Initialize decoding and reads the first value */
489
int ff_bgmc_decode_init(GetBitContext *gb, unsigned int *h,
490
                         unsigned int *l, unsigned int *v)
491
25.6k
{
492
25.6k
    if (get_bits_left(gb) < VALUE_BITS)
493
1.87k
        return AVERROR_INVALIDDATA;
494
495
23.7k
    *h = TOP_VALUE;
496
23.7k
    *l = 0;
497
23.7k
    *v = get_bits(gb, VALUE_BITS);
498
499
23.7k
    return 0;
500
25.6k
}
501
502
503
/** Finish decoding */
504
void ff_bgmc_decode_end(GetBitContext *gb)
505
23.4k
{
506
23.4k
    skip_bits_long(gb, -(VALUE_BITS - 2));
507
23.4k
}
508
509
510
/** Read and decode a block Gilbert-Moore coded symbol */
511
void ff_bgmc_decode(GetBitContext *gb, unsigned int num, int32_t *dst,
512
                    int delta, unsigned int sx,
513
                    unsigned int *h, unsigned int *l, unsigned int *v,
514
                    uint8_t *cf_lut, int *cf_lut_status)
515
62.8k
{
516
62.8k
    unsigned int i;
517
62.8k
    uint8_t *lut = bgmc_lut_getp(cf_lut, cf_lut_status, delta);
518
519
    // read current state
520
62.8k
    unsigned int high  = *h;
521
62.8k
    unsigned int low   = *l;
522
62.8k
    unsigned int value = *v;
523
524
62.8k
    lut += sx * LUT_SIZE;
525
526
    // decode num samples
527
22.1M
    for (i = 0; i < num; i++) {
528
22.0M
        unsigned int range  = high - low + 1;
529
22.0M
        unsigned int target = (((value - low + 1) << FREQ_BITS) - 1) / range;
530
22.0M
        unsigned int symbol = lut[target >> (FREQ_BITS - LUT_BITS)] << delta;
531
532
914M
        while (cf_table[sx][symbol] > target)
533
892M
            symbol += 1 << delta;
534
535
22.0M
        symbol = (symbol >> delta) - 1;
536
537
22.0M
        high = low + ((range * cf_table[sx][(symbol)     << delta] - (1 << FREQ_BITS)) >> FREQ_BITS);
538
22.0M
        low  = low + ((range * cf_table[sx][(symbol + 1) << delta])                    >> FREQ_BITS);
539
540
278M
        while (1) {
541
278M
            if (high >= HALF) {
542
42.2M
                if (low >= HALF) {
543
5.91M
                    value -= HALF;
544
5.91M
                    low   -= HALF;
545
5.91M
                    high  -= HALF;
546
36.3M
                } else if (low >= FIRST_QTR && high < THIRD_QTR) {
547
14.2M
                    value -= FIRST_QTR;
548
14.2M
                    low   -= FIRST_QTR;
549
14.2M
                    high  -= FIRST_QTR;
550
14.2M
                } else
551
22.0M
                    break;
552
42.2M
            }
553
554
256M
            low  *= 2;
555
256M
            high  = 2 * high + 1;
556
256M
            value = 2 * value + get_bits1(gb);
557
256M
        }
558
559
22.0M
        *dst++ = symbol;
560
22.0M
    }
561
562
    // save current state
563
62.8k
    *h = high;
564
62.8k
    *l = low;
565
62.8k
    *v = value;
566
62.8k
}