GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/bgmc.c Lines: 67 71 94.4 %
Date: 2019-11-20 04:07:19 Branches: 23 26 88.5 %

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

4
    if (!*cf_lut || !*cf_lut_status) {
467
        ff_bgmc_end(cf_lut, cf_lut_status);
468
        av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
469
        return AVERROR(ENOMEM);
470
    } else {
471
        // initialize lut_status buffer to a value never used to compare against
472
4
        memset(*cf_lut_status, -1, sizeof(**cf_lut_status) * LUT_BUFF);
473
    }
474
475
4
    return 0;
476
}
477
478
479
/** Release the lookup table arrays */
480
14
av_cold void ff_bgmc_end(uint8_t **cf_lut, int **cf_lut_status)
481
{
482
14
    av_freep(cf_lut);
483
14
    av_freep(cf_lut_status);
484
14
}
485
486
487
/** Initialize decoding and reads the first value */
488
1208
int ff_bgmc_decode_init(GetBitContext *gb, unsigned int *h,
489
                         unsigned int *l, unsigned int *v)
490
{
491
1208
    if (get_bits_left(gb) < VALUE_BITS)
492
        return AVERROR_INVALIDDATA;
493
494
1208
    *h = TOP_VALUE;
495
1208
    *l = 0;
496
1208
    *v = get_bits_long(gb, VALUE_BITS);
497
498
1208
    return 0;
499
}
500
501
502
/** Finish decoding */
503
1208
void ff_bgmc_decode_end(GetBitContext *gb)
504
{
505
1208
    skip_bits_long(gb, -(VALUE_BITS - 2));
506
1208
}
507
508
509
/** Read and decode a block Gilbert-Moore coded symbol */
510
2633
void ff_bgmc_decode(GetBitContext *gb, unsigned int num, int32_t *dst,
511
                    int delta, unsigned int sx,
512
                    unsigned int *h, unsigned int *l, unsigned int *v,
513
                    uint8_t *cf_lut, int *cf_lut_status)
514
{
515
    unsigned int i;
516
2633
    uint8_t *lut = bgmc_lut_getp(cf_lut, cf_lut_status, delta);
517
518
    // read current state
519
2633
    unsigned int high  = *h;
520
2633
    unsigned int low   = *l;
521
2633
    unsigned int value = *v;
522
523
2633
    lut += sx * LUT_SIZE;
524
525
    // decode num samples
526
3001923
    for (i = 0; i < num; i++) {
527
2999290
        unsigned int range  = high - low + 1;
528
2999290
        unsigned int target = (((value - low + 1) << FREQ_BITS) - 1) / range;
529
2999290
        unsigned int symbol = lut[target >> (FREQ_BITS - LUT_BITS)] << delta;
530
531
4302332
        while (cf_table[sx][symbol] > target)
532
1303042
            symbol += 1 << delta;
533
534
2999290
        symbol = (symbol >> delta) - 1;
535
536
2999290
        high = low + ((range * cf_table[sx][(symbol)     << delta] - (1 << FREQ_BITS)) >> FREQ_BITS);
537
2999290
        low  = low + ((range * cf_table[sx][(symbol + 1) << delta])                    >> FREQ_BITS);
538
539
        while (1) {
540
17656862
            if (high >= HALF) {
541
11727009
                if (low >= HALF) {
542
5937711
                    value -= HALF;
543
5937711
                    low   -= HALF;
544
5937711
                    high  -= HALF;
545

5789298
                } else if (low >= FIRST_QTR && high < THIRD_QTR) {
546
2790008
                    value -= FIRST_QTR;
547
2790008
                    low   -= FIRST_QTR;
548
2790008
                    high  -= FIRST_QTR;
549
                } else
550
                    break;
551
            }
552
553
14657572
            low  *= 2;
554
14657572
            high  = 2 * high + 1;
555
14657572
            value = 2 * value + get_bits1(gb);
556
        }
557
558
2999290
        *dst++ = symbol;
559
    }
560
561
    // save current state
562
2633
    *h = high;
563
2633
    *l = low;
564
2633
    *v = value;
565
2633
}