github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/webp/libwebp/src/enc/cost.c (about)

     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  
    19  const 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]).
    54  const 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.
    76  const 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  
   335  static 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  
   353  void 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().
   382  const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 };
   383  // note: these values include the fixed VP8BitCost(1, 145) mode selection cost.
   384  const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 };
   385  const 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