1 // Copyright 2011 Google Inc. All Rights Reserved.
2 //
3 // This code is licensed under the same terms as WebM:
4 // Software License Agreement: http://www.webmproject.org/license/software/
5 // Additional IP Rights Grant: http://www.webmproject.org/license/additional/
6 // -----------------------------------------------------------------------------
7 //
8 // Cost tables for level and modes
9 //
10 // Author: Skal (pascal.massimino@gmail.com)
11
12 #include "./cost.h"
13
14 #if defined(__cplusplus) || defined(c_plusplus)
15 extern "C" {
16 #endif
17
18 //------------------------------------------------------------------------------
19 // Boolean-cost cost table
20
21 const uint16_t VP8EntropyCost[256] = {
22 1792, 1792, 1792, 1536, 1536, 1408, 1366, 1280, 1280, 1216,
23 1178, 1152, 1110, 1076, 1061, 1024, 1024, 992, 968, 951,
24 939, 911, 896, 878, 871, 854, 838, 820, 811, 794,
25 786, 768, 768, 752, 740, 732, 720, 709, 704, 690,
26 683, 672, 666, 655, 647, 640, 631, 622, 615, 607,
27 598, 592, 586, 576, 572, 564, 559, 555, 547, 541,
28 534, 528, 522, 512, 512, 504, 500, 494, 488, 483,
29 477, 473, 467, 461, 458, 452, 448, 443, 438, 434,
30 427, 424, 419, 415, 410, 406, 403, 399, 394, 390,
31 384, 384, 377, 374, 370, 366, 362, 359, 355, 351,
32 347, 342, 342, 336, 333, 330, 326, 323, 320, 316,
33 312, 308, 305, 302, 299, 296, 293, 288, 287, 283,
34 280, 277, 274, 272, 268, 266, 262, 256, 256, 256,
35 251, 248, 245, 242, 240, 237, 234, 232, 228, 226,
36 223, 221, 218, 216, 214, 211, 208, 205, 203, 201,
37 198, 196, 192, 191, 188, 187, 183, 181, 179, 176,
38 175, 171, 171, 168, 165, 163, 160, 159, 156, 154,
39 152, 150, 148, 146, 144, 142, 139, 138, 135, 133,
40 131, 128, 128, 125, 123, 121, 119, 117, 115, 113,
41 111, 110, 107, 105, 103, 102, 100, 98, 96, 94,
42 92, 91, 89, 86, 86, 83, 82, 80, 77, 76,
43 74, 73, 71, 69, 67, 66, 64, 63, 61, 59,
44 57, 55, 54, 52, 51, 49, 47, 46, 44, 43,
45 41, 40, 38, 36, 35, 33, 32, 30, 29, 27,
46 25, 24, 22, 21, 19, 18, 16, 15, 13, 12,
47 10, 9, 7, 6, 4, 3
48 };
49
50 //------------------------------------------------------------------------------
51 // Level cost tables
52
53 // For each given level, the following table gives the pattern of contexts to
54 // use for coding it (in [][0]) as well as the bit value to use for each
55 // context (in [][1]).
56 const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2] = {
57 {0x001, 0x000}, {0x007, 0x001}, {0x00f, 0x005},
58 {0x00f, 0x00d}, {0x033, 0x003}, {0x033, 0x003}, {0x033, 0x023},
59 {0x033, 0x023}, {0x033, 0x023}, {0x033, 0x023}, {0x0d3, 0x013},
60 {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013},
61 {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x093},
62 {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
63 {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
64 {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
65 {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x153, 0x053},
66 {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
67 {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
68 {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
69 {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
70 {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
71 {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
72 {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
73 {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x153}
74 };
75
76 // fixed costs for coding levels, deduce from the coding tree.
77 // This is only the part that doesn't depend on the probability state.
78 const uint16_t VP8LevelFixedCosts[2048] = {
79 0, 256, 256, 256, 256, 432, 618, 630,
80 731, 640, 640, 828, 901, 948, 1021, 1101,
81 1174, 1221, 1294, 1042, 1085, 1115, 1158, 1202,
82 1245, 1275, 1318, 1337, 1380, 1410, 1453, 1497,
83 1540, 1570, 1613, 1280, 1295, 1317, 1332, 1358,
84 1373, 1395, 1410, 1454, 1469, 1491, 1506, 1532,
85 1547, 1569, 1584, 1601, 1616, 1638, 1653, 1679,
86 1694, 1716, 1731, 1775, 1790, 1812, 1827, 1853,
87 1868, 1890, 1905, 1727, 1733, 1742, 1748, 1759,
88 1765, 1774, 1780, 1800, 1806, 1815, 1821, 1832,
89 1838, 1847, 1853, 1878, 1884, 1893, 1899, 1910,
90 1916, 1925, 1931, 1951, 1957, 1966, 1972, 1983,
91 1989, 1998, 2004, 2027, 2033, 2042, 2048, 2059,
92 2065, 2074, 2080, 2100, 2106, 2115, 2121, 2132,
93 2138, 2147, 2153, 2178, 2184, 2193, 2199, 2210,
94 2216, 2225, 2231, 2251, 2257, 2266, 2272, 2283,
95 2289, 2298, 2304, 2168, 2174, 2183, 2189, 2200,
96 2206, 2215, 2221, 2241, 2247, 2256, 2262, 2273,
97 2279, 2288, 2294, 2319, 2325, 2334, 2340, 2351,
98 2357, 2366, 2372, 2392, 2398, 2407, 2413, 2424,
99 2430, 2439, 2445, 2468, 2474, 2483, 2489, 2500,
100 2506, 2515, 2521, 2541, 2547, 2556, 2562, 2573,
101 2579, 2588, 2594, 2619, 2625, 2634, 2640, 2651,
102 2657, 2666, 2672, 2692, 2698, 2707, 2713, 2724,
103 2730, 2739, 2745, 2540, 2546, 2555, 2561, 2572,
104 2578, 2587, 2593, 2613, 2619, 2628, 2634, 2645,
105 2651, 2660, 2666, 2691, 2697, 2706, 2712, 2723,
106 2729, 2738, 2744, 2764, 2770, 2779, 2785, 2796,
107 2802, 2811, 2817, 2840, 2846, 2855, 2861, 2872,
108 2878, 2887, 2893, 2913, 2919, 2928, 2934, 2945,
109 2951, 2960, 2966, 2991, 2997, 3006, 3012, 3023,
110 3029, 3038, 3044, 3064, 3070, 3079, 3085, 3096,
111 3102, 3111, 3117, 2981, 2987, 2996, 3002, 3013,
112 3019, 3028, 3034, 3054, 3060, 3069, 3075, 3086,
113 3092, 3101, 3107, 3132, 3138, 3147, 3153, 3164,
114 3170, 3179, 3185, 3205, 3211, 3220, 3226, 3237,
115 3243, 3252, 3258, 3281, 3287, 3296, 3302, 3313,
116 3319, 3328, 3334, 3354, 3360, 3369, 3375, 3386,
117 3392, 3401, 3407, 3432, 3438, 3447, 3453, 3464,
118 3470, 3479, 3485, 3505, 3511, 3520, 3526, 3537,
119 3543, 3552, 3558, 2816, 2822, 2831, 2837, 2848,
120 2854, 2863, 2869, 2889, 2895, 2904, 2910, 2921,
121 2927, 2936, 2942, 2967, 2973, 2982, 2988, 2999,
122 3005, 3014, 3020, 3040, 3046, 3055, 3061, 3072,
123 3078, 3087, 3093, 3116, 3122, 3131, 3137, 3148,
124 3154, 3163, 3169, 3189, 3195, 3204, 3210, 3221,
125 3227, 3236, 3242, 3267, 3273, 3282, 3288, 3299,
126 3305, 3314, 3320, 3340, 3346, 3355, 3361, 3372,
127 3378, 3387, 3393, 3257, 3263, 3272, 3278, 3289,
128 3295, 3304, 3310, 3330, 3336, 3345, 3351, 3362,
129 3368, 3377, 3383, 3408, 3414, 3423, 3429, 3440,
130 3446, 3455, 3461, 3481, 3487, 3496, 3502, 3513,
131 3519, 3528, 3534, 3557, 3563, 3572, 3578, 3589,
132 3595, 3604, 3610, 3630, 3636, 3645, 3651, 3662,
133 3668, 3677, 3683, 3708, 3714, 3723, 3729, 3740,
134 3746, 3755, 3761, 3781, 3787, 3796, 3802, 3813,
135 3819, 3828, 3834, 3629, 3635, 3644, 3650, 3661,
136 3667, 3676, 3682, 3702, 3708, 3717, 3723, 3734,
137 3740, 3749, 3755, 3780, 3786, 3795, 3801, 3812,
138 3818, 3827, 3833, 3853, 3859, 3868, 3874, 3885,
139 3891, 3900, 3906, 3929, 3935, 3944, 3950, 3961,
140 3967, 3976, 3982, 4002, 4008, 4017, 4023, 4034,
141 4040, 4049, 4055, 4080, 4086, 4095, 4101, 4112,
142 4118, 4127, 4133, 4153, 4159, 4168, 4174, 4185,
143 4191, 4200, 4206, 4070, 4076, 4085, 4091, 4102,
144 4108, 4117, 4123, 4143, 4149, 4158, 4164, 4175,
145 4181, 4190, 4196, 4221, 4227, 4236, 4242, 4253,
146 4259, 4268, 4274, 4294, 4300, 4309, 4315, 4326,
147 4332, 4341, 4347, 4370, 4376, 4385, 4391, 4402,
148 4408, 4417, 4423, 4443, 4449, 4458, 4464, 4475,
149 4481, 4490, 4496, 4521, 4527, 4536, 4542, 4553,
150 4559, 4568, 4574, 4594, 4600, 4609, 4615, 4626,
151 4632, 4641, 4647, 3515, 3521, 3530, 3536, 3547,
152 3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
153 3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
154 3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
155 3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
156 3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
157 3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
158 4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
159 4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
160 3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
161 4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
162 4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
163 4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
164 4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
165 4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
166 4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
167 4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
168 4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
169 4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
170 4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
171 4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
172 4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
173 4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
174 4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
175 4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
176 4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
177 4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
178 4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
179 5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
180 5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
181 5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
182 5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
183 5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
184 4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
185 4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
186 4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
187 4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
188 4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
189 5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
190 5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
191 5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
192 5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
193 5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
194 5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
195 5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
196 5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
197 5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
198 5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
199 5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
200 5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
201 5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
202 5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
203 5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
204 5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
205 5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
206 5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
207 5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
208 5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
209 5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
210 6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
211 6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
212 6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
213 6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
214 6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
215 6420, 6429, 6435, 3515, 3521, 3530, 3536, 3547,
216 3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
217 3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
218 3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
219 3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
220 3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
221 3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
222 4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
223 4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
224 3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
225 4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
226 4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
227 4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
228 4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
229 4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
230 4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
231 4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
232 4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
233 4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
234 4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
235 4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
236 4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
237 4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
238 4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
239 4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
240 4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
241 4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
242 4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
243 5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
244 5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
245 5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
246 5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
247 5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
248 4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
249 4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
250 4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
251 4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
252 4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
253 5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
254 5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
255 5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
256 5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
257 5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
258 5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
259 5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
260 5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
261 5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
262 5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
263 5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
264 5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
265 5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
266 5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
267 5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
268 5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
269 5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
270 5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
271 5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
272 5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
273 5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
274 6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
275 6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
276 6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
277 6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
278 6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
279 6420, 6429, 6435, 5303, 5309, 5318, 5324, 5335,
280 5341, 5350, 5356, 5376, 5382, 5391, 5397, 5408,
281 5414, 5423, 5429, 5454, 5460, 5469, 5475, 5486,
282 5492, 5501, 5507, 5527, 5533, 5542, 5548, 5559,
283 5565, 5574, 5580, 5603, 5609, 5618, 5624, 5635,
284 5641, 5650, 5656, 5676, 5682, 5691, 5697, 5708,
285 5714, 5723, 5729, 5754, 5760, 5769, 5775, 5786,
286 5792, 5801, 5807, 5827, 5833, 5842, 5848, 5859,
287 5865, 5874, 5880, 5744, 5750, 5759, 5765, 5776,
288 5782, 5791, 5797, 5817, 5823, 5832, 5838, 5849,
289 5855, 5864, 5870, 5895, 5901, 5910, 5916, 5927,
290 5933, 5942, 5948, 5968, 5974, 5983, 5989, 6000,
291 6006, 6015, 6021, 6044, 6050, 6059, 6065, 6076,
292 6082, 6091, 6097, 6117, 6123, 6132, 6138, 6149,
293 6155, 6164, 6170, 6195, 6201, 6210, 6216, 6227,
294 6233, 6242, 6248, 6268, 6274, 6283, 6289, 6300,
295 6306, 6315, 6321, 6116, 6122, 6131, 6137, 6148,
296 6154, 6163, 6169, 6189, 6195, 6204, 6210, 6221,
297 6227, 6236, 6242, 6267, 6273, 6282, 6288, 6299,
298 6305, 6314, 6320, 6340, 6346, 6355, 6361, 6372,
299 6378, 6387, 6393, 6416, 6422, 6431, 6437, 6448,
300 6454, 6463, 6469, 6489, 6495, 6504, 6510, 6521,
301 6527, 6536, 6542, 6567, 6573, 6582, 6588, 6599,
302 6605, 6614, 6620, 6640, 6646, 6655, 6661, 6672,
303 6678, 6687, 6693, 6557, 6563, 6572, 6578, 6589,
304 6595, 6604, 6610, 6630, 6636, 6645, 6651, 6662,
305 6668, 6677, 6683, 6708, 6714, 6723, 6729, 6740,
306 6746, 6755, 6761, 6781, 6787, 6796, 6802, 6813,
307 6819, 6828, 6834, 6857, 6863, 6872, 6878, 6889,
308 6895, 6904, 6910, 6930, 6936, 6945, 6951, 6962,
309 6968, 6977, 6983, 7008, 7014, 7023, 7029, 7040,
310 7046, 7055, 7061, 7081, 7087, 7096, 7102, 7113,
311 7119, 7128, 7134, 6392, 6398, 6407, 6413, 6424,
312 6430, 6439, 6445, 6465, 6471, 6480, 6486, 6497,
313 6503, 6512, 6518, 6543, 6549, 6558, 6564, 6575,
314 6581, 6590, 6596, 6616, 6622, 6631, 6637, 6648,
315 6654, 6663, 6669, 6692, 6698, 6707, 6713, 6724,
316 6730, 6739, 6745, 6765, 6771, 6780, 6786, 6797,
317 6803, 6812, 6818, 6843, 6849, 6858, 6864, 6875,
318 6881, 6890, 6896, 6916, 6922, 6931, 6937, 6948,
319 6954, 6963, 6969, 6833, 6839, 6848, 6854, 6865,
320 6871, 6880, 6886, 6906, 6912, 6921, 6927, 6938,
321 6944, 6953, 6959, 6984, 6990, 6999, 7005, 7016,
322 7022, 7031, 7037, 7057, 7063, 7072, 7078, 7089,
323 7095, 7104, 7110, 7133, 7139, 7148, 7154, 7165,
324 7171, 7180, 7186, 7206, 7212, 7221, 7227, 7238,
325 7244, 7253, 7259, 7284, 7290, 7299, 7305, 7316,
326 7322, 7331, 7337, 7357, 7363, 7372, 7378, 7389,
327 7395, 7404, 7410, 7205, 7211, 7220, 7226, 7237,
328 7243, 7252, 7258, 7278, 7284, 7293, 7299, 7310,
329 7316, 7325, 7331, 7356, 7362, 7371, 7377, 7388,
330 7394, 7403, 7409, 7429, 7435, 7444, 7450, 7461,
331 7467, 7476, 7482, 7505, 7511, 7520, 7526, 7537,
332 7543, 7552, 7558, 7578, 7584, 7593, 7599, 7610,
333 7616, 7625, 7631, 7656, 7662, 7671, 7677, 7688,
334 7694, 7703, 7709, 7729, 7735, 7744, 7750, 7761
335 };
336
VariableLevelCost(int level,const uint8_t probas[NUM_PROBAS])337 static int VariableLevelCost(int level, const uint8_t probas[NUM_PROBAS]) {
338 int pattern = VP8LevelCodes[level - 1][0];
339 int bits = VP8LevelCodes[level - 1][1];
340 int cost = 0;
341 int i;
342 for (i = 2; pattern; ++i) {
343 if (pattern & 1) {
344 cost += VP8BitCost(bits & 1, probas[i]);
345 }
346 bits >>= 1;
347 pattern >>= 1;
348 }
349 return cost;
350 }
351
352 //------------------------------------------------------------------------------
353 // Pre-calc level costs once for all
354
VP8CalculateLevelCosts(VP8Proba * const proba)355 void VP8CalculateLevelCosts(VP8Proba* const proba) {
356 int ctype, band, ctx;
357
358 if (!proba->dirty_) return; // nothing to do.
359
360 for (ctype = 0; ctype < NUM_TYPES; ++ctype) {
361 for (band = 0; band < NUM_BANDS; ++band) {
362 for(ctx = 0; ctx < NUM_CTX; ++ctx) {
363 const uint8_t* const p = proba->coeffs_[ctype][band][ctx];
364 uint16_t* const table = proba->level_cost_[ctype][band][ctx];
365 const int cost_base = VP8BitCost(1, p[1]);
366 int v;
367 table[0] = VP8BitCost(0, p[1]);
368 for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) {
369 table[v] = cost_base + VariableLevelCost(v, p);
370 }
371 // Starting at level 67 and up, the variable part of the cost is
372 // actually constant.
373 }
374 }
375 }
376 proba->dirty_ = 0;
377 }
378
379 //------------------------------------------------------------------------------
380 // Mode cost tables.
381
382 // These are the fixed probabilities (in the coding trees) turned into bit-cost
383 // by calling VP8BitCost().
384 const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 };
385 // note: these values include the fixed VP8BitCost(1, 145) mode selection cost.
386 const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 };
387 const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES] = {
388 { { 251, 1362, 1934, 2085, 2314, 2230, 1839, 1988, 2437, 2348 },
389 { 403, 680, 1507, 1519, 2060, 2005, 1992, 1914, 1924, 1733 },
390 { 353, 1121, 973, 1895, 2060, 1787, 1671, 1516, 2012, 1868 },
391 { 770, 852, 1581, 632, 1393, 1780, 1823, 1936, 1074, 1218 },
392 { 510, 1270, 1467, 1319, 847, 1279, 1792, 2094, 1080, 1353 },
393 { 488, 1322, 918, 1573, 1300, 883, 1814, 1752, 1756, 1502 },
394 { 425, 992, 1820, 1514, 1843, 2440, 937, 1771, 1924, 1129 },
395 { 363, 1248, 1257, 1970, 2194, 2385, 1569, 953, 1951, 1601 },
396 { 723, 1257, 1631, 964, 963, 1508, 1697, 1824, 671, 1418 },
397 { 635, 1038, 1573, 930, 1673, 1413, 1410, 1687, 1410, 749 } },
398 { { 451, 613, 1345, 1702, 1870, 1716, 1728, 1766, 2190, 2310 },
399 { 678, 453, 1171, 1443, 1925, 1831, 2045, 1781, 1887, 1602 },
400 { 711, 666, 674, 1718, 1910, 1493, 1775, 1193, 2325, 2325 },
401 { 883, 854, 1583, 542, 1800, 1878, 1664, 2149, 1207, 1087 },
402 { 669, 994, 1248, 1122, 949, 1179, 1376, 1729, 1070, 1244 },
403 { 715, 1026, 715, 1350, 1430, 930, 1717, 1296, 1479, 1479 },
404 { 544, 841, 1656, 1450, 2094, 3883, 1010, 1759, 2076, 809 },
405 { 610, 855, 957, 1553, 2067, 1561, 1704, 824, 2066, 1226 },
406 { 833, 960, 1416, 819, 1277, 1619, 1501, 1617, 757, 1182 },
407 { 711, 964, 1252, 879, 1441, 1828, 1508, 1636, 1594, 734 } },
408 { { 605, 764, 734, 1713, 1747, 1192, 1819, 1353, 1877, 2392 },
409 { 866, 641, 586, 1622, 2072, 1431, 1888, 1346, 2189, 1764 },
410 { 901, 851, 456, 2165, 2281, 1405, 1739, 1193, 2183, 2443 },
411 { 770, 1045, 952, 1078, 1342, 1191, 1436, 1063, 1303, 995 },
412 { 901, 1086, 727, 1170, 884, 1105, 1267, 1401, 1739, 1337 },
413 { 951, 1162, 595, 1488, 1388, 703, 1790, 1366, 2057, 1724 },
414 { 534, 986, 1273, 1987, 3273, 1485, 1024, 1399, 1583, 866 },
415 { 699, 1182, 695, 1978, 1726, 1986, 1326, 714, 1750, 1672 },
416 { 951, 1217, 1209, 920, 1062, 1441, 1548, 999, 952, 932 },
417 { 733, 1284, 784, 1256, 1557, 1098, 1257, 1357, 1414, 908 } },
418 { { 316, 1075, 1653, 1220, 2145, 2051, 1730, 2131, 1884, 1790 },
419 { 745, 516, 1404, 894, 1599, 2375, 2013, 2105, 1475, 1381 },
420 { 516, 729, 1088, 1319, 1637, 3426, 1636, 1275, 1531, 1453 },
421 { 894, 943, 2138, 468, 1704, 2259, 2069, 1763, 1266, 1158 },
422 { 605, 1025, 1235, 871, 1170, 1767, 1493, 1500, 1104, 1258 },
423 { 739, 826, 1207, 1151, 1412, 846, 1305, 2726, 1014, 1569 },
424 { 558, 825, 1820, 1398, 3344, 1556, 1218, 1550, 1228, 878 },
425 { 429, 951, 1089, 1816, 3861, 3861, 1556, 969, 1568, 1828 },
426 { 883, 961, 1752, 769, 1468, 1810, 2081, 2346, 613, 1298 },
427 { 803, 895, 1372, 641, 1303, 1708, 1686, 1700, 1306, 1033 } },
428 { { 439, 1267, 1270, 1579, 963, 1193, 1723, 1729, 1198, 1993 },
429 { 705, 725, 1029, 1153, 1176, 1103, 1821, 1567, 1259, 1574 },
430 { 723, 859, 802, 1253, 972, 1202, 1407, 1665, 1520, 1674 },
431 { 894, 960, 1254, 887, 1052, 1607, 1344, 1349, 865, 1150 },
432 { 833, 1312, 1337, 1205, 572, 1288, 1414, 1529, 1088, 1430 },
433 { 842, 1279, 1068, 1861, 862, 688, 1861, 1630, 1039, 1381 },
434 { 766, 938, 1279, 1546, 3338, 1550, 1031, 1542, 1288, 640 },
435 { 715, 1090, 835, 1609, 1100, 1100, 1603, 1019, 1102, 1617 },
436 { 894, 1813, 1500, 1188, 789, 1194, 1491, 1919, 617, 1333 },
437 { 610, 1076, 1644, 1281, 1283, 975, 1179, 1688, 1434, 889 } },
438 { { 544, 971, 1146, 1849, 1221, 740, 1857, 1621, 1683, 2430 },
439 { 723, 705, 961, 1371, 1426, 821, 2081, 2079, 1839, 1380 },
440 { 783, 857, 703, 2145, 1419, 814, 1791, 1310, 1609, 2206 },
441 { 997, 1000, 1153, 792, 1229, 1162, 1810, 1418, 942, 979 },
442 { 901, 1226, 883, 1289, 793, 715, 1904, 1649, 1319, 3108 },
443 { 979, 1478, 782, 2216, 1454, 455, 3092, 1591, 1997, 1664 },
444 { 663, 1110, 1504, 1114, 1522, 3311, 676, 1522, 1530, 1024 },
445 { 605, 1138, 1153, 1314, 1569, 1315, 1157, 804, 1574, 1320 },
446 { 770, 1216, 1218, 1227, 869, 1384, 1232, 1375, 834, 1239 },
447 { 775, 1007, 843, 1216, 1225, 1074, 2527, 1479, 1149, 975 } },
448 { { 477, 817, 1309, 1439, 1708, 1454, 1159, 1241, 1945, 1672 },
449 { 577, 796, 1112, 1271, 1618, 1458, 1087, 1345, 1831, 1265 },
450 { 663, 776, 753, 1940, 1690, 1690, 1227, 1097, 3149, 1361 },
451 { 766, 1299, 1744, 1161, 1565, 1106, 1045, 1230, 1232, 707 },
452 { 915, 1026, 1404, 1182, 1184, 851, 1428, 2425, 1043, 789 },
453 { 883, 1456, 790, 1082, 1086, 985, 1083, 1484, 1238, 1160 },
454 { 507, 1345, 2261, 1995, 1847, 3636, 653, 1761, 2287, 933 },
455 { 553, 1193, 1470, 2057, 2059, 2059, 833, 779, 2058, 1263 },
456 { 766, 1275, 1515, 1039, 957, 1554, 1286, 1540, 1289, 705 },
457 { 499, 1378, 1496, 1385, 1850, 1850, 1044, 2465, 1515, 720 } },
458 { { 553, 930, 978, 2077, 1968, 1481, 1457, 761, 1957, 2362 },
459 { 694, 864, 905, 1720, 1670, 1621, 1429, 718, 2125, 1477 },
460 { 699, 968, 658, 3190, 2024, 1479, 1865, 750, 2060, 2320 },
461 { 733, 1308, 1296, 1062, 1576, 1322, 1062, 1112, 1172, 816 },
462 { 920, 927, 1052, 939, 947, 1156, 1152, 1073, 3056, 1268 },
463 { 723, 1534, 711, 1547, 1294, 892, 1553, 928, 1815, 1561 },
464 { 663, 1366, 1583, 2111, 1712, 3501, 522, 1155, 2130, 1133 },
465 { 614, 1731, 1188, 2343, 1944, 3733, 1287, 487, 3546, 1758 },
466 { 770, 1585, 1312, 826, 884, 2673, 1185, 1006, 1195, 1195 },
467 { 758, 1333, 1273, 1023, 1621, 1162, 1351, 833, 1479, 862 } },
468 { { 376, 1193, 1446, 1149, 1545, 1577, 1870, 1789, 1175, 1823 },
469 { 803, 633, 1136, 1058, 1350, 1323, 1598, 2247, 1072, 1252 },
470 { 614, 1048, 943, 981, 1152, 1869, 1461, 1020, 1618, 1618 },
471 { 1107, 1085, 1282, 592, 1779, 1933, 1648, 2403, 691, 1246 },
472 { 851, 1309, 1223, 1243, 895, 1593, 1792, 2317, 627, 1076 },
473 { 770, 1216, 1030, 1125, 921, 981, 1629, 1131, 1049, 1646 },
474 { 626, 1469, 1456, 1081, 1489, 3278, 981, 1232, 1498, 733 },
475 { 617, 1201, 812, 1220, 1476, 1476, 1478, 970, 1228, 1488 },
476 { 1179, 1393, 1540, 999, 1243, 1503, 1916, 1925, 414, 1614 },
477 { 943, 1088, 1490, 682, 1112, 1372, 1756, 1505, 966, 966 } },
478 { { 322, 1142, 1589, 1396, 2144, 1859, 1359, 1925, 2084, 1518 },
479 { 617, 625, 1241, 1234, 2121, 1615, 1524, 1858, 1720, 1004 },
480 { 553, 851, 786, 1299, 1452, 1560, 1372, 1561, 1967, 1713 },
481 { 770, 977, 1396, 568, 1893, 1639, 1540, 2108, 1430, 1013 },
482 { 684, 1120, 1375, 982, 930, 2719, 1638, 1643, 933, 993 },
483 { 553, 1103, 996, 1356, 1361, 1005, 1507, 1761, 1184, 1268 },
484 { 419, 1247, 1537, 1554, 1817, 3606, 1026, 1666, 1829, 923 },
485 { 439, 1139, 1101, 1257, 3710, 1922, 1205, 1040, 1931, 1529 },
486 { 979, 935, 1269, 847, 1202, 1286, 1530, 1535, 827, 1036 },
487 { 516, 1378, 1569, 1110, 1798, 1798, 1198, 2199, 1543, 712 } },
488 };
489
490 //------------------------------------------------------------------------------
491
492 #if defined(__cplusplus) || defined(c_plusplus)
493 } // extern "C"
494 #endif
495