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)
15extern "C" {
16#endif
17
18//------------------------------------------------------------------------------
19// Boolean-cost cost table
20
21const 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]).
56const 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.
78const 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
337static 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
355void 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().
384const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 };
385// note: these values include the fixed VP8BitCost(1, 145) mode selection cost.
386const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 };
387const 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