cost.c revision 8b720228d581a84fd173b6dcb2fa295b59db489a
1// Copyright 2011 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// Cost tables for level and modes
11//
12// Author: Skal (pascal.massimino@gmail.com)
13
14#include "./cost.h"
15
16//------------------------------------------------------------------------------
17// Boolean-cost cost table
18
19const uint16_t VP8EntropyCost[256] = {
20  1792, 1792, 1792, 1536, 1536, 1408, 1366, 1280, 1280, 1216,
21  1178, 1152, 1110, 1076, 1061, 1024, 1024,  992,  968,  951,
22   939,  911,  896,  878,  871,  854,  838,  820,  811,  794,
23   786,  768,  768,  752,  740,  732,  720,  709,  704,  690,
24   683,  672,  666,  655,  647,  640,  631,  622,  615,  607,
25   598,  592,  586,  576,  572,  564,  559,  555,  547,  541,
26   534,  528,  522,  512,  512,  504,  500,  494,  488,  483,
27   477,  473,  467,  461,  458,  452,  448,  443,  438,  434,
28   427,  424,  419,  415,  410,  406,  403,  399,  394,  390,
29   384,  384,  377,  374,  370,  366,  362,  359,  355,  351,
30   347,  342,  342,  336,  333,  330,  326,  323,  320,  316,
31   312,  308,  305,  302,  299,  296,  293,  288,  287,  283,
32   280,  277,  274,  272,  268,  266,  262,  256,  256,  256,
33   251,  248,  245,  242,  240,  237,  234,  232,  228,  226,
34   223,  221,  218,  216,  214,  211,  208,  205,  203,  201,
35   198,  196,  192,  191,  188,  187,  183,  181,  179,  176,
36   175,  171,  171,  168,  165,  163,  160,  159,  156,  154,
37   152,  150,  148,  146,  144,  142,  139,  138,  135,  133,
38   131,  128,  128,  125,  123,  121,  119,  117,  115,  113,
39   111,  110,  107,  105,  103,  102,  100,   98,   96,   94,
40    92,   91,   89,   86,   86,   83,   82,   80,   77,   76,
41    74,   73,   71,   69,   67,   66,   64,   63,   61,   59,
42    57,   55,   54,   52,   51,   49,   47,   46,   44,   43,
43    41,   40,   38,   36,   35,   33,   32,   30,   29,   27,
44    25,   24,   22,   21,   19,   18,   16,   15,   13,   12,
45    10,    9,    7,    6,    4,    3
46};
47
48//------------------------------------------------------------------------------
49// Level cost tables
50
51// For each given level, the following table gives the pattern of contexts to
52// use for coding it (in [][0]) as well as the bit value to use for each
53// context (in [][1]).
54const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2] = {
55                  {0x001, 0x000}, {0x007, 0x001}, {0x00f, 0x005},
56  {0x00f, 0x00d}, {0x033, 0x003}, {0x033, 0x003}, {0x033, 0x023},
57  {0x033, 0x023}, {0x033, 0x023}, {0x033, 0x023}, {0x0d3, 0x013},
58  {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013},
59  {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x093},
60  {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
61  {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
62  {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
63  {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x153, 0x053},
64  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
65  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {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, 0x153}
72};
73
74// fixed costs for coding levels, deduce from the coding tree.
75// This is only the part that doesn't depend on the probability state.
76const uint16_t VP8LevelFixedCosts[MAX_LEVEL + 1] = {
77     0,  256,  256,  256,  256,  432,  618,  630,
78   731,  640,  640,  828,  901,  948, 1021, 1101,
79  1174, 1221, 1294, 1042, 1085, 1115, 1158, 1202,
80  1245, 1275, 1318, 1337, 1380, 1410, 1453, 1497,
81  1540, 1570, 1613, 1280, 1295, 1317, 1332, 1358,
82  1373, 1395, 1410, 1454, 1469, 1491, 1506, 1532,
83  1547, 1569, 1584, 1601, 1616, 1638, 1653, 1679,
84  1694, 1716, 1731, 1775, 1790, 1812, 1827, 1853,
85  1868, 1890, 1905, 1727, 1733, 1742, 1748, 1759,
86  1765, 1774, 1780, 1800, 1806, 1815, 1821, 1832,
87  1838, 1847, 1853, 1878, 1884, 1893, 1899, 1910,
88  1916, 1925, 1931, 1951, 1957, 1966, 1972, 1983,
89  1989, 1998, 2004, 2027, 2033, 2042, 2048, 2059,
90  2065, 2074, 2080, 2100, 2106, 2115, 2121, 2132,
91  2138, 2147, 2153, 2178, 2184, 2193, 2199, 2210,
92  2216, 2225, 2231, 2251, 2257, 2266, 2272, 2283,
93  2289, 2298, 2304, 2168, 2174, 2183, 2189, 2200,
94  2206, 2215, 2221, 2241, 2247, 2256, 2262, 2273,
95  2279, 2288, 2294, 2319, 2325, 2334, 2340, 2351,
96  2357, 2366, 2372, 2392, 2398, 2407, 2413, 2424,
97  2430, 2439, 2445, 2468, 2474, 2483, 2489, 2500,
98  2506, 2515, 2521, 2541, 2547, 2556, 2562, 2573,
99  2579, 2588, 2594, 2619, 2625, 2634, 2640, 2651,
100  2657, 2666, 2672, 2692, 2698, 2707, 2713, 2724,
101  2730, 2739, 2745, 2540, 2546, 2555, 2561, 2572,
102  2578, 2587, 2593, 2613, 2619, 2628, 2634, 2645,
103  2651, 2660, 2666, 2691, 2697, 2706, 2712, 2723,
104  2729, 2738, 2744, 2764, 2770, 2779, 2785, 2796,
105  2802, 2811, 2817, 2840, 2846, 2855, 2861, 2872,
106  2878, 2887, 2893, 2913, 2919, 2928, 2934, 2945,
107  2951, 2960, 2966, 2991, 2997, 3006, 3012, 3023,
108  3029, 3038, 3044, 3064, 3070, 3079, 3085, 3096,
109  3102, 3111, 3117, 2981, 2987, 2996, 3002, 3013,
110  3019, 3028, 3034, 3054, 3060, 3069, 3075, 3086,
111  3092, 3101, 3107, 3132, 3138, 3147, 3153, 3164,
112  3170, 3179, 3185, 3205, 3211, 3220, 3226, 3237,
113  3243, 3252, 3258, 3281, 3287, 3296, 3302, 3313,
114  3319, 3328, 3334, 3354, 3360, 3369, 3375, 3386,
115  3392, 3401, 3407, 3432, 3438, 3447, 3453, 3464,
116  3470, 3479, 3485, 3505, 3511, 3520, 3526, 3537,
117  3543, 3552, 3558, 2816, 2822, 2831, 2837, 2848,
118  2854, 2863, 2869, 2889, 2895, 2904, 2910, 2921,
119  2927, 2936, 2942, 2967, 2973, 2982, 2988, 2999,
120  3005, 3014, 3020, 3040, 3046, 3055, 3061, 3072,
121  3078, 3087, 3093, 3116, 3122, 3131, 3137, 3148,
122  3154, 3163, 3169, 3189, 3195, 3204, 3210, 3221,
123  3227, 3236, 3242, 3267, 3273, 3282, 3288, 3299,
124  3305, 3314, 3320, 3340, 3346, 3355, 3361, 3372,
125  3378, 3387, 3393, 3257, 3263, 3272, 3278, 3289,
126  3295, 3304, 3310, 3330, 3336, 3345, 3351, 3362,
127  3368, 3377, 3383, 3408, 3414, 3423, 3429, 3440,
128  3446, 3455, 3461, 3481, 3487, 3496, 3502, 3513,
129  3519, 3528, 3534, 3557, 3563, 3572, 3578, 3589,
130  3595, 3604, 3610, 3630, 3636, 3645, 3651, 3662,
131  3668, 3677, 3683, 3708, 3714, 3723, 3729, 3740,
132  3746, 3755, 3761, 3781, 3787, 3796, 3802, 3813,
133  3819, 3828, 3834, 3629, 3635, 3644, 3650, 3661,
134  3667, 3676, 3682, 3702, 3708, 3717, 3723, 3734,
135  3740, 3749, 3755, 3780, 3786, 3795, 3801, 3812,
136  3818, 3827, 3833, 3853, 3859, 3868, 3874, 3885,
137  3891, 3900, 3906, 3929, 3935, 3944, 3950, 3961,
138  3967, 3976, 3982, 4002, 4008, 4017, 4023, 4034,
139  4040, 4049, 4055, 4080, 4086, 4095, 4101, 4112,
140  4118, 4127, 4133, 4153, 4159, 4168, 4174, 4185,
141  4191, 4200, 4206, 4070, 4076, 4085, 4091, 4102,
142  4108, 4117, 4123, 4143, 4149, 4158, 4164, 4175,
143  4181, 4190, 4196, 4221, 4227, 4236, 4242, 4253,
144  4259, 4268, 4274, 4294, 4300, 4309, 4315, 4326,
145  4332, 4341, 4347, 4370, 4376, 4385, 4391, 4402,
146  4408, 4417, 4423, 4443, 4449, 4458, 4464, 4475,
147  4481, 4490, 4496, 4521, 4527, 4536, 4542, 4553,
148  4559, 4568, 4574, 4594, 4600, 4609, 4615, 4626,
149  4632, 4641, 4647, 3515, 3521, 3530, 3536, 3547,
150  3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
151  3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
152  3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
153  3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
154  3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
155  3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
156  4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
157  4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
158  3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
159  4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
160  4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
161  4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
162  4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
163  4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
164  4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
165  4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
166  4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
167  4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
168  4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
169  4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
170  4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
171  4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
172  4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
173  4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
174  4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
175  4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
176  4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
177  5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
178  5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
179  5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
180  5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
181  5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
182  4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
183  4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
184  4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
185  4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
186  4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
187  5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
188  5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
189  5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
190  5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
191  5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
192  5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
193  5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
194  5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
195  5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
196  5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
197  5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
198  5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
199  5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
200  5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
201  5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
202  5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
203  5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
204  5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
205  5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
206  5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
207  5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
208  6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
209  6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
210  6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
211  6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
212  6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
213  6420, 6429, 6435, 3515, 3521, 3530, 3536, 3547,
214  3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
215  3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
216  3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
217  3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
218  3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
219  3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
220  4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
221  4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
222  3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
223  4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
224  4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
225  4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
226  4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
227  4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
228  4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
229  4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
230  4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
231  4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
232  4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
233  4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
234  4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
235  4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
236  4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
237  4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
238  4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
239  4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
240  4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
241  5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
242  5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
243  5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
244  5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
245  5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
246  4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
247  4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
248  4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
249  4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
250  4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
251  5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
252  5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
253  5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
254  5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
255  5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
256  5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
257  5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
258  5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
259  5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
260  5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
261  5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
262  5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
263  5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
264  5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
265  5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
266  5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
267  5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
268  5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
269  5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
270  5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
271  5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
272  6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
273  6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
274  6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
275  6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
276  6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
277  6420, 6429, 6435, 5303, 5309, 5318, 5324, 5335,
278  5341, 5350, 5356, 5376, 5382, 5391, 5397, 5408,
279  5414, 5423, 5429, 5454, 5460, 5469, 5475, 5486,
280  5492, 5501, 5507, 5527, 5533, 5542, 5548, 5559,
281  5565, 5574, 5580, 5603, 5609, 5618, 5624, 5635,
282  5641, 5650, 5656, 5676, 5682, 5691, 5697, 5708,
283  5714, 5723, 5729, 5754, 5760, 5769, 5775, 5786,
284  5792, 5801, 5807, 5827, 5833, 5842, 5848, 5859,
285  5865, 5874, 5880, 5744, 5750, 5759, 5765, 5776,
286  5782, 5791, 5797, 5817, 5823, 5832, 5838, 5849,
287  5855, 5864, 5870, 5895, 5901, 5910, 5916, 5927,
288  5933, 5942, 5948, 5968, 5974, 5983, 5989, 6000,
289  6006, 6015, 6021, 6044, 6050, 6059, 6065, 6076,
290  6082, 6091, 6097, 6117, 6123, 6132, 6138, 6149,
291  6155, 6164, 6170, 6195, 6201, 6210, 6216, 6227,
292  6233, 6242, 6248, 6268, 6274, 6283, 6289, 6300,
293  6306, 6315, 6321, 6116, 6122, 6131, 6137, 6148,
294  6154, 6163, 6169, 6189, 6195, 6204, 6210, 6221,
295  6227, 6236, 6242, 6267, 6273, 6282, 6288, 6299,
296  6305, 6314, 6320, 6340, 6346, 6355, 6361, 6372,
297  6378, 6387, 6393, 6416, 6422, 6431, 6437, 6448,
298  6454, 6463, 6469, 6489, 6495, 6504, 6510, 6521,
299  6527, 6536, 6542, 6567, 6573, 6582, 6588, 6599,
300  6605, 6614, 6620, 6640, 6646, 6655, 6661, 6672,
301  6678, 6687, 6693, 6557, 6563, 6572, 6578, 6589,
302  6595, 6604, 6610, 6630, 6636, 6645, 6651, 6662,
303  6668, 6677, 6683, 6708, 6714, 6723, 6729, 6740,
304  6746, 6755, 6761, 6781, 6787, 6796, 6802, 6813,
305  6819, 6828, 6834, 6857, 6863, 6872, 6878, 6889,
306  6895, 6904, 6910, 6930, 6936, 6945, 6951, 6962,
307  6968, 6977, 6983, 7008, 7014, 7023, 7029, 7040,
308  7046, 7055, 7061, 7081, 7087, 7096, 7102, 7113,
309  7119, 7128, 7134, 6392, 6398, 6407, 6413, 6424,
310  6430, 6439, 6445, 6465, 6471, 6480, 6486, 6497,
311  6503, 6512, 6518, 6543, 6549, 6558, 6564, 6575,
312  6581, 6590, 6596, 6616, 6622, 6631, 6637, 6648,
313  6654, 6663, 6669, 6692, 6698, 6707, 6713, 6724,
314  6730, 6739, 6745, 6765, 6771, 6780, 6786, 6797,
315  6803, 6812, 6818, 6843, 6849, 6858, 6864, 6875,
316  6881, 6890, 6896, 6916, 6922, 6931, 6937, 6948,
317  6954, 6963, 6969, 6833, 6839, 6848, 6854, 6865,
318  6871, 6880, 6886, 6906, 6912, 6921, 6927, 6938,
319  6944, 6953, 6959, 6984, 6990, 6999, 7005, 7016,
320  7022, 7031, 7037, 7057, 7063, 7072, 7078, 7089,
321  7095, 7104, 7110, 7133, 7139, 7148, 7154, 7165,
322  7171, 7180, 7186, 7206, 7212, 7221, 7227, 7238,
323  7244, 7253, 7259, 7284, 7290, 7299, 7305, 7316,
324  7322, 7331, 7337, 7357, 7363, 7372, 7378, 7389,
325  7395, 7404, 7410, 7205, 7211, 7220, 7226, 7237,
326  7243, 7252, 7258, 7278, 7284, 7293, 7299, 7310,
327  7316, 7325, 7331, 7356, 7362, 7371, 7377, 7388,
328  7394, 7403, 7409, 7429, 7435, 7444, 7450, 7461,
329  7467, 7476, 7482, 7505, 7511, 7520, 7526, 7537,
330  7543, 7552, 7558, 7578, 7584, 7593, 7599, 7610,
331  7616, 7625, 7631, 7656, 7662, 7671, 7677, 7688,
332  7694, 7703, 7709, 7729, 7735, 7744, 7750, 7761
333};
334
335static int VariableLevelCost(int level, const uint8_t probas[NUM_PROBAS]) {
336  int pattern = VP8LevelCodes[level - 1][0];
337  int bits = VP8LevelCodes[level - 1][1];
338  int cost = 0;
339  int i;
340  for (i = 2; pattern; ++i) {
341    if (pattern & 1) {
342      cost += VP8BitCost(bits & 1, probas[i]);
343    }
344    bits >>= 1;
345    pattern >>= 1;
346  }
347  return cost;
348}
349
350//------------------------------------------------------------------------------
351// Pre-calc level costs once for all
352
353void VP8CalculateLevelCosts(VP8Proba* const proba) {
354  int ctype, band, ctx;
355
356  if (!proba->dirty_) return;  // nothing to do.
357
358  for (ctype = 0; ctype < NUM_TYPES; ++ctype) {
359    for (band = 0; band < NUM_BANDS; ++band) {
360      for (ctx = 0; ctx < NUM_CTX; ++ctx) {
361        const uint8_t* const p = proba->coeffs_[ctype][band][ctx];
362        uint16_t* const table = proba->level_cost_[ctype][band][ctx];
363        const int cost_base = VP8BitCost(1, p[1]);
364        int v;
365        table[0] = VP8BitCost(0, p[1]);
366        for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) {
367          table[v] = cost_base + VariableLevelCost(v, p);
368        }
369        // Starting at level 67 and up, the variable part of the cost is
370        // actually constant.
371      }
372    }
373  }
374  proba->dirty_ = 0;
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().
382const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 };
383// note: these values include the fixed VP8BitCost(1, 145) mode selection cost.
384const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 };
385const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES] = {
386  { {   40, 1151, 1723, 1874, 2103, 2019, 1628, 1777, 2226, 2137 },
387    {  192,  469, 1296, 1308, 1849, 1794, 1781, 1703, 1713, 1522 },
388    {  142,  910,  762, 1684, 1849, 1576, 1460, 1305, 1801, 1657 },
389    {  559,  641, 1370,  421, 1182, 1569, 1612, 1725,  863, 1007 },
390    {  299, 1059, 1256, 1108,  636, 1068, 1581, 1883,  869, 1142 },
391    {  277, 1111,  707, 1362, 1089,  672, 1603, 1541, 1545, 1291 },
392    {  214,  781, 1609, 1303, 1632, 2229,  726, 1560, 1713,  918 },
393    {  152, 1037, 1046, 1759, 1983, 2174, 1358,  742, 1740, 1390 },
394    {  512, 1046, 1420,  753,  752, 1297, 1486, 1613,  460, 1207 },
395    {  424,  827, 1362,  719, 1462, 1202, 1199, 1476, 1199,  538 } },
396  { {  240,  402, 1134, 1491, 1659, 1505, 1517, 1555, 1979, 2099 },
397    {  467,  242,  960, 1232, 1714, 1620, 1834, 1570, 1676, 1391 },
398    {  500,  455,  463, 1507, 1699, 1282, 1564,  982, 2114, 2114 },
399    {  672,  643, 1372,  331, 1589, 1667, 1453, 1938,  996,  876 },
400    {  458,  783, 1037,  911,  738,  968, 1165, 1518,  859, 1033 },
401    {  504,  815,  504, 1139, 1219,  719, 1506, 1085, 1268, 1268 },
402    {  333,  630, 1445, 1239, 1883, 3672,  799, 1548, 1865,  598 },
403    {  399,  644,  746, 1342, 1856, 1350, 1493,  613, 1855, 1015 },
404    {  622,  749, 1205,  608, 1066, 1408, 1290, 1406,  546,  971 },
405    {  500,  753, 1041,  668, 1230, 1617, 1297, 1425, 1383,  523 } },
406  { {  394,  553,  523, 1502, 1536,  981, 1608, 1142, 1666, 2181 },
407    {  655,  430,  375, 1411, 1861, 1220, 1677, 1135, 1978, 1553 },
408    {  690,  640,  245, 1954, 2070, 1194, 1528,  982, 1972, 2232 },
409    {  559,  834,  741,  867, 1131,  980, 1225,  852, 1092,  784 },
410    {  690,  875,  516,  959,  673,  894, 1056, 1190, 1528, 1126 },
411    {  740,  951,  384, 1277, 1177,  492, 1579, 1155, 1846, 1513 },
412    {  323,  775, 1062, 1776, 3062, 1274,  813, 1188, 1372,  655 },
413    {  488,  971,  484, 1767, 1515, 1775, 1115,  503, 1539, 1461 },
414    {  740, 1006,  998,  709,  851, 1230, 1337,  788,  741,  721 },
415    {  522, 1073,  573, 1045, 1346,  887, 1046, 1146, 1203,  697 } },
416  { {  105,  864, 1442, 1009, 1934, 1840, 1519, 1920, 1673, 1579 },
417    {  534,  305, 1193,  683, 1388, 2164, 1802, 1894, 1264, 1170 },
418    {  305,  518,  877, 1108, 1426, 3215, 1425, 1064, 1320, 1242 },
419    {  683,  732, 1927,  257, 1493, 2048, 1858, 1552, 1055,  947 },
420    {  394,  814, 1024,  660,  959, 1556, 1282, 1289,  893, 1047 },
421    {  528,  615,  996,  940, 1201,  635, 1094, 2515,  803, 1358 },
422    {  347,  614, 1609, 1187, 3133, 1345, 1007, 1339, 1017,  667 },
423    {  218,  740,  878, 1605, 3650, 3650, 1345,  758, 1357, 1617 },
424    {  672,  750, 1541,  558, 1257, 1599, 1870, 2135,  402, 1087 },
425    {  592,  684, 1161,  430, 1092, 1497, 1475, 1489, 1095,  822 } },
426  { {  228, 1056, 1059, 1368,  752,  982, 1512, 1518,  987, 1782 },
427    {  494,  514,  818,  942,  965,  892, 1610, 1356, 1048, 1363 },
428    {  512,  648,  591, 1042,  761,  991, 1196, 1454, 1309, 1463 },
429    {  683,  749, 1043,  676,  841, 1396, 1133, 1138,  654,  939 },
430    {  622, 1101, 1126,  994,  361, 1077, 1203, 1318,  877, 1219 },
431    {  631, 1068,  857, 1650,  651,  477, 1650, 1419,  828, 1170 },
432    {  555,  727, 1068, 1335, 3127, 1339,  820, 1331, 1077,  429 },
433    {  504,  879,  624, 1398,  889,  889, 1392,  808,  891, 1406 },
434    {  683, 1602, 1289,  977,  578,  983, 1280, 1708,  406, 1122 },
435    {  399,  865, 1433, 1070, 1072,  764,  968, 1477, 1223,  678 } },
436  { {  333,  760,  935, 1638, 1010,  529, 1646, 1410, 1472, 2219 },
437    {  512,  494,  750, 1160, 1215,  610, 1870, 1868, 1628, 1169 },
438    {  572,  646,  492, 1934, 1208,  603, 1580, 1099, 1398, 1995 },
439    {  786,  789,  942,  581, 1018,  951, 1599, 1207,  731,  768 },
440    {  690, 1015,  672, 1078,  582,  504, 1693, 1438, 1108, 2897 },
441    {  768, 1267,  571, 2005, 1243,  244, 2881, 1380, 1786, 1453 },
442    {  452,  899, 1293,  903, 1311, 3100,  465, 1311, 1319,  813 },
443    {  394,  927,  942, 1103, 1358, 1104,  946,  593, 1363, 1109 },
444    {  559, 1005, 1007, 1016,  658, 1173, 1021, 1164,  623, 1028 },
445    {  564,  796,  632, 1005, 1014,  863, 2316, 1268,  938,  764 } },
446  { {  266,  606, 1098, 1228, 1497, 1243,  948, 1030, 1734, 1461 },
447    {  366,  585,  901, 1060, 1407, 1247,  876, 1134, 1620, 1054 },
448    {  452,  565,  542, 1729, 1479, 1479, 1016,  886, 2938, 1150 },
449    {  555, 1088, 1533,  950, 1354,  895,  834, 1019, 1021,  496 },
450    {  704,  815, 1193,  971,  973,  640, 1217, 2214,  832,  578 },
451    {  672, 1245,  579,  871,  875,  774,  872, 1273, 1027,  949 },
452    {  296, 1134, 2050, 1784, 1636, 3425,  442, 1550, 2076,  722 },
453    {  342,  982, 1259, 1846, 1848, 1848,  622,  568, 1847, 1052 },
454    {  555, 1064, 1304,  828,  746, 1343, 1075, 1329, 1078,  494 },
455    {  288, 1167, 1285, 1174, 1639, 1639,  833, 2254, 1304,  509 } },
456  { {  342,  719,  767, 1866, 1757, 1270, 1246,  550, 1746, 2151 },
457    {  483,  653,  694, 1509, 1459, 1410, 1218,  507, 1914, 1266 },
458    {  488,  757,  447, 2979, 1813, 1268, 1654,  539, 1849, 2109 },
459    {  522, 1097, 1085,  851, 1365, 1111,  851,  901,  961,  605 },
460    {  709,  716,  841,  728,  736,  945,  941,  862, 2845, 1057 },
461    {  512, 1323,  500, 1336, 1083,  681, 1342,  717, 1604, 1350 },
462    {  452, 1155, 1372, 1900, 1501, 3290,  311,  944, 1919,  922 },
463    {  403, 1520,  977, 2132, 1733, 3522, 1076,  276, 3335, 1547 },
464    {  559, 1374, 1101,  615,  673, 2462,  974,  795,  984,  984 },
465    {  547, 1122, 1062,  812, 1410,  951, 1140,  622, 1268,  651 } },
466  { {  165,  982, 1235,  938, 1334, 1366, 1659, 1578,  964, 1612 },
467    {  592,  422,  925,  847, 1139, 1112, 1387, 2036,  861, 1041 },
468    {  403,  837,  732,  770,  941, 1658, 1250,  809, 1407, 1407 },
469    {  896,  874, 1071,  381, 1568, 1722, 1437, 2192,  480, 1035 },
470    {  640, 1098, 1012, 1032,  684, 1382, 1581, 2106,  416,  865 },
471    {  559, 1005,  819,  914,  710,  770, 1418,  920,  838, 1435 },
472    {  415, 1258, 1245,  870, 1278, 3067,  770, 1021, 1287,  522 },
473    {  406,  990,  601, 1009, 1265, 1265, 1267,  759, 1017, 1277 },
474    {  968, 1182, 1329,  788, 1032, 1292, 1705, 1714,  203, 1403 },
475    {  732,  877, 1279,  471,  901, 1161, 1545, 1294,  755,  755 } },
476  { {  111,  931, 1378, 1185, 1933, 1648, 1148, 1714, 1873, 1307 },
477    {  406,  414, 1030, 1023, 1910, 1404, 1313, 1647, 1509,  793 },
478    {  342,  640,  575, 1088, 1241, 1349, 1161, 1350, 1756, 1502 },
479    {  559,  766, 1185,  357, 1682, 1428, 1329, 1897, 1219,  802 },
480    {  473,  909, 1164,  771,  719, 2508, 1427, 1432,  722,  782 },
481    {  342,  892,  785, 1145, 1150,  794, 1296, 1550,  973, 1057 },
482    {  208, 1036, 1326, 1343, 1606, 3395,  815, 1455, 1618,  712 },
483    {  228,  928,  890, 1046, 3499, 1711,  994,  829, 1720, 1318 },
484    {  768,  724, 1058,  636,  991, 1075, 1319, 1324,  616,  825 },
485    {  305, 1167, 1358,  899, 1587, 1587,  987, 1988, 1332,  501 } }
486};
487
488//------------------------------------------------------------------------------
489
490