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 cost0 = (ctx > 0) ? VP8BitCost(1, p[0]) : 0;
364        const int cost_base = VP8BitCost(1, p[1]) + cost0;
365        int v;
366        table[0] = VP8BitCost(0, p[1]) + cost0;
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  proba->dirty_ = 0;
376}
377
378//------------------------------------------------------------------------------
379// Mode cost tables.
380
381// These are the fixed probabilities (in the coding trees) turned into bit-cost
382// by calling VP8BitCost().
383const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 };
384// note: these values include the fixed VP8BitCost(1, 145) mode selection cost.
385const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 };
386const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES] = {
387  { {   40, 1151, 1723, 1874, 2103, 2019, 1628, 1777, 2226, 2137 },
388    {  192,  469, 1296, 1308, 1849, 1794, 1781, 1703, 1713, 1522 },
389    {  142,  910,  762, 1684, 1849, 1576, 1460, 1305, 1801, 1657 },
390    {  559,  641, 1370,  421, 1182, 1569, 1612, 1725,  863, 1007 },
391    {  299, 1059, 1256, 1108,  636, 1068, 1581, 1883,  869, 1142 },
392    {  277, 1111,  707, 1362, 1089,  672, 1603, 1541, 1545, 1291 },
393    {  214,  781, 1609, 1303, 1632, 2229,  726, 1560, 1713,  918 },
394    {  152, 1037, 1046, 1759, 1983, 2174, 1358,  742, 1740, 1390 },
395    {  512, 1046, 1420,  753,  752, 1297, 1486, 1613,  460, 1207 },
396    {  424,  827, 1362,  719, 1462, 1202, 1199, 1476, 1199,  538 } },
397  { {  240,  402, 1134, 1491, 1659, 1505, 1517, 1555, 1979, 2099 },
398    {  467,  242,  960, 1232, 1714, 1620, 1834, 1570, 1676, 1391 },
399    {  500,  455,  463, 1507, 1699, 1282, 1564,  982, 2114, 2114 },
400    {  672,  643, 1372,  331, 1589, 1667, 1453, 1938,  996,  876 },
401    {  458,  783, 1037,  911,  738,  968, 1165, 1518,  859, 1033 },
402    {  504,  815,  504, 1139, 1219,  719, 1506, 1085, 1268, 1268 },
403    {  333,  630, 1445, 1239, 1883, 3672,  799, 1548, 1865,  598 },
404    {  399,  644,  746, 1342, 1856, 1350, 1493,  613, 1855, 1015 },
405    {  622,  749, 1205,  608, 1066, 1408, 1290, 1406,  546,  971 },
406    {  500,  753, 1041,  668, 1230, 1617, 1297, 1425, 1383,  523 } },
407  { {  394,  553,  523, 1502, 1536,  981, 1608, 1142, 1666, 2181 },
408    {  655,  430,  375, 1411, 1861, 1220, 1677, 1135, 1978, 1553 },
409    {  690,  640,  245, 1954, 2070, 1194, 1528,  982, 1972, 2232 },
410    {  559,  834,  741,  867, 1131,  980, 1225,  852, 1092,  784 },
411    {  690,  875,  516,  959,  673,  894, 1056, 1190, 1528, 1126 },
412    {  740,  951,  384, 1277, 1177,  492, 1579, 1155, 1846, 1513 },
413    {  323,  775, 1062, 1776, 3062, 1274,  813, 1188, 1372,  655 },
414    {  488,  971,  484, 1767, 1515, 1775, 1115,  503, 1539, 1461 },
415    {  740, 1006,  998,  709,  851, 1230, 1337,  788,  741,  721 },
416    {  522, 1073,  573, 1045, 1346,  887, 1046, 1146, 1203,  697 } },
417  { {  105,  864, 1442, 1009, 1934, 1840, 1519, 1920, 1673, 1579 },
418    {  534,  305, 1193,  683, 1388, 2164, 1802, 1894, 1264, 1170 },
419    {  305,  518,  877, 1108, 1426, 3215, 1425, 1064, 1320, 1242 },
420    {  683,  732, 1927,  257, 1493, 2048, 1858, 1552, 1055,  947 },
421    {  394,  814, 1024,  660,  959, 1556, 1282, 1289,  893, 1047 },
422    {  528,  615,  996,  940, 1201,  635, 1094, 2515,  803, 1358 },
423    {  347,  614, 1609, 1187, 3133, 1345, 1007, 1339, 1017,  667 },
424    {  218,  740,  878, 1605, 3650, 3650, 1345,  758, 1357, 1617 },
425    {  672,  750, 1541,  558, 1257, 1599, 1870, 2135,  402, 1087 },
426    {  592,  684, 1161,  430, 1092, 1497, 1475, 1489, 1095,  822 } },
427  { {  228, 1056, 1059, 1368,  752,  982, 1512, 1518,  987, 1782 },
428    {  494,  514,  818,  942,  965,  892, 1610, 1356, 1048, 1363 },
429    {  512,  648,  591, 1042,  761,  991, 1196, 1454, 1309, 1463 },
430    {  683,  749, 1043,  676,  841, 1396, 1133, 1138,  654,  939 },
431    {  622, 1101, 1126,  994,  361, 1077, 1203, 1318,  877, 1219 },
432    {  631, 1068,  857, 1650,  651,  477, 1650, 1419,  828, 1170 },
433    {  555,  727, 1068, 1335, 3127, 1339,  820, 1331, 1077,  429 },
434    {  504,  879,  624, 1398,  889,  889, 1392,  808,  891, 1406 },
435    {  683, 1602, 1289,  977,  578,  983, 1280, 1708,  406, 1122 },
436    {  399,  865, 1433, 1070, 1072,  764,  968, 1477, 1223,  678 } },
437  { {  333,  760,  935, 1638, 1010,  529, 1646, 1410, 1472, 2219 },
438    {  512,  494,  750, 1160, 1215,  610, 1870, 1868, 1628, 1169 },
439    {  572,  646,  492, 1934, 1208,  603, 1580, 1099, 1398, 1995 },
440    {  786,  789,  942,  581, 1018,  951, 1599, 1207,  731,  768 },
441    {  690, 1015,  672, 1078,  582,  504, 1693, 1438, 1108, 2897 },
442    {  768, 1267,  571, 2005, 1243,  244, 2881, 1380, 1786, 1453 },
443    {  452,  899, 1293,  903, 1311, 3100,  465, 1311, 1319,  813 },
444    {  394,  927,  942, 1103, 1358, 1104,  946,  593, 1363, 1109 },
445    {  559, 1005, 1007, 1016,  658, 1173, 1021, 1164,  623, 1028 },
446    {  564,  796,  632, 1005, 1014,  863, 2316, 1268,  938,  764 } },
447  { {  266,  606, 1098, 1228, 1497, 1243,  948, 1030, 1734, 1461 },
448    {  366,  585,  901, 1060, 1407, 1247,  876, 1134, 1620, 1054 },
449    {  452,  565,  542, 1729, 1479, 1479, 1016,  886, 2938, 1150 },
450    {  555, 1088, 1533,  950, 1354,  895,  834, 1019, 1021,  496 },
451    {  704,  815, 1193,  971,  973,  640, 1217, 2214,  832,  578 },
452    {  672, 1245,  579,  871,  875,  774,  872, 1273, 1027,  949 },
453    {  296, 1134, 2050, 1784, 1636, 3425,  442, 1550, 2076,  722 },
454    {  342,  982, 1259, 1846, 1848, 1848,  622,  568, 1847, 1052 },
455    {  555, 1064, 1304,  828,  746, 1343, 1075, 1329, 1078,  494 },
456    {  288, 1167, 1285, 1174, 1639, 1639,  833, 2254, 1304,  509 } },
457  { {  342,  719,  767, 1866, 1757, 1270, 1246,  550, 1746, 2151 },
458    {  483,  653,  694, 1509, 1459, 1410, 1218,  507, 1914, 1266 },
459    {  488,  757,  447, 2979, 1813, 1268, 1654,  539, 1849, 2109 },
460    {  522, 1097, 1085,  851, 1365, 1111,  851,  901,  961,  605 },
461    {  709,  716,  841,  728,  736,  945,  941,  862, 2845, 1057 },
462    {  512, 1323,  500, 1336, 1083,  681, 1342,  717, 1604, 1350 },
463    {  452, 1155, 1372, 1900, 1501, 3290,  311,  944, 1919,  922 },
464    {  403, 1520,  977, 2132, 1733, 3522, 1076,  276, 3335, 1547 },
465    {  559, 1374, 1101,  615,  673, 2462,  974,  795,  984,  984 },
466    {  547, 1122, 1062,  812, 1410,  951, 1140,  622, 1268,  651 } },
467  { {  165,  982, 1235,  938, 1334, 1366, 1659, 1578,  964, 1612 },
468    {  592,  422,  925,  847, 1139, 1112, 1387, 2036,  861, 1041 },
469    {  403,  837,  732,  770,  941, 1658, 1250,  809, 1407, 1407 },
470    {  896,  874, 1071,  381, 1568, 1722, 1437, 2192,  480, 1035 },
471    {  640, 1098, 1012, 1032,  684, 1382, 1581, 2106,  416,  865 },
472    {  559, 1005,  819,  914,  710,  770, 1418,  920,  838, 1435 },
473    {  415, 1258, 1245,  870, 1278, 3067,  770, 1021, 1287,  522 },
474    {  406,  990,  601, 1009, 1265, 1265, 1267,  759, 1017, 1277 },
475    {  968, 1182, 1329,  788, 1032, 1292, 1705, 1714,  203, 1403 },
476    {  732,  877, 1279,  471,  901, 1161, 1545, 1294,  755,  755 } },
477  { {  111,  931, 1378, 1185, 1933, 1648, 1148, 1714, 1873, 1307 },
478    {  406,  414, 1030, 1023, 1910, 1404, 1313, 1647, 1509,  793 },
479    {  342,  640,  575, 1088, 1241, 1349, 1161, 1350, 1756, 1502 },
480    {  559,  766, 1185,  357, 1682, 1428, 1329, 1897, 1219,  802 },
481    {  473,  909, 1164,  771,  719, 2508, 1427, 1432,  722,  782 },
482    {  342,  892,  785, 1145, 1150,  794, 1296, 1550,  973, 1057 },
483    {  208, 1036, 1326, 1343, 1606, 3395,  815, 1455, 1618,  712 },
484    {  228,  928,  890, 1046, 3499, 1711,  994,  829, 1720, 1318 },
485    {  768,  724, 1058,  636,  991, 1075, 1319, 1324,  616,  825 },
486    {  305, 1167, 1358,  899, 1587, 1587,  987, 1988, 1332,  501 } }
487};
488
489//------------------------------------------------------------------------------
490// Mode costs
491
492static int GetResidualCost(int ctx0, const VP8Residual* const res) {
493  int n = res->first;
494  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
495  const int p0 = res->prob[n][ctx0][0];
496  const uint16_t* t = res->cost[n][ctx0];
497  // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0
498  // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll
499  // be missing during the loop.
500  int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
501
502  if (res->last < 0) {
503    return VP8BitCost(0, p0);
504  }
505  for (; n < res->last; ++n) {
506    const int v = abs(res->coeffs[n]);
507    const int b = VP8EncBands[n + 1];
508    const int ctx = (v >= 2) ? 2 : v;
509    cost += VP8LevelCost(t, v);
510    t = res->cost[b][ctx];
511  }
512  // Last coefficient is always non-zero
513  {
514    const int v = abs(res->coeffs[n]);
515    assert(v != 0);
516    cost += VP8LevelCost(t, v);
517    if (n < 15) {
518      const int b = VP8EncBands[n + 1];
519      const int ctx = (v == 1) ? 1 : 2;
520      const int last_p0 = res->prob[b][ctx][0];
521      cost += VP8BitCost(0, last_p0);
522    }
523  }
524  return cost;
525}
526
527//------------------------------------------------------------------------------
528// init function
529
530#if defined(WEBP_USE_MIPS32)
531extern int VP8GetResidualCostMIPS32(int ctx0, const VP8Residual* const res);
532#endif  // WEBP_USE_MIPS32
533
534// TODO(skal): this, and GetResidualCost(), should probably go somewhere
535// under src/dsp/ at some point.
536VP8GetResidualCostFunc VP8GetResidualCost;
537
538void VP8GetResidualCostInit(void) {
539  VP8GetResidualCost = GetResidualCost;
540  if (VP8GetCPUInfo != NULL) {
541#if defined(WEBP_USE_MIPS32)
542    if (VP8GetCPUInfo(kMIPS32)) {
543      VP8GetResidualCost = VP8GetResidualCostMIPS32;
544    }
545#endif
546  }
547}
548
549//------------------------------------------------------------------------------
550// helper functions for residuals struct VP8Residual.
551
552void VP8InitResidual(int first, int coeff_type,
553                     VP8Encoder* const enc, VP8Residual* const res) {
554  res->coeff_type = coeff_type;
555  res->prob  = enc->proba_.coeffs_[coeff_type];
556  res->stats = enc->proba_.stats_[coeff_type];
557  res->cost  = enc->proba_.level_cost_[coeff_type];
558  res->first = first;
559}
560
561static void SetResidualCoeffs(const int16_t* const coeffs,
562                              VP8Residual* const res) {
563  int n;
564  res->last = -1;
565  assert(res->first == 0 || coeffs[0] == 0);
566  for (n = 15; n >= 0; --n) {
567    if (coeffs[n]) {
568      res->last = n;
569      break;
570    }
571  }
572  res->coeffs = coeffs;
573}
574
575//------------------------------------------------------------------------------
576// init function
577
578#if defined(WEBP_USE_SSE2)
579extern void VP8SetResidualCoeffsSSE2(const int16_t* const coeffs,
580                                     VP8Residual* const res);
581#endif  // WEBP_USE_SSE2
582
583VP8SetResidualCoeffsFunc VP8SetResidualCoeffs;
584
585void VP8SetResidualCoeffsInit(void) {
586  VP8SetResidualCoeffs = SetResidualCoeffs;
587  if (VP8GetCPUInfo != NULL) {
588#if defined(WEBP_USE_SSE2)
589    if (VP8GetCPUInfo(kSSE2)) {
590      VP8SetResidualCoeffs = VP8SetResidualCoeffsSSE2;
591    }
592#endif
593  }
594}
595
596//------------------------------------------------------------------------------
597// Mode costs
598
599int VP8GetCostLuma4(VP8EncIterator* const it, const int16_t levels[16]) {
600  const int x = (it->i4_ & 3), y = (it->i4_ >> 2);
601  VP8Residual res;
602  VP8Encoder* const enc = it->enc_;
603  int R = 0;
604  int ctx;
605
606  VP8InitResidual(0, 3, enc, &res);
607  ctx = it->top_nz_[x] + it->left_nz_[y];
608  VP8SetResidualCoeffs(levels, &res);
609  R += VP8GetResidualCost(ctx, &res);
610  return R;
611}
612
613int VP8GetCostLuma16(VP8EncIterator* const it, const VP8ModeScore* const rd) {
614  VP8Residual res;
615  VP8Encoder* const enc = it->enc_;
616  int x, y;
617  int R = 0;
618
619  VP8IteratorNzToBytes(it);   // re-import the non-zero context
620
621  // DC
622  VP8InitResidual(0, 1, enc, &res);
623  VP8SetResidualCoeffs(rd->y_dc_levels, &res);
624  R += VP8GetResidualCost(it->top_nz_[8] + it->left_nz_[8], &res);
625
626  // AC
627  VP8InitResidual(1, 0, enc, &res);
628  for (y = 0; y < 4; ++y) {
629    for (x = 0; x < 4; ++x) {
630      const int ctx = it->top_nz_[x] + it->left_nz_[y];
631      VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res);
632      R += VP8GetResidualCost(ctx, &res);
633      it->top_nz_[x] = it->left_nz_[y] = (res.last >= 0);
634    }
635  }
636  return R;
637}
638
639int VP8GetCostUV(VP8EncIterator* const it, const VP8ModeScore* const rd) {
640  VP8Residual res;
641  VP8Encoder* const enc = it->enc_;
642  int ch, x, y;
643  int R = 0;
644
645  VP8IteratorNzToBytes(it);  // re-import the non-zero context
646
647  VP8InitResidual(0, 2, enc, &res);
648  for (ch = 0; ch <= 2; ch += 2) {
649    for (y = 0; y < 2; ++y) {
650      for (x = 0; x < 2; ++x) {
651        const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y];
652        VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res);
653        R += VP8GetResidualCost(ctx, &res);
654        it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = (res.last >= 0);
655      }
656    }
657  }
658  return R;
659}
660
661
662//------------------------------------------------------------------------------
663// Recording of token probabilities.
664
665// Record proba context used
666static int Record(int bit, proba_t* const stats) {
667  proba_t p = *stats;
668  if (p >= 0xffff0000u) {               // an overflow is inbound.
669    p = ((p + 1u) >> 1) & 0x7fff7fffu;  // -> divide the stats by 2.
670  }
671  // record bit count (lower 16 bits) and increment total count (upper 16 bits).
672  p += 0x00010000u + bit;
673  *stats = p;
674  return bit;
675}
676
677// We keep the table-free variant around for reference, in case.
678#define USE_LEVEL_CODE_TABLE
679
680// Simulate block coding, but only record statistics.
681// Note: no need to record the fixed probas.
682int VP8RecordCoeffs(int ctx, const VP8Residual* const res) {
683  int n = res->first;
684  // should be stats[VP8EncBands[n]], but it's equivalent for n=0 or 1
685  proba_t* s = res->stats[n][ctx];
686  if (res->last  < 0) {
687    Record(0, s + 0);
688    return 0;
689  }
690  while (n <= res->last) {
691    int v;
692    Record(1, s + 0);  // order of record doesn't matter
693    while ((v = res->coeffs[n++]) == 0) {
694      Record(0, s + 1);
695      s = res->stats[VP8EncBands[n]][0];
696    }
697    Record(1, s + 1);
698    if (!Record(2u < (unsigned int)(v + 1), s + 2)) {  // v = -1 or 1
699      s = res->stats[VP8EncBands[n]][1];
700    } else {
701      v = abs(v);
702#if !defined(USE_LEVEL_CODE_TABLE)
703      if (!Record(v > 4, s + 3)) {
704        if (Record(v != 2, s + 4))
705          Record(v == 4, s + 5);
706      } else if (!Record(v > 10, s + 6)) {
707        Record(v > 6, s + 7);
708      } else if (!Record((v >= 3 + (8 << 2)), s + 8)) {
709        Record((v >= 3 + (8 << 1)), s + 9);
710      } else {
711        Record((v >= 3 + (8 << 3)), s + 10);
712      }
713#else
714      if (v > MAX_VARIABLE_LEVEL) {
715        v = MAX_VARIABLE_LEVEL;
716      }
717
718      {
719        const int bits = VP8LevelCodes[v - 1][1];
720        int pattern = VP8LevelCodes[v - 1][0];
721        int i;
722        for (i = 0; (pattern >>= 1) != 0; ++i) {
723          const int mask = 2 << i;
724          if (pattern & 1) Record(!!(bits & mask), s + 3 + i);
725        }
726      }
727#endif
728      s = res->stats[VP8EncBands[n]][2];
729    }
730  }
731  if (n < 16) Record(0, s + 0);
732  return 1;
733}
734
735//------------------------------------------------------------------------------
736