Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/libwebp/src/dsp/cost.c
9913 views
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 ([email protected])
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
static int GetResidualCost_C(int ctx0, const VP8Residual* const res) {
323
int n = res->first;
324
// should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
325
const int p0 = res->prob[n][ctx0][0];
326
CostArrayPtr const costs = res->costs;
327
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
int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
332
333
if (res->last < 0) {
334
return VP8BitCost(0, p0);
335
}
336
for (; n < res->last; ++n) {
337
const int v = abs(res->coeffs[n]);
338
const int ctx = (v >= 2) ? 2 : v;
339
cost += VP8LevelCost(t, v);
340
t = costs[n + 1][ctx];
341
}
342
// Last coefficient is always non-zero
343
{
344
const int v = abs(res->coeffs[n]);
345
assert(v != 0);
346
cost += VP8LevelCost(t, v);
347
if (n < 15) {
348
const int b = VP8EncBands[n + 1];
349
const int ctx = (v == 1) ? 1 : 2;
350
const int last_p0 = res->prob[b][ctx][0];
351
cost += VP8BitCost(0, last_p0);
352
}
353
}
354
return cost;
355
}
356
357
static void SetResidualCoeffs_C(const int16_t* WEBP_RESTRICT const coeffs,
358
VP8Residual* WEBP_RESTRICT const res) {
359
int n;
360
res->last = -1;
361
assert(res->first == 0 || coeffs[0] == 0);
362
for (n = 15; n >= 0; --n) {
363
if (coeffs[n]) {
364
res->last = n;
365
break;
366
}
367
}
368
res->coeffs = coeffs;
369
}
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
WEBP_DSP_INIT_FUNC(VP8EncDspCostInit) {
384
VP8GetResidualCost = GetResidualCost_C;
385
VP8SetResidualCoeffs = SetResidualCoeffs_C;
386
387
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
388
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
#if defined(WEBP_HAVE_SSE2)
400
if (VP8GetCPUInfo(kSSE2)) {
401
VP8EncDspCostInitSSE2();
402
}
403
#endif
404
#if defined(WEBP_HAVE_NEON)
405
if (VP8GetCPUInfo(kNEON)) {
406
VP8EncDspCostInitNEON();
407
}
408
#endif
409
}
410
}
411
412
//------------------------------------------------------------------------------
413
414