1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2013 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker *
4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker */
10*fb1b10abSAndroid Build Coastguard Worker
11*fb1b10abSAndroid Build Coastguard Worker #include "./prob.h"
12*fb1b10abSAndroid Build Coastguard Worker
13*fb1b10abSAndroid Build Coastguard Worker const uint8_t vpx_norm[256] = {
14*fb1b10abSAndroid Build Coastguard Worker 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
15*fb1b10abSAndroid Build Coastguard Worker 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
16*fb1b10abSAndroid Build Coastguard Worker 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
17*fb1b10abSAndroid Build Coastguard Worker 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18*fb1b10abSAndroid Build Coastguard Worker 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
19*fb1b10abSAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
20*fb1b10abSAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
21*fb1b10abSAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
22*fb1b10abSAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
23*fb1b10abSAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
24*fb1b10abSAndroid Build Coastguard Worker };
25*fb1b10abSAndroid Build Coastguard Worker
tree_merge_probs_impl(unsigned int i,const vpx_tree_index * tree,const vpx_prob * pre_probs,const unsigned int * counts,vpx_prob * probs)26*fb1b10abSAndroid Build Coastguard Worker static unsigned int tree_merge_probs_impl(unsigned int i,
27*fb1b10abSAndroid Build Coastguard Worker const vpx_tree_index *tree,
28*fb1b10abSAndroid Build Coastguard Worker const vpx_prob *pre_probs,
29*fb1b10abSAndroid Build Coastguard Worker const unsigned int *counts,
30*fb1b10abSAndroid Build Coastguard Worker vpx_prob *probs) {
31*fb1b10abSAndroid Build Coastguard Worker const int l = tree[i];
32*fb1b10abSAndroid Build Coastguard Worker const unsigned int left_count =
33*fb1b10abSAndroid Build Coastguard Worker (l <= 0) ? counts[-l]
34*fb1b10abSAndroid Build Coastguard Worker : tree_merge_probs_impl(l, tree, pre_probs, counts, probs);
35*fb1b10abSAndroid Build Coastguard Worker const int r = tree[i + 1];
36*fb1b10abSAndroid Build Coastguard Worker const unsigned int right_count =
37*fb1b10abSAndroid Build Coastguard Worker (r <= 0) ? counts[-r]
38*fb1b10abSAndroid Build Coastguard Worker : tree_merge_probs_impl(r, tree, pre_probs, counts, probs);
39*fb1b10abSAndroid Build Coastguard Worker const unsigned int ct[2] = { left_count, right_count };
40*fb1b10abSAndroid Build Coastguard Worker probs[i >> 1] = mode_mv_merge_probs(pre_probs[i >> 1], ct);
41*fb1b10abSAndroid Build Coastguard Worker return left_count + right_count;
42*fb1b10abSAndroid Build Coastguard Worker }
43*fb1b10abSAndroid Build Coastguard Worker
vpx_tree_merge_probs(const vpx_tree_index * tree,const vpx_prob * pre_probs,const unsigned int * counts,vpx_prob * probs)44*fb1b10abSAndroid Build Coastguard Worker void vpx_tree_merge_probs(const vpx_tree_index *tree, const vpx_prob *pre_probs,
45*fb1b10abSAndroid Build Coastguard Worker const unsigned int *counts, vpx_prob *probs) {
46*fb1b10abSAndroid Build Coastguard Worker tree_merge_probs_impl(0, tree, pre_probs, counts, probs);
47*fb1b10abSAndroid Build Coastguard Worker }
48