1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/* 2b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Use of this source code is governed by a BSD-style license 5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * that can be found in the LICENSE file in the root of the source 6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * tree. An additional intellectual property rights grant can be found 7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * in the file PATENTS. All contributing project authors may 8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * be found in the AUTHORS file in the root of the source tree. 9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang */ 10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 11b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/encoder/vp9_cost.h" 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangconst unsigned int vp9_prob_cost[256] = { 145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 2047, 2047, 1791, 1641, 1535, 1452, 1385, 1328, 1279, 1235, 1196, 1161, 155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 1129, 1099, 1072, 1046, 1023, 1000, 979, 959, 940, 922, 905, 889, 165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 873, 858, 843, 829, 816, 803, 790, 778, 767, 755, 744, 733, 175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 723, 713, 703, 693, 684, 675, 666, 657, 649, 641, 633, 625, 185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 617, 609, 602, 594, 587, 580, 573, 567, 560, 553, 547, 541, 195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 534, 528, 522, 516, 511, 505, 499, 494, 488, 483, 477, 472, 205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 467, 462, 457, 452, 447, 442, 437, 433, 428, 424, 419, 415, 215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 410, 406, 401, 397, 393, 389, 385, 381, 377, 373, 369, 365, 225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 361, 357, 353, 349, 346, 342, 338, 335, 331, 328, 324, 321, 235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 317, 314, 311, 307, 304, 301, 297, 294, 291, 288, 285, 281, 245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 278, 275, 272, 269, 266, 263, 260, 257, 255, 252, 249, 246, 255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 243, 240, 238, 235, 232, 229, 227, 224, 221, 219, 216, 214, 265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 211, 208, 206, 203, 201, 198, 196, 194, 191, 189, 186, 184, 275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 181, 179, 177, 174, 172, 170, 168, 165, 163, 161, 159, 156, 285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 154, 152, 150, 148, 145, 143, 141, 139, 137, 135, 133, 131, 295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 129, 127, 125, 123, 121, 119, 117, 115, 113, 111, 109, 107, 305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 105, 103, 101, 99, 97, 95, 93, 92, 90, 88, 86, 84, 315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 82, 81, 79, 77, 75, 73, 72, 70, 68, 66, 65, 63, 325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 61, 60, 58, 56, 55, 53, 51, 50, 48, 46, 45, 43, 335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 41, 40, 38, 37, 35, 33, 32, 30, 29, 27, 25, 24, 345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 22, 21, 19, 18, 16, 15, 13, 12, 10, 9, 7, 6, 355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 4, 3, 1, 1}; 36ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 37b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic void cost(int *costs, vp9_tree tree, const vp9_prob *probs, 38b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int i, int c) { 39b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const vp9_prob prob = probs[i / 2]; 40b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int b; 41ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 42b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian for (b = 0; b <= 1; ++b) { 43b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const int cc = c + vp9_cost_bit(prob, b); 44b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const vp9_tree_index ii = tree[i + b]; 45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 46b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian if (ii <= 0) 47b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian costs[-ii] = cc; 48b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian else 49b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian cost(costs, tree, probs, ii, cc); 50b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } 51b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} 52ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 53b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_cost_tokens(int *costs, const vp9_prob *probs, vp9_tree tree) { 54b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian cost(costs, tree, probs, 0, 0); 55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 57b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_cost_tokens_skip(int *costs, const vp9_prob *probs, vp9_tree tree) { 58b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian assert(tree[0] <= 0 && tree[1] > 0); 59b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 60b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian costs[-tree[0]] = vp9_cost_bit(probs[0], 0); 61b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian cost(costs, tree, probs, 2, 0); 62b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} 63