tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

cost.c (18460B)


      1 // Copyright 2014 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 // Author: Skal (pascal.massimino@gmail.com)
     11 
     12 #include <assert.h>
     13 #include <stddef.h>
     14 #include <stdlib.h>
     15 
     16 #include "src/dsp/cpu.h"
     17 #include "src/webp/types.h"
     18 #include "src/dsp/dsp.h"
     19 #include "src/enc/cost_enc.h"
     20 #include "src/enc/vp8i_enc.h"
     21 
     22 //------------------------------------------------------------------------------
     23 // Boolean-cost cost table
     24 
     25 const uint16_t VP8EntropyCost[256] = {
     26  1792, 1792, 1792, 1536, 1536, 1408, 1366, 1280, 1280, 1216,
     27  1178, 1152, 1110, 1076, 1061, 1024, 1024,  992,  968,  951,
     28   939,  911,  896,  878,  871,  854,  838,  820,  811,  794,
     29   786,  768,  768,  752,  740,  732,  720,  709,  704,  690,
     30   683,  672,  666,  655,  647,  640,  631,  622,  615,  607,
     31   598,  592,  586,  576,  572,  564,  559,  555,  547,  541,
     32   534,  528,  522,  512,  512,  504,  500,  494,  488,  483,
     33   477,  473,  467,  461,  458,  452,  448,  443,  438,  434,
     34   427,  424,  419,  415,  410,  406,  403,  399,  394,  390,
     35   384,  384,  377,  374,  370,  366,  362,  359,  355,  351,
     36   347,  342,  342,  336,  333,  330,  326,  323,  320,  316,
     37   312,  308,  305,  302,  299,  296,  293,  288,  287,  283,
     38   280,  277,  274,  272,  268,  266,  262,  256,  256,  256,
     39   251,  248,  245,  242,  240,  237,  234,  232,  228,  226,
     40   223,  221,  218,  216,  214,  211,  208,  205,  203,  201,
     41   198,  196,  192,  191,  188,  187,  183,  181,  179,  176,
     42   175,  171,  171,  168,  165,  163,  160,  159,  156,  154,
     43   152,  150,  148,  146,  144,  142,  139,  138,  135,  133,
     44   131,  128,  128,  125,  123,  121,  119,  117,  115,  113,
     45   111,  110,  107,  105,  103,  102,  100,   98,   96,   94,
     46    92,   91,   89,   86,   86,   83,   82,   80,   77,   76,
     47    74,   73,   71,   69,   67,   66,   64,   63,   61,   59,
     48    57,   55,   54,   52,   51,   49,   47,   46,   44,   43,
     49    41,   40,   38,   36,   35,   33,   32,   30,   29,   27,
     50    25,   24,   22,   21,   19,   18,   16,   15,   13,   12,
     51    10,    9,    7,    6,    4,    3
     52 };
     53 
     54 //------------------------------------------------------------------------------
     55 // Level cost tables
     56 
     57 // fixed costs for coding levels, deduce from the coding tree.
     58 // This is only the part that doesn't depend on the probability state.
     59 const uint16_t VP8LevelFixedCosts[MAX_LEVEL + 1] = {
     60     0,  256,  256,  256,  256,  432,  618,  630,
     61   731,  640,  640,  828,  901,  948, 1021, 1101,
     62  1174, 1221, 1294, 1042, 1085, 1115, 1158, 1202,
     63  1245, 1275, 1318, 1337, 1380, 1410, 1453, 1497,
     64  1540, 1570, 1613, 1280, 1295, 1317, 1332, 1358,
     65  1373, 1395, 1410, 1454, 1469, 1491, 1506, 1532,
     66  1547, 1569, 1584, 1601, 1616, 1638, 1653, 1679,
     67  1694, 1716, 1731, 1775, 1790, 1812, 1827, 1853,
     68  1868, 1890, 1905, 1727, 1733, 1742, 1748, 1759,
     69  1765, 1774, 1780, 1800, 1806, 1815, 1821, 1832,
     70  1838, 1847, 1853, 1878, 1884, 1893, 1899, 1910,
     71  1916, 1925, 1931, 1951, 1957, 1966, 1972, 1983,
     72  1989, 1998, 2004, 2027, 2033, 2042, 2048, 2059,
     73  2065, 2074, 2080, 2100, 2106, 2115, 2121, 2132,
     74  2138, 2147, 2153, 2178, 2184, 2193, 2199, 2210,
     75  2216, 2225, 2231, 2251, 2257, 2266, 2272, 2283,
     76  2289, 2298, 2304, 2168, 2174, 2183, 2189, 2200,
     77  2206, 2215, 2221, 2241, 2247, 2256, 2262, 2273,
     78  2279, 2288, 2294, 2319, 2325, 2334, 2340, 2351,
     79  2357, 2366, 2372, 2392, 2398, 2407, 2413, 2424,
     80  2430, 2439, 2445, 2468, 2474, 2483, 2489, 2500,
     81  2506, 2515, 2521, 2541, 2547, 2556, 2562, 2573,
     82  2579, 2588, 2594, 2619, 2625, 2634, 2640, 2651,
     83  2657, 2666, 2672, 2692, 2698, 2707, 2713, 2724,
     84  2730, 2739, 2745, 2540, 2546, 2555, 2561, 2572,
     85  2578, 2587, 2593, 2613, 2619, 2628, 2634, 2645,
     86  2651, 2660, 2666, 2691, 2697, 2706, 2712, 2723,
     87  2729, 2738, 2744, 2764, 2770, 2779, 2785, 2796,
     88  2802, 2811, 2817, 2840, 2846, 2855, 2861, 2872,
     89  2878, 2887, 2893, 2913, 2919, 2928, 2934, 2945,
     90  2951, 2960, 2966, 2991, 2997, 3006, 3012, 3023,
     91  3029, 3038, 3044, 3064, 3070, 3079, 3085, 3096,
     92  3102, 3111, 3117, 2981, 2987, 2996, 3002, 3013,
     93  3019, 3028, 3034, 3054, 3060, 3069, 3075, 3086,
     94  3092, 3101, 3107, 3132, 3138, 3147, 3153, 3164,
     95  3170, 3179, 3185, 3205, 3211, 3220, 3226, 3237,
     96  3243, 3252, 3258, 3281, 3287, 3296, 3302, 3313,
     97  3319, 3328, 3334, 3354, 3360, 3369, 3375, 3386,
     98  3392, 3401, 3407, 3432, 3438, 3447, 3453, 3464,
     99  3470, 3479, 3485, 3505, 3511, 3520, 3526, 3537,
    100  3543, 3552, 3558, 2816, 2822, 2831, 2837, 2848,
    101  2854, 2863, 2869, 2889, 2895, 2904, 2910, 2921,
    102  2927, 2936, 2942, 2967, 2973, 2982, 2988, 2999,
    103  3005, 3014, 3020, 3040, 3046, 3055, 3061, 3072,
    104  3078, 3087, 3093, 3116, 3122, 3131, 3137, 3148,
    105  3154, 3163, 3169, 3189, 3195, 3204, 3210, 3221,
    106  3227, 3236, 3242, 3267, 3273, 3282, 3288, 3299,
    107  3305, 3314, 3320, 3340, 3346, 3355, 3361, 3372,
    108  3378, 3387, 3393, 3257, 3263, 3272, 3278, 3289,
    109  3295, 3304, 3310, 3330, 3336, 3345, 3351, 3362,
    110  3368, 3377, 3383, 3408, 3414, 3423, 3429, 3440,
    111  3446, 3455, 3461, 3481, 3487, 3496, 3502, 3513,
    112  3519, 3528, 3534, 3557, 3563, 3572, 3578, 3589,
    113  3595, 3604, 3610, 3630, 3636, 3645, 3651, 3662,
    114  3668, 3677, 3683, 3708, 3714, 3723, 3729, 3740,
    115  3746, 3755, 3761, 3781, 3787, 3796, 3802, 3813,
    116  3819, 3828, 3834, 3629, 3635, 3644, 3650, 3661,
    117  3667, 3676, 3682, 3702, 3708, 3717, 3723, 3734,
    118  3740, 3749, 3755, 3780, 3786, 3795, 3801, 3812,
    119  3818, 3827, 3833, 3853, 3859, 3868, 3874, 3885,
    120  3891, 3900, 3906, 3929, 3935, 3944, 3950, 3961,
    121  3967, 3976, 3982, 4002, 4008, 4017, 4023, 4034,
    122  4040, 4049, 4055, 4080, 4086, 4095, 4101, 4112,
    123  4118, 4127, 4133, 4153, 4159, 4168, 4174, 4185,
    124  4191, 4200, 4206, 4070, 4076, 4085, 4091, 4102,
    125  4108, 4117, 4123, 4143, 4149, 4158, 4164, 4175,
    126  4181, 4190, 4196, 4221, 4227, 4236, 4242, 4253,
    127  4259, 4268, 4274, 4294, 4300, 4309, 4315, 4326,
    128  4332, 4341, 4347, 4370, 4376, 4385, 4391, 4402,
    129  4408, 4417, 4423, 4443, 4449, 4458, 4464, 4475,
    130  4481, 4490, 4496, 4521, 4527, 4536, 4542, 4553,
    131  4559, 4568, 4574, 4594, 4600, 4609, 4615, 4626,
    132  4632, 4641, 4647, 3515, 3521, 3530, 3536, 3547,
    133  3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
    134  3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
    135  3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
    136  3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
    137  3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
    138  3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
    139  4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
    140  4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
    141  3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
    142  4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
    143  4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
    144  4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
    145  4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
    146  4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
    147  4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
    148  4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
    149  4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
    150  4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
    151  4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
    152  4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
    153  4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
    154  4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
    155  4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
    156  4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
    157  4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
    158  4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
    159  4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
    160  5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
    161  5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
    162  5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
    163  5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
    164  5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
    165  4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
    166  4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
    167  4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
    168  4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
    169  4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
    170  5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
    171  5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
    172  5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
    173  5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
    174  5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
    175  5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
    176  5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
    177  5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
    178  5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
    179  5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
    180  5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
    181  5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
    182  5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
    183  5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
    184  5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
    185  5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
    186  5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
    187  5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
    188  5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
    189  5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
    190  5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
    191  6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
    192  6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
    193  6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
    194  6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
    195  6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
    196  6420, 6429, 6435, 3515, 3521, 3530, 3536, 3547,
    197  3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
    198  3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
    199  3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
    200  3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
    201  3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
    202  3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
    203  4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
    204  4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
    205  3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
    206  4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
    207  4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
    208  4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
    209  4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
    210  4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
    211  4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
    212  4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
    213  4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
    214  4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
    215  4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
    216  4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
    217  4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
    218  4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
    219  4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
    220  4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
    221  4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
    222  4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
    223  4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
    224  5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
    225  5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
    226  5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
    227  5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
    228  5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
    229  4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
    230  4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
    231  4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
    232  4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
    233  4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
    234  5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
    235  5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
    236  5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
    237  5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
    238  5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
    239  5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
    240  5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
    241  5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
    242  5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
    243  5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
    244  5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
    245  5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
    246  5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
    247  5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
    248  5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
    249  5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
    250  5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
    251  5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
    252  5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
    253  5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
    254  5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
    255  6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
    256  6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
    257  6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
    258  6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
    259  6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
    260  6420, 6429, 6435, 5303, 5309, 5318, 5324, 5335,
    261  5341, 5350, 5356, 5376, 5382, 5391, 5397, 5408,
    262  5414, 5423, 5429, 5454, 5460, 5469, 5475, 5486,
    263  5492, 5501, 5507, 5527, 5533, 5542, 5548, 5559,
    264  5565, 5574, 5580, 5603, 5609, 5618, 5624, 5635,
    265  5641, 5650, 5656, 5676, 5682, 5691, 5697, 5708,
    266  5714, 5723, 5729, 5754, 5760, 5769, 5775, 5786,
    267  5792, 5801, 5807, 5827, 5833, 5842, 5848, 5859,
    268  5865, 5874, 5880, 5744, 5750, 5759, 5765, 5776,
    269  5782, 5791, 5797, 5817, 5823, 5832, 5838, 5849,
    270  5855, 5864, 5870, 5895, 5901, 5910, 5916, 5927,
    271  5933, 5942, 5948, 5968, 5974, 5983, 5989, 6000,
    272  6006, 6015, 6021, 6044, 6050, 6059, 6065, 6076,
    273  6082, 6091, 6097, 6117, 6123, 6132, 6138, 6149,
    274  6155, 6164, 6170, 6195, 6201, 6210, 6216, 6227,
    275  6233, 6242, 6248, 6268, 6274, 6283, 6289, 6300,
    276  6306, 6315, 6321, 6116, 6122, 6131, 6137, 6148,
    277  6154, 6163, 6169, 6189, 6195, 6204, 6210, 6221,
    278  6227, 6236, 6242, 6267, 6273, 6282, 6288, 6299,
    279  6305, 6314, 6320, 6340, 6346, 6355, 6361, 6372,
    280  6378, 6387, 6393, 6416, 6422, 6431, 6437, 6448,
    281  6454, 6463, 6469, 6489, 6495, 6504, 6510, 6521,
    282  6527, 6536, 6542, 6567, 6573, 6582, 6588, 6599,
    283  6605, 6614, 6620, 6640, 6646, 6655, 6661, 6672,
    284  6678, 6687, 6693, 6557, 6563, 6572, 6578, 6589,
    285  6595, 6604, 6610, 6630, 6636, 6645, 6651, 6662,
    286  6668, 6677, 6683, 6708, 6714, 6723, 6729, 6740,
    287  6746, 6755, 6761, 6781, 6787, 6796, 6802, 6813,
    288  6819, 6828, 6834, 6857, 6863, 6872, 6878, 6889,
    289  6895, 6904, 6910, 6930, 6936, 6945, 6951, 6962,
    290  6968, 6977, 6983, 7008, 7014, 7023, 7029, 7040,
    291  7046, 7055, 7061, 7081, 7087, 7096, 7102, 7113,
    292  7119, 7128, 7134, 6392, 6398, 6407, 6413, 6424,
    293  6430, 6439, 6445, 6465, 6471, 6480, 6486, 6497,
    294  6503, 6512, 6518, 6543, 6549, 6558, 6564, 6575,
    295  6581, 6590, 6596, 6616, 6622, 6631, 6637, 6648,
    296  6654, 6663, 6669, 6692, 6698, 6707, 6713, 6724,
    297  6730, 6739, 6745, 6765, 6771, 6780, 6786, 6797,
    298  6803, 6812, 6818, 6843, 6849, 6858, 6864, 6875,
    299  6881, 6890, 6896, 6916, 6922, 6931, 6937, 6948,
    300  6954, 6963, 6969, 6833, 6839, 6848, 6854, 6865,
    301  6871, 6880, 6886, 6906, 6912, 6921, 6927, 6938,
    302  6944, 6953, 6959, 6984, 6990, 6999, 7005, 7016,
    303  7022, 7031, 7037, 7057, 7063, 7072, 7078, 7089,
    304  7095, 7104, 7110, 7133, 7139, 7148, 7154, 7165,
    305  7171, 7180, 7186, 7206, 7212, 7221, 7227, 7238,
    306  7244, 7253, 7259, 7284, 7290, 7299, 7305, 7316,
    307  7322, 7331, 7337, 7357, 7363, 7372, 7378, 7389,
    308  7395, 7404, 7410, 7205, 7211, 7220, 7226, 7237,
    309  7243, 7252, 7258, 7278, 7284, 7293, 7299, 7310,
    310  7316, 7325, 7331, 7356, 7362, 7371, 7377, 7388,
    311  7394, 7403, 7409, 7429, 7435, 7444, 7450, 7461,
    312  7467, 7476, 7482, 7505, 7511, 7520, 7526, 7537,
    313  7543, 7552, 7558, 7578, 7584, 7593, 7599, 7610,
    314  7616, 7625, 7631, 7656, 7662, 7671, 7677, 7688,
    315  7694, 7703, 7709, 7729, 7735, 7744, 7750, 7761
    316 };
    317 
    318 //------------------------------------------------------------------------------
    319 // Tables for level coding
    320 
    321 const uint8_t VP8EncBands[16 + 1] = {
    322  0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
    323  0  // sentinel
    324 };
    325 
    326 //------------------------------------------------------------------------------
    327 // Mode costs
    328 
    329 static int GetResidualCost_C(int ctx0, const VP8Residual* const res) {
    330  int n = res->first;
    331  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
    332  const int p0 = res->prob[n][ctx0][0];
    333  CostArrayPtr const costs = res->costs;
    334  const uint16_t* t = costs[n][ctx0];
    335  // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0
    336  // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll
    337  // be missing during the loop.
    338  int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
    339 
    340  if (res->last < 0) {
    341    return VP8BitCost(0, p0);
    342  }
    343  for (; n < res->last; ++n) {
    344    const int v = abs(res->coeffs[n]);
    345    const int ctx = (v >= 2) ? 2 : v;
    346    cost += VP8LevelCost(t, v);
    347    t = costs[n + 1][ctx];
    348  }
    349  // Last coefficient is always non-zero
    350  {
    351    const int v = abs(res->coeffs[n]);
    352    assert(v != 0);
    353    cost += VP8LevelCost(t, v);
    354    if (n < 15) {
    355      const int b = VP8EncBands[n + 1];
    356      const int ctx = (v == 1) ? 1 : 2;
    357      const int last_p0 = res->prob[b][ctx][0];
    358      cost += VP8BitCost(0, last_p0);
    359    }
    360  }
    361  return cost;
    362 }
    363 
    364 static void SetResidualCoeffs_C(const int16_t* WEBP_RESTRICT const coeffs,
    365                                VP8Residual* WEBP_RESTRICT const res) {
    366  int n;
    367  res->last = -1;
    368  assert(res->first == 0 || coeffs[0] == 0);
    369  for (n = 15; n >= 0; --n) {
    370    if (coeffs[n]) {
    371      res->last = n;
    372      break;
    373    }
    374  }
    375  res->coeffs = coeffs;
    376 }
    377 
    378 //------------------------------------------------------------------------------
    379 // init function
    380 
    381 VP8GetResidualCostFunc VP8GetResidualCost;
    382 VP8SetResidualCoeffsFunc VP8SetResidualCoeffs;
    383 
    384 extern VP8CPUInfo VP8GetCPUInfo;
    385 extern void VP8EncDspCostInitMIPS32(void);
    386 extern void VP8EncDspCostInitMIPSdspR2(void);
    387 extern void VP8EncDspCostInitSSE2(void);
    388 extern void VP8EncDspCostInitNEON(void);
    389 
    390 WEBP_DSP_INIT_FUNC(VP8EncDspCostInit) {
    391  VP8GetResidualCost = GetResidualCost_C;
    392  VP8SetResidualCoeffs = SetResidualCoeffs_C;
    393 
    394  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
    395  if (VP8GetCPUInfo != NULL) {
    396 #if defined(WEBP_USE_MIPS32)
    397    if (VP8GetCPUInfo(kMIPS32)) {
    398      VP8EncDspCostInitMIPS32();
    399    }
    400 #endif
    401 #if defined(WEBP_USE_MIPS_DSP_R2)
    402    if (VP8GetCPUInfo(kMIPSdspR2)) {
    403      VP8EncDspCostInitMIPSdspR2();
    404    }
    405 #endif
    406 #if defined(WEBP_HAVE_SSE2)
    407    if (VP8GetCPUInfo(kSSE2)) {
    408      VP8EncDspCostInitSSE2();
    409    }
    410 #endif
    411 #if defined(WEBP_HAVE_NEON)
    412    if (VP8GetCPUInfo(kNEON)) {
    413      VP8EncDspCostInitNEON();
    414    }
    415 #endif
    416  }
    417 }
    418 
    419 //------------------------------------------------------------------------------