Coverage Report

Created: 2024-06-18 06:05

/src/libwebp/src/dsp/cost.c
Line
Count
Source (jump to first uncovered line)
1
// Copyright 2014 Google Inc. All Rights Reserved.
2
//
3
// Use of this source code is governed by a BSD-style license
4
// that can be found in the COPYING file in the root of the source
5
// tree. An additional intellectual property rights grant can be found
6
// in the file PATENTS. All contributing project authors may
7
// be found in the AUTHORS file in the root of the source tree.
8
// -----------------------------------------------------------------------------
9
//
10
// Author: Skal (pascal.massimino@gmail.com)
11
12
#include "src/dsp/dsp.h"
13
#include "src/enc/cost_enc.h"
14
15
//------------------------------------------------------------------------------
16
// Boolean-cost cost table
17
18
const uint16_t VP8EntropyCost[256] = {
19
  1792, 1792, 1792, 1536, 1536, 1408, 1366, 1280, 1280, 1216,
20
  1178, 1152, 1110, 1076, 1061, 1024, 1024,  992,  968,  951,
21
   939,  911,  896,  878,  871,  854,  838,  820,  811,  794,
22
   786,  768,  768,  752,  740,  732,  720,  709,  704,  690,
23
   683,  672,  666,  655,  647,  640,  631,  622,  615,  607,
24
   598,  592,  586,  576,  572,  564,  559,  555,  547,  541,
25
   534,  528,  522,  512,  512,  504,  500,  494,  488,  483,
26
   477,  473,  467,  461,  458,  452,  448,  443,  438,  434,
27
   427,  424,  419,  415,  410,  406,  403,  399,  394,  390,
28
   384,  384,  377,  374,  370,  366,  362,  359,  355,  351,
29
   347,  342,  342,  336,  333,  330,  326,  323,  320,  316,
30
   312,  308,  305,  302,  299,  296,  293,  288,  287,  283,
31
   280,  277,  274,  272,  268,  266,  262,  256,  256,  256,
32
   251,  248,  245,  242,  240,  237,  234,  232,  228,  226,
33
   223,  221,  218,  216,  214,  211,  208,  205,  203,  201,
34
   198,  196,  192,  191,  188,  187,  183,  181,  179,  176,
35
   175,  171,  171,  168,  165,  163,  160,  159,  156,  154,
36
   152,  150,  148,  146,  144,  142,  139,  138,  135,  133,
37
   131,  128,  128,  125,  123,  121,  119,  117,  115,  113,
38
   111,  110,  107,  105,  103,  102,  100,   98,   96,   94,
39
    92,   91,   89,   86,   86,   83,   82,   80,   77,   76,
40
    74,   73,   71,   69,   67,   66,   64,   63,   61,   59,
41
    57,   55,   54,   52,   51,   49,   47,   46,   44,   43,
42
    41,   40,   38,   36,   35,   33,   32,   30,   29,   27,
43
    25,   24,   22,   21,   19,   18,   16,   15,   13,   12,
44
    10,    9,    7,    6,    4,    3
45
};
46
47
//------------------------------------------------------------------------------
48
// Level cost tables
49
50
// fixed costs for coding levels, deduce from the coding tree.
51
// This is only the part that doesn't depend on the probability state.
52
const uint16_t VP8LevelFixedCosts[MAX_LEVEL + 1] = {
53
     0,  256,  256,  256,  256,  432,  618,  630,
54
   731,  640,  640,  828,  901,  948, 1021, 1101,
55
  1174, 1221, 1294, 1042, 1085, 1115, 1158, 1202,
56
  1245, 1275, 1318, 1337, 1380, 1410, 1453, 1497,
57
  1540, 1570, 1613, 1280, 1295, 1317, 1332, 1358,
58
  1373, 1395, 1410, 1454, 1469, 1491, 1506, 1532,
59
  1547, 1569, 1584, 1601, 1616, 1638, 1653, 1679,
60
  1694, 1716, 1731, 1775, 1790, 1812, 1827, 1853,
61
  1868, 1890, 1905, 1727, 1733, 1742, 1748, 1759,
62
  1765, 1774, 1780, 1800, 1806, 1815, 1821, 1832,
63
  1838, 1847, 1853, 1878, 1884, 1893, 1899, 1910,
64
  1916, 1925, 1931, 1951, 1957, 1966, 1972, 1983,
65
  1989, 1998, 2004, 2027, 2033, 2042, 2048, 2059,
66
  2065, 2074, 2080, 2100, 2106, 2115, 2121, 2132,
67
  2138, 2147, 2153, 2178, 2184, 2193, 2199, 2210,
68
  2216, 2225, 2231, 2251, 2257, 2266, 2272, 2283,
69
  2289, 2298, 2304, 2168, 2174, 2183, 2189, 2200,
70
  2206, 2215, 2221, 2241, 2247, 2256, 2262, 2273,
71
  2279, 2288, 2294, 2319, 2325, 2334, 2340, 2351,
72
  2357, 2366, 2372, 2392, 2398, 2407, 2413, 2424,
73
  2430, 2439, 2445, 2468, 2474, 2483, 2489, 2500,
74
  2506, 2515, 2521, 2541, 2547, 2556, 2562, 2573,
75
  2579, 2588, 2594, 2619, 2625, 2634, 2640, 2651,
76
  2657, 2666, 2672, 2692, 2698, 2707, 2713, 2724,
77
  2730, 2739, 2745, 2540, 2546, 2555, 2561, 2572,
78
  2578, 2587, 2593, 2613, 2619, 2628, 2634, 2645,
79
  2651, 2660, 2666, 2691, 2697, 2706, 2712, 2723,
80
  2729, 2738, 2744, 2764, 2770, 2779, 2785, 2796,
81
  2802, 2811, 2817, 2840, 2846, 2855, 2861, 2872,
82
  2878, 2887, 2893, 2913, 2919, 2928, 2934, 2945,
83
  2951, 2960, 2966, 2991, 2997, 3006, 3012, 3023,
84
  3029, 3038, 3044, 3064, 3070, 3079, 3085, 3096,
85
  3102, 3111, 3117, 2981, 2987, 2996, 3002, 3013,
86
  3019, 3028, 3034, 3054, 3060, 3069, 3075, 3086,
87
  3092, 3101, 3107, 3132, 3138, 3147, 3153, 3164,
88
  3170, 3179, 3185, 3205, 3211, 3220, 3226, 3237,
89
  3243, 3252, 3258, 3281, 3287, 3296, 3302, 3313,
90
  3319, 3328, 3334, 3354, 3360, 3369, 3375, 3386,
91
  3392, 3401, 3407, 3432, 3438, 3447, 3453, 3464,
92
  3470, 3479, 3485, 3505, 3511, 3520, 3526, 3537,
93
  3543, 3552, 3558, 2816, 2822, 2831, 2837, 2848,
94
  2854, 2863, 2869, 2889, 2895, 2904, 2910, 2921,
95
  2927, 2936, 2942, 2967, 2973, 2982, 2988, 2999,
96
  3005, 3014, 3020, 3040, 3046, 3055, 3061, 3072,
97
  3078, 3087, 3093, 3116, 3122, 3131, 3137, 3148,
98
  3154, 3163, 3169, 3189, 3195, 3204, 3210, 3221,
99
  3227, 3236, 3242, 3267, 3273, 3282, 3288, 3299,
100
  3305, 3314, 3320, 3340, 3346, 3355, 3361, 3372,
101
  3378, 3387, 3393, 3257, 3263, 3272, 3278, 3289,
102
  3295, 3304, 3310, 3330, 3336, 3345, 3351, 3362,
103
  3368, 3377, 3383, 3408, 3414, 3423, 3429, 3440,
104
  3446, 3455, 3461, 3481, 3487, 3496, 3502, 3513,
105
  3519, 3528, 3534, 3557, 3563, 3572, 3578, 3589,
106
  3595, 3604, 3610, 3630, 3636, 3645, 3651, 3662,
107
  3668, 3677, 3683, 3708, 3714, 3723, 3729, 3740,
108
  3746, 3755, 3761, 3781, 3787, 3796, 3802, 3813,
109
  3819, 3828, 3834, 3629, 3635, 3644, 3650, 3661,
110
  3667, 3676, 3682, 3702, 3708, 3717, 3723, 3734,
111
  3740, 3749, 3755, 3780, 3786, 3795, 3801, 3812,
112
  3818, 3827, 3833, 3853, 3859, 3868, 3874, 3885,
113
  3891, 3900, 3906, 3929, 3935, 3944, 3950, 3961,
114
  3967, 3976, 3982, 4002, 4008, 4017, 4023, 4034,
115
  4040, 4049, 4055, 4080, 4086, 4095, 4101, 4112,
116
  4118, 4127, 4133, 4153, 4159, 4168, 4174, 4185,
117
  4191, 4200, 4206, 4070, 4076, 4085, 4091, 4102,
118
  4108, 4117, 4123, 4143, 4149, 4158, 4164, 4175,
119
  4181, 4190, 4196, 4221, 4227, 4236, 4242, 4253,
120
  4259, 4268, 4274, 4294, 4300, 4309, 4315, 4326,
121
  4332, 4341, 4347, 4370, 4376, 4385, 4391, 4402,
122
  4408, 4417, 4423, 4443, 4449, 4458, 4464, 4475,
123
  4481, 4490, 4496, 4521, 4527, 4536, 4542, 4553,
124
  4559, 4568, 4574, 4594, 4600, 4609, 4615, 4626,
125
  4632, 4641, 4647, 3515, 3521, 3530, 3536, 3547,
126
  3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
127
  3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
128
  3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
129
  3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
130
  3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
131
  3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
132
  4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
133
  4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
134
  3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
135
  4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
136
  4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
137
  4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
138
  4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
139
  4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
140
  4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
141
  4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
142
  4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
143
  4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
144
  4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
145
  4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
146
  4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
147
  4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
148
  4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
149
  4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
150
  4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
151
  4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
152
  4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
153
  5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
154
  5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
155
  5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
156
  5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
157
  5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
158
  4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
159
  4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
160
  4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
161
  4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
162
  4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
163
  5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
164
  5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
165
  5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
166
  5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
167
  5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
168
  5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
169
  5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
170
  5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
171
  5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
172
  5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
173
  5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
174
  5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
175
  5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
176
  5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
177
  5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
178
  5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
179
  5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
180
  5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
181
  5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
182
  5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
183
  5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
184
  6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
185
  6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
186
  6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
187
  6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
188
  6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
189
  6420, 6429, 6435, 3515, 3521, 3530, 3536, 3547,
190
  3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
191
  3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
192
  3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
193
  3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
194
  3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
195
  3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
196
  4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
197
  4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
198
  3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
199
  4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
200
  4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
201
  4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
202
  4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
203
  4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
204
  4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
205
  4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
206
  4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
207
  4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
208
  4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
209
  4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
210
  4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
211
  4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
212
  4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
213
  4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
214
  4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
215
  4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
216
  4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
217
  5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
218
  5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
219
  5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
220
  5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
221
  5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
222
  4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
223
  4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
224
  4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
225
  4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
226
  4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
227
  5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
228
  5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
229
  5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
230
  5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
231
  5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
232
  5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
233
  5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
234
  5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
235
  5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
236
  5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
237
  5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
238
  5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
239
  5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
240
  5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
241
  5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
242
  5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
243
  5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
244
  5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
245
  5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
246
  5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
247
  5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
248
  6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
249
  6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
250
  6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
251
  6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
252
  6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
253
  6420, 6429, 6435, 5303, 5309, 5318, 5324, 5335,
254
  5341, 5350, 5356, 5376, 5382, 5391, 5397, 5408,
255
  5414, 5423, 5429, 5454, 5460, 5469, 5475, 5486,
256
  5492, 5501, 5507, 5527, 5533, 5542, 5548, 5559,
257
  5565, 5574, 5580, 5603, 5609, 5618, 5624, 5635,
258
  5641, 5650, 5656, 5676, 5682, 5691, 5697, 5708,
259
  5714, 5723, 5729, 5754, 5760, 5769, 5775, 5786,
260
  5792, 5801, 5807, 5827, 5833, 5842, 5848, 5859,
261
  5865, 5874, 5880, 5744, 5750, 5759, 5765, 5776,
262
  5782, 5791, 5797, 5817, 5823, 5832, 5838, 5849,
263
  5855, 5864, 5870, 5895, 5901, 5910, 5916, 5927,
264
  5933, 5942, 5948, 5968, 5974, 5983, 5989, 6000,
265
  6006, 6015, 6021, 6044, 6050, 6059, 6065, 6076,
266
  6082, 6091, 6097, 6117, 6123, 6132, 6138, 6149,
267
  6155, 6164, 6170, 6195, 6201, 6210, 6216, 6227,
268
  6233, 6242, 6248, 6268, 6274, 6283, 6289, 6300,
269
  6306, 6315, 6321, 6116, 6122, 6131, 6137, 6148,
270
  6154, 6163, 6169, 6189, 6195, 6204, 6210, 6221,
271
  6227, 6236, 6242, 6267, 6273, 6282, 6288, 6299,
272
  6305, 6314, 6320, 6340, 6346, 6355, 6361, 6372,
273
  6378, 6387, 6393, 6416, 6422, 6431, 6437, 6448,
274
  6454, 6463, 6469, 6489, 6495, 6504, 6510, 6521,
275
  6527, 6536, 6542, 6567, 6573, 6582, 6588, 6599,
276
  6605, 6614, 6620, 6640, 6646, 6655, 6661, 6672,
277
  6678, 6687, 6693, 6557, 6563, 6572, 6578, 6589,
278
  6595, 6604, 6610, 6630, 6636, 6645, 6651, 6662,
279
  6668, 6677, 6683, 6708, 6714, 6723, 6729, 6740,
280
  6746, 6755, 6761, 6781, 6787, 6796, 6802, 6813,
281
  6819, 6828, 6834, 6857, 6863, 6872, 6878, 6889,
282
  6895, 6904, 6910, 6930, 6936, 6945, 6951, 6962,
283
  6968, 6977, 6983, 7008, 7014, 7023, 7029, 7040,
284
  7046, 7055, 7061, 7081, 7087, 7096, 7102, 7113,
285
  7119, 7128, 7134, 6392, 6398, 6407, 6413, 6424,
286
  6430, 6439, 6445, 6465, 6471, 6480, 6486, 6497,
287
  6503, 6512, 6518, 6543, 6549, 6558, 6564, 6575,
288
  6581, 6590, 6596, 6616, 6622, 6631, 6637, 6648,
289
  6654, 6663, 6669, 6692, 6698, 6707, 6713, 6724,
290
  6730, 6739, 6745, 6765, 6771, 6780, 6786, 6797,
291
  6803, 6812, 6818, 6843, 6849, 6858, 6864, 6875,
292
  6881, 6890, 6896, 6916, 6922, 6931, 6937, 6948,
293
  6954, 6963, 6969, 6833, 6839, 6848, 6854, 6865,
294
  6871, 6880, 6886, 6906, 6912, 6921, 6927, 6938,
295
  6944, 6953, 6959, 6984, 6990, 6999, 7005, 7016,
296
  7022, 7031, 7037, 7057, 7063, 7072, 7078, 7089,
297
  7095, 7104, 7110, 7133, 7139, 7148, 7154, 7165,
298
  7171, 7180, 7186, 7206, 7212, 7221, 7227, 7238,
299
  7244, 7253, 7259, 7284, 7290, 7299, 7305, 7316,
300
  7322, 7331, 7337, 7357, 7363, 7372, 7378, 7389,
301
  7395, 7404, 7410, 7205, 7211, 7220, 7226, 7237,
302
  7243, 7252, 7258, 7278, 7284, 7293, 7299, 7310,
303
  7316, 7325, 7331, 7356, 7362, 7371, 7377, 7388,
304
  7394, 7403, 7409, 7429, 7435, 7444, 7450, 7461,
305
  7467, 7476, 7482, 7505, 7511, 7520, 7526, 7537,
306
  7543, 7552, 7558, 7578, 7584, 7593, 7599, 7610,
307
  7616, 7625, 7631, 7656, 7662, 7671, 7677, 7688,
308
  7694, 7703, 7709, 7729, 7735, 7744, 7750, 7761
309
};
310
311
//------------------------------------------------------------------------------
312
// Tables for level coding
313
314
const uint8_t VP8EncBands[16 + 1] = {
315
  0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
316
  0  // sentinel
317
};
318
319
//------------------------------------------------------------------------------
320
// Mode costs
321
322
0
static int GetResidualCost_C(int ctx0, const VP8Residual* const res) {
323
0
  int n = res->first;
324
  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
325
0
  const int p0 = res->prob[n][ctx0][0];
326
0
  CostArrayPtr const costs = res->costs;
327
0
  const uint16_t* t = costs[n][ctx0];
328
  // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0
329
  // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll
330
  // be missing during the loop.
331
0
  int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
332
333
0
  if (res->last < 0) {
334
0
    return VP8BitCost(0, p0);
335
0
  }
336
0
  for (; n < res->last; ++n) {
337
0
    const int v = abs(res->coeffs[n]);
338
0
    const int ctx = (v >= 2) ? 2 : v;
339
0
    cost += VP8LevelCost(t, v);
340
0
    t = costs[n + 1][ctx];
341
0
  }
342
  // Last coefficient is always non-zero
343
0
  {
344
0
    const int v = abs(res->coeffs[n]);
345
0
    assert(v != 0);
346
0
    cost += VP8LevelCost(t, v);
347
0
    if (n < 15) {
348
0
      const int b = VP8EncBands[n + 1];
349
0
      const int ctx = (v == 1) ? 1 : 2;
350
0
      const int last_p0 = res->prob[b][ctx][0];
351
0
      cost += VP8BitCost(0, last_p0);
352
0
    }
353
0
  }
354
0
  return cost;
355
0
}
356
357
static void SetResidualCoeffs_C(const int16_t* const coeffs,
358
0
                                VP8Residual* const res) {
359
0
  int n;
360
0
  res->last = -1;
361
0
  assert(res->first == 0 || coeffs[0] == 0);
362
0
  for (n = 15; n >= 0; --n) {
363
0
    if (coeffs[n]) {
364
0
      res->last = n;
365
0
      break;
366
0
    }
367
0
  }
368
0
  res->coeffs = coeffs;
369
0
}
370
371
//------------------------------------------------------------------------------
372
// init function
373
374
VP8GetResidualCostFunc VP8GetResidualCost;
375
VP8SetResidualCoeffsFunc VP8SetResidualCoeffs;
376
377
extern VP8CPUInfo VP8GetCPUInfo;
378
extern void VP8EncDspCostInitMIPS32(void);
379
extern void VP8EncDspCostInitMIPSdspR2(void);
380
extern void VP8EncDspCostInitSSE2(void);
381
extern void VP8EncDspCostInitNEON(void);
382
383
0
WEBP_DSP_INIT_FUNC(VP8EncDspCostInit) {
384
0
  VP8GetResidualCost = GetResidualCost_C;
385
0
  VP8SetResidualCoeffs = SetResidualCoeffs_C;
386
387
  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
388
0
  if (VP8GetCPUInfo != NULL) {
389
#if defined(WEBP_USE_MIPS32)
390
    if (VP8GetCPUInfo(kMIPS32)) {
391
      VP8EncDspCostInitMIPS32();
392
    }
393
#endif
394
#if defined(WEBP_USE_MIPS_DSP_R2)
395
    if (VP8GetCPUInfo(kMIPSdspR2)) {
396
      VP8EncDspCostInitMIPSdspR2();
397
    }
398
#endif
399
0
#if defined(WEBP_HAVE_SSE2)
400
0
    if (VP8GetCPUInfo(kSSE2)) {
401
0
      VP8EncDspCostInitSSE2();
402
0
    }
403
0
#endif
404
#if defined(WEBP_HAVE_NEON)
405
    if (VP8GetCPUInfo(kNEON)) {
406
      VP8EncDspCostInitNEON();
407
    }
408
#endif
409
0
  }
410
0
}
411
412
//------------------------------------------------------------------------------