Blame src/dsp/cost.c

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