blob: 639d24dd2f0158c1f119df9c2f50cf4f7b3bf5fc [file] [log] [blame]
Dmitry Kovalevb5c92612013-12-16 12:53:09 -08001/*
2 * Copyright (c) 2013 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Yaowu Xu87d2c3c2015-07-17 14:09:05 -070011#include "./prob.h"
Dmitry Kovalevb5c92612013-12-16 12:53:09 -080012
Yaowu Xu70ad6682015-07-20 14:04:21 -070013const uint8_t vpx_norm[256] = {
Dmitry Kovalevb5c92612013-12-16 12:53:09 -080014 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
15 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
16 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
17 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
19 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
20 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
21 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
22 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
23 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
26 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
27 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
28 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
29 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
30};
Jim Bankoski69f58b42014-02-10 07:39:12 -080031
Jim Bankoski69f58b42014-02-10 07:39:12 -080032static unsigned int tree_merge_probs_impl(unsigned int i,
Yaowu Xu70ad6682015-07-20 14:04:21 -070033 const vpx_tree_index *tree,
Yaowu Xubf825142015-07-20 13:49:15 -070034 const vpx_prob *pre_probs,
Jim Bankoski69f58b42014-02-10 07:39:12 -080035 const unsigned int *counts,
Yaowu Xubf825142015-07-20 13:49:15 -070036 vpx_prob *probs) {
Jim Bankoski69f58b42014-02-10 07:39:12 -080037 const int l = tree[i];
38 const unsigned int left_count = (l <= 0)
39 ? counts[-l]
Yaowu Xueda17972015-01-22 15:27:43 -080040 : tree_merge_probs_impl(l, tree, pre_probs, counts, probs);
Jim Bankoski69f58b42014-02-10 07:39:12 -080041 const int r = tree[i + 1];
42 const unsigned int right_count = (r <= 0)
43 ? counts[-r]
Yaowu Xueda17972015-01-22 15:27:43 -080044 : tree_merge_probs_impl(r, tree, pre_probs, counts, probs);
Jim Bankoski69f58b42014-02-10 07:39:12 -080045 const unsigned int ct[2] = { left_count, right_count };
Yaowu Xueda17972015-01-22 15:27:43 -080046 probs[i >> 1] = mode_mv_merge_probs(pre_probs[i >> 1], ct);
Jim Bankoski69f58b42014-02-10 07:39:12 -080047 return left_count + right_count;
48}
49
Yaowu Xu70ad6682015-07-20 14:04:21 -070050void vpx_tree_merge_probs(const vpx_tree_index *tree, const vpx_prob *pre_probs,
Yaowu Xubf825142015-07-20 13:49:15 -070051 const unsigned int *counts, vpx_prob *probs) {
Yaowu Xueda17972015-01-22 15:27:43 -080052 tree_merge_probs_impl(0, tree, pre_probs, counts, probs);
Jim Bankoski69f58b42014-02-10 07:39:12 -080053}