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