xref: /aosp_15_r20/external/libvpx/vpx_dsp/prob.c (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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