Coverage Report

Created: 2026-02-26 06:46

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libvpx/vp9/encoder/vp9_treewriter.c
Line
Count
Source
1
/*
2
 *  Copyright (c) 2010 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
11
#include "vp9/encoder/vp9_treewriter.h"
12
13
static void tree2tok(struct vp9_token *tokens, const vpx_tree_index *tree,
14
32
                     int i, int v, int l) {
15
32
  v += v;
16
32
  ++l;
17
18
64
  do {
19
64
    const vpx_tree_index j = tree[i++];
20
64
    if (j <= 0) {
21
38
      tokens[-j].value = v;
22
38
      tokens[-j].len = l;
23
38
    } else {
24
26
      tree2tok(tokens, tree, j, v, l);
25
26
    }
26
64
  } while (++v & 1);
27
32
}
28
29
void vp9_tokens_from_tree(struct vp9_token *tokens,
30
6
                          const vpx_tree_index *tree) {
31
6
  tree2tok(tokens, tree, 0, 0, 0);
32
6
}
33
34
static unsigned int convert_distribution(unsigned int i, vpx_tree tree,
35
                                         unsigned int branch_ct[][2],
36
217M
                                         const unsigned int num_events[]) {
37
217M
  unsigned int left, right;
38
39
217M
  if (tree[i] <= 0)
40
170M
    left = num_events[-tree[i]];
41
46.9M
  else
42
46.9M
    left = convert_distribution(tree[i], tree, branch_ct, num_events);
43
44
217M
  if (tree[i + 1] <= 0)
45
76.9M
    right = num_events[-tree[i + 1]];
46
140M
  else
47
140M
    right = convert_distribution(tree[i + 1], tree, branch_ct, num_events);
48
49
217M
  branch_ct[i >> 1][0] = left;
50
217M
  branch_ct[i >> 1][1] = right;
51
217M
  return left + right;
52
217M
}
53
54
void vp9_tree_probs_from_distribution(vpx_tree tree,
55
                                      unsigned int branch_ct[/* n-1 */][2],
56
29.9M
                                      const unsigned int num_events[/* n */]) {
57
29.9M
  convert_distribution(0, tree, branch_ct, num_events);
58
29.9M
}