Home | History | Annotate | Download | only in enc
      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 (at) gmail.com)
     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 gives the pattern of contexts to
     56 // use for coding it (in [][0]) as well as the bit value to use for each
     57 // 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[MAX_LEVEL + 1] = {
     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 
    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 
    357 void VP8CalculateLevelCosts(VP8Proba* const proba) {
    358   int ctype, band, ctx;
    359 
    360   if (!proba->dirty_) return;  // nothing to do.
    361 
    362   for (ctype = 0; ctype < NUM_TYPES; ++ctype) {
    363     for (band = 0; band < NUM_BANDS; ++band) {
    364       for (ctx = 0; ctx < NUM_CTX; ++ctx) {
    365         const uint8_t* const p = proba->coeffs_[ctype][band][ctx];
    366         uint16_t* const table = proba->level_cost_[ctype][band][ctx];
    367         const int cost_base = VP8BitCost(1, p[1]);
    368         int v;
    369         table[0] = VP8BitCost(0, p[1]);
    370         for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) {
    371           table[v] = cost_base + VariableLevelCost(v, p);
    372         }
    373         // Starting at level 67 and up, the variable part of the cost is
    374         // actually constant.
    375       }
    376     }
    377   }
    378   proba->dirty_ = 0;
    379 }
    380 
    381 //------------------------------------------------------------------------------
    382 // Mode cost tables.
    383 
    384 // These are the fixed probabilities (in the coding trees) turned into bit-cost
    385 // by calling VP8BitCost().
    386 const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 };
    387 // note: these values include the fixed VP8BitCost(1, 145) mode selection cost.
    388 const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 };
    389 const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES] = {
    390   { {  251, 1362, 1934, 2085, 2314, 2230, 1839, 1988, 2437, 2348 },
    391     {  403,  680, 1507, 1519, 2060, 2005, 1992, 1914, 1924, 1733 },
    392     {  353, 1121,  973, 1895, 2060, 1787, 1671, 1516, 2012, 1868 },
    393     {  770,  852, 1581,  632, 1393, 1780, 1823, 1936, 1074, 1218 },
    394     {  510, 1270, 1467, 1319,  847, 1279, 1792, 2094, 1080, 1353 },
    395     {  488, 1322,  918, 1573, 1300,  883, 1814, 1752, 1756, 1502 },
    396     {  425,  992, 1820, 1514, 1843, 2440,  937, 1771, 1924, 1129 },
    397     {  363, 1248, 1257, 1970, 2194, 2385, 1569,  953, 1951, 1601 },
    398     {  723, 1257, 1631,  964,  963, 1508, 1697, 1824,  671, 1418 },
    399     {  635, 1038, 1573,  930, 1673, 1413, 1410, 1687, 1410,  749 } },
    400   { {  451,  613, 1345, 1702, 1870, 1716, 1728, 1766, 2190, 2310 },
    401     {  678,  453, 1171, 1443, 1925, 1831, 2045, 1781, 1887, 1602 },
    402     {  711,  666,  674, 1718, 1910, 1493, 1775, 1193, 2325, 2325 },
    403     {  883,  854, 1583,  542, 1800, 1878, 1664, 2149, 1207, 1087 },
    404     {  669,  994, 1248, 1122,  949, 1179, 1376, 1729, 1070, 1244 },
    405     {  715, 1026,  715, 1350, 1430,  930, 1717, 1296, 1479, 1479 },
    406     {  544,  841, 1656, 1450, 2094, 3883, 1010, 1759, 2076,  809 },
    407     {  610,  855,  957, 1553, 2067, 1561, 1704,  824, 2066, 1226 },
    408     {  833,  960, 1416,  819, 1277, 1619, 1501, 1617,  757, 1182 },
    409     {  711,  964, 1252,  879, 1441, 1828, 1508, 1636, 1594,  734 } },
    410   { {  605,  764,  734, 1713, 1747, 1192, 1819, 1353, 1877, 2392 },
    411     {  866,  641,  586, 1622, 2072, 1431, 1888, 1346, 2189, 1764 },
    412     {  901,  851,  456, 2165, 2281, 1405, 1739, 1193, 2183, 2443 },
    413     {  770, 1045,  952, 1078, 1342, 1191, 1436, 1063, 1303,  995 },
    414     {  901, 1086,  727, 1170,  884, 1105, 1267, 1401, 1739, 1337 },
    415     {  951, 1162,  595, 1488, 1388,  703, 1790, 1366, 2057, 1724 },
    416     {  534,  986, 1273, 1987, 3273, 1485, 1024, 1399, 1583,  866 },
    417     {  699, 1182,  695, 1978, 1726, 1986, 1326,  714, 1750, 1672 },
    418     {  951, 1217, 1209,  920, 1062, 1441, 1548,  999,  952,  932 },
    419     {  733, 1284,  784, 1256, 1557, 1098, 1257, 1357, 1414,  908 } },
    420   { {  316, 1075, 1653, 1220, 2145, 2051, 1730, 2131, 1884, 1790 },
    421     {  745,  516, 1404,  894, 1599, 2375, 2013, 2105, 1475, 1381 },
    422     {  516,  729, 1088, 1319, 1637, 3426, 1636, 1275, 1531, 1453 },
    423     {  894,  943, 2138,  468, 1704, 2259, 2069, 1763, 1266, 1158 },
    424     {  605, 1025, 1235,  871, 1170, 1767, 1493, 1500, 1104, 1258 },
    425     {  739,  826, 1207, 1151, 1412,  846, 1305, 2726, 1014, 1569 },
    426     {  558,  825, 1820, 1398, 3344, 1556, 1218, 1550, 1228,  878 },
    427     {  429,  951, 1089, 1816, 3861, 3861, 1556,  969, 1568, 1828 },
    428     {  883,  961, 1752,  769, 1468, 1810, 2081, 2346,  613, 1298 },
    429     {  803,  895, 1372,  641, 1303, 1708, 1686, 1700, 1306, 1033 } },
    430   { {  439, 1267, 1270, 1579,  963, 1193, 1723, 1729, 1198, 1993 },
    431     {  705,  725, 1029, 1153, 1176, 1103, 1821, 1567, 1259, 1574 },
    432     {  723,  859,  802, 1253,  972, 1202, 1407, 1665, 1520, 1674 },
    433     {  894,  960, 1254,  887, 1052, 1607, 1344, 1349,  865, 1150 },
    434     {  833, 1312, 1337, 1205,  572, 1288, 1414, 1529, 1088, 1430 },
    435     {  842, 1279, 1068, 1861,  862,  688, 1861, 1630, 1039, 1381 },
    436     {  766,  938, 1279, 1546, 3338, 1550, 1031, 1542, 1288,  640 },
    437     {  715, 1090,  835, 1609, 1100, 1100, 1603, 1019, 1102, 1617 },
    438     {  894, 1813, 1500, 1188,  789, 1194, 1491, 1919,  617, 1333 },
    439     {  610, 1076, 1644, 1281, 1283,  975, 1179, 1688, 1434,  889 } },
    440   { {  544,  971, 1146, 1849, 1221,  740, 1857, 1621, 1683, 2430 },
    441     {  723,  705,  961, 1371, 1426,  821, 2081, 2079, 1839, 1380 },
    442     {  783,  857,  703, 2145, 1419,  814, 1791, 1310, 1609, 2206 },
    443     {  997, 1000, 1153,  792, 1229, 1162, 1810, 1418,  942,  979 },
    444     {  901, 1226,  883, 1289,  793,  715, 1904, 1649, 1319, 3108 },
    445     {  979, 1478,  782, 2216, 1454,  455, 3092, 1591, 1997, 1664 },
    446     {  663, 1110, 1504, 1114, 1522, 3311,  676, 1522, 1530, 1024 },
    447     {  605, 1138, 1153, 1314, 1569, 1315, 1157,  804, 1574, 1320 },
    448     {  770, 1216, 1218, 1227,  869, 1384, 1232, 1375,  834, 1239 },
    449     {  775, 1007,  843, 1216, 1225, 1074, 2527, 1479, 1149,  975 } },
    450   { {  477,  817, 1309, 1439, 1708, 1454, 1159, 1241, 1945, 1672 },
    451     {  577,  796, 1112, 1271, 1618, 1458, 1087, 1345, 1831, 1265 },
    452     {  663,  776,  753, 1940, 1690, 1690, 1227, 1097, 3149, 1361 },
    453     {  766, 1299, 1744, 1161, 1565, 1106, 1045, 1230, 1232,  707 },
    454     {  915, 1026, 1404, 1182, 1184,  851, 1428, 2425, 1043,  789 },
    455     {  883, 1456,  790, 1082, 1086,  985, 1083, 1484, 1238, 1160 },
    456     {  507, 1345, 2261, 1995, 1847, 3636,  653, 1761, 2287,  933 },
    457     {  553, 1193, 1470, 2057, 2059, 2059,  833,  779, 2058, 1263 },
    458     {  766, 1275, 1515, 1039,  957, 1554, 1286, 1540, 1289,  705 },
    459     {  499, 1378, 1496, 1385, 1850, 1850, 1044, 2465, 1515,  720 } },
    460   { {  553,  930,  978, 2077, 1968, 1481, 1457,  761, 1957, 2362 },
    461     {  694,  864,  905, 1720, 1670, 1621, 1429,  718, 2125, 1477 },
    462     {  699,  968,  658, 3190, 2024, 1479, 1865,  750, 2060, 2320 },
    463     {  733, 1308, 1296, 1062, 1576, 1322, 1062, 1112, 1172,  816 },
    464     {  920,  927, 1052,  939,  947, 1156, 1152, 1073, 3056, 1268 },
    465     {  723, 1534,  711, 1547, 1294,  892, 1553,  928, 1815, 1561 },
    466     {  663, 1366, 1583, 2111, 1712, 3501,  522, 1155, 2130, 1133 },
    467     {  614, 1731, 1188, 2343, 1944, 3733, 1287,  487, 3546, 1758 },
    468     {  770, 1585, 1312,  826,  884, 2673, 1185, 1006, 1195, 1195 },
    469     {  758, 1333, 1273, 1023, 1621, 1162, 1351,  833, 1479,  862 } },
    470   { {  376, 1193, 1446, 1149, 1545, 1577, 1870, 1789, 1175, 1823 },
    471     {  803,  633, 1136, 1058, 1350, 1323, 1598, 2247, 1072, 1252 },
    472     {  614, 1048,  943,  981, 1152, 1869, 1461, 1020, 1618, 1618 },
    473     { 1107, 1085, 1282,  592, 1779, 1933, 1648, 2403,  691, 1246 },
    474     {  851, 1309, 1223, 1243,  895, 1593, 1792, 2317,  627, 1076 },
    475     {  770, 1216, 1030, 1125,  921,  981, 1629, 1131, 1049, 1646 },
    476     {  626, 1469, 1456, 1081, 1489, 3278,  981, 1232, 1498,  733 },
    477     {  617, 1201,  812, 1220, 1476, 1476, 1478,  970, 1228, 1488 },
    478     { 1179, 1393, 1540,  999, 1243, 1503, 1916, 1925,  414, 1614 },
    479     {  943, 1088, 1490,  682, 1112, 1372, 1756, 1505,  966,  966 } },
    480   { {  322, 1142, 1589, 1396, 2144, 1859, 1359, 1925, 2084, 1518 },
    481     {  617,  625, 1241, 1234, 2121, 1615, 1524, 1858, 1720, 1004 },
    482     {  553,  851,  786, 1299, 1452, 1560, 1372, 1561, 1967, 1713 },
    483     {  770,  977, 1396,  568, 1893, 1639, 1540, 2108, 1430, 1013 },
    484     {  684, 1120, 1375,  982,  930, 2719, 1638, 1643,  933,  993 },
    485     {  553, 1103,  996, 1356, 1361, 1005, 1507, 1761, 1184, 1268 },
    486     {  419, 1247, 1537, 1554, 1817, 3606, 1026, 1666, 1829,  923 },
    487     {  439, 1139, 1101, 1257, 3710, 1922, 1205, 1040, 1931, 1529 },
    488     {  979,  935, 1269,  847, 1202, 1286, 1530, 1535,  827, 1036 },
    489     {  516, 1378, 1569, 1110, 1798, 1798, 1198, 2199, 1543,  712 } },
    490 };
    491 
    492 //------------------------------------------------------------------------------
    493 
    494 #if defined(__cplusplus) || defined(c_plusplus)
    495 }    // extern "C"
    496 #endif
    497