Coverage Report

Created: 2026-02-14 06:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libvpx/vp9/encoder/vp9_tokenize.h
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
#ifndef VPX_VP9_ENCODER_VP9_TOKENIZE_H_
12
#define VPX_VP9_ENCODER_VP9_TOKENIZE_H_
13
14
#include "vp9/common/vp9_entropy.h"
15
16
#include "vp9/encoder/vp9_block.h"
17
#include "vp9/encoder/vp9_treewriter.h"
18
19
#ifdef __cplusplus
20
extern "C" {
21
#endif
22
23
96.0M
#define EOSB_TOKEN 127  // Not signalled, encoder only
24
25
#if CONFIG_VP9_HIGHBITDEPTH
26
typedef int32_t EXTRABIT;
27
#else
28
typedef int16_t EXTRABIT;
29
#endif
30
31
typedef struct {
32
  int16_t token;
33
  EXTRABIT extra;
34
} TOKENVALUE;
35
36
typedef struct {
37
  const vpx_prob *context_tree;
38
  int16_t token;
39
  EXTRABIT extra;
40
} TOKENEXTRA;
41
42
extern const vpx_tree_index vp9_coef_tree[];
43
extern const vpx_tree_index vp9_coef_con_tree[];
44
extern const struct vp9_token vp9_coef_encodings[];
45
46
int vp9_is_skippable_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane);
47
int vp9_has_high_freq_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane);
48
49
struct VP9_COMP;
50
struct ThreadData;
51
52
void vp9_tokenize_sb(struct VP9_COMP *cpi, struct ThreadData *td,
53
                     TOKENEXTRA **t, int dry_run, int seg_skip,
54
                     BLOCK_SIZE bsize);
55
56
typedef struct {
57
  const vpx_prob *prob;
58
  int len;
59
  int base_val;
60
  const int16_t *cost;
61
} vp9_extra_bit;
62
63
// indexed by token value
64
extern const vp9_extra_bit vp9_extra_bits[ENTROPY_TOKENS];
65
#if CONFIG_VP9_HIGHBITDEPTH
66
extern const vp9_extra_bit vp9_extra_bits_high10[ENTROPY_TOKENS];
67
extern const vp9_extra_bit vp9_extra_bits_high12[ENTROPY_TOKENS];
68
#endif  // CONFIG_VP9_HIGHBITDEPTH
69
70
extern const int16_t *vp9_dct_value_cost_ptr;
71
/* TODO: The Token field should be broken out into a separate char array to
72
 *  improve cache locality, since it's needed for costing when the rest of the
73
 *  fields are not.
74
 */
75
extern const TOKENVALUE *vp9_dct_value_tokens_ptr;
76
extern const TOKENVALUE *vp9_dct_cat_lt_10_value_tokens;
77
extern const int *vp9_dct_cat_lt_10_value_cost;
78
extern const int16_t vp9_cat6_low_cost[256];
79
extern const uint16_t vp9_cat6_high_cost[64];
80
extern const uint16_t vp9_cat6_high10_high_cost[256];
81
extern const uint16_t vp9_cat6_high12_high_cost[1024];
82
83
#if CONFIG_VP9_HIGHBITDEPTH
84
434M
static INLINE const uint16_t *vp9_get_high_cost_table(int bit_depth) {
85
434M
  return bit_depth == 8 ? vp9_cat6_high_cost
86
434M
                        : (bit_depth == 10 ? vp9_cat6_high10_high_cost
87
0
                                           : vp9_cat6_high12_high_cost);
88
434M
}
Unexecuted instantiation: vp9_frame_scale.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_encoder.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_picklpf.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_quantize.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_ratectrl.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_rd.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_segmentation.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_speed_features.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_svc_layercontext.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_tokenize.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_aq_variance.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_aq_360.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_aq_cyclicrefresh.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_aq_complexity.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_alt_ref_aq.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_skin_detection.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_noise_estimate.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_ext_ratectrl.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_temporal_filter.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_tpl_model.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_mbgraph.c:vp9_get_high_cost_table
Unexecuted instantiation: temporal_filter_sse4.c:vp9_get_high_cost_table
Unexecuted instantiation: highbd_temporal_filter_sse4.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_cx_iface.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_bitstream.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_context_tree.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_encodeframe.c:vp9_get_high_cost_table
vp9_encodemb.c:vp9_get_high_cost_table
Line
Count
Source
84
23.2M
static INLINE const uint16_t *vp9_get_high_cost_table(int bit_depth) {
85
23.2M
  return bit_depth == 8 ? vp9_cat6_high_cost
86
23.2M
                        : (bit_depth == 10 ? vp9_cat6_high10_high_cost
87
0
                                           : vp9_cat6_high12_high_cost);
88
23.2M
}
Unexecuted instantiation: vp9_encodemv.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_ethread.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_firstpass.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_lookahead.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_multi_thread.c:vp9_get_high_cost_table
Unexecuted instantiation: vp9_mcomp.c:vp9_get_high_cost_table
vp9_rdopt.c:vp9_get_high_cost_table
Line
Count
Source
84
410M
static INLINE const uint16_t *vp9_get_high_cost_table(int bit_depth) {
85
410M
  return bit_depth == 8 ? vp9_cat6_high_cost
86
410M
                        : (bit_depth == 10 ? vp9_cat6_high10_high_cost
87
0
                                           : vp9_cat6_high12_high_cost);
88
410M
}
Unexecuted instantiation: vp9_pickmode.c:vp9_get_high_cost_table
89
#else
90
static INLINE const uint16_t *vp9_get_high_cost_table(int bit_depth) {
91
  (void)bit_depth;
92
  return vp9_cat6_high_cost;
93
}
94
#endif  // CONFIG_VP9_HIGHBITDEPTH
95
96
65.8M
static INLINE void vp9_get_token_extra(int v, int16_t *token, EXTRABIT *extra) {
97
65.8M
  if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) {
98
3.31M
    *token = CATEGORY6_TOKEN;
99
3.31M
    if (v >= CAT6_MIN_VAL)
100
1.63M
      *extra = 2 * v - 2 * CAT6_MIN_VAL;
101
1.67M
    else
102
1.67M
      *extra = -2 * v - 2 * CAT6_MIN_VAL + 1;
103
3.31M
    return;
104
3.31M
  }
105
62.5M
  *token = vp9_dct_cat_lt_10_value_tokens[v].token;
106
62.5M
  *extra = vp9_dct_cat_lt_10_value_tokens[v].extra;
107
62.5M
}
Unexecuted instantiation: vp9_frame_scale.c:vp9_get_token_extra
Unexecuted instantiation: vp9_encoder.c:vp9_get_token_extra
Unexecuted instantiation: vp9_picklpf.c:vp9_get_token_extra
Unexecuted instantiation: vp9_quantize.c:vp9_get_token_extra
Unexecuted instantiation: vp9_ratectrl.c:vp9_get_token_extra
Unexecuted instantiation: vp9_rd.c:vp9_get_token_extra
Unexecuted instantiation: vp9_segmentation.c:vp9_get_token_extra
Unexecuted instantiation: vp9_speed_features.c:vp9_get_token_extra
Unexecuted instantiation: vp9_svc_layercontext.c:vp9_get_token_extra
vp9_tokenize.c:vp9_get_token_extra
Line
Count
Source
96
65.8M
static INLINE void vp9_get_token_extra(int v, int16_t *token, EXTRABIT *extra) {
97
65.8M
  if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) {
98
3.31M
    *token = CATEGORY6_TOKEN;
99
3.31M
    if (v >= CAT6_MIN_VAL)
100
1.63M
      *extra = 2 * v - 2 * CAT6_MIN_VAL;
101
1.67M
    else
102
1.67M
      *extra = -2 * v - 2 * CAT6_MIN_VAL + 1;
103
3.31M
    return;
104
3.31M
  }
105
62.5M
  *token = vp9_dct_cat_lt_10_value_tokens[v].token;
106
62.5M
  *extra = vp9_dct_cat_lt_10_value_tokens[v].extra;
107
62.5M
}
Unexecuted instantiation: vp9_aq_variance.c:vp9_get_token_extra
Unexecuted instantiation: vp9_aq_360.c:vp9_get_token_extra
Unexecuted instantiation: vp9_aq_cyclicrefresh.c:vp9_get_token_extra
Unexecuted instantiation: vp9_aq_complexity.c:vp9_get_token_extra
Unexecuted instantiation: vp9_alt_ref_aq.c:vp9_get_token_extra
Unexecuted instantiation: vp9_skin_detection.c:vp9_get_token_extra
Unexecuted instantiation: vp9_noise_estimate.c:vp9_get_token_extra
Unexecuted instantiation: vp9_ext_ratectrl.c:vp9_get_token_extra
Unexecuted instantiation: vp9_temporal_filter.c:vp9_get_token_extra
Unexecuted instantiation: vp9_tpl_model.c:vp9_get_token_extra
Unexecuted instantiation: vp9_mbgraph.c:vp9_get_token_extra
Unexecuted instantiation: temporal_filter_sse4.c:vp9_get_token_extra
Unexecuted instantiation: highbd_temporal_filter_sse4.c:vp9_get_token_extra
Unexecuted instantiation: vp9_cx_iface.c:vp9_get_token_extra
Unexecuted instantiation: vp9_bitstream.c:vp9_get_token_extra
Unexecuted instantiation: vp9_context_tree.c:vp9_get_token_extra
Unexecuted instantiation: vp9_encodeframe.c:vp9_get_token_extra
Unexecuted instantiation: vp9_encodemb.c:vp9_get_token_extra
Unexecuted instantiation: vp9_encodemv.c:vp9_get_token_extra
Unexecuted instantiation: vp9_ethread.c:vp9_get_token_extra
Unexecuted instantiation: vp9_firstpass.c:vp9_get_token_extra
Unexecuted instantiation: vp9_lookahead.c:vp9_get_token_extra
Unexecuted instantiation: vp9_multi_thread.c:vp9_get_token_extra
Unexecuted instantiation: vp9_mcomp.c:vp9_get_token_extra
Unexecuted instantiation: vp9_rdopt.c:vp9_get_token_extra
Unexecuted instantiation: vp9_pickmode.c:vp9_get_token_extra
108
863M
static INLINE int16_t vp9_get_token(int v) {
109
863M
  if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) return 10;
110
850M
  return vp9_dct_cat_lt_10_value_tokens[v].token;
111
863M
}
Unexecuted instantiation: vp9_frame_scale.c:vp9_get_token
Unexecuted instantiation: vp9_encoder.c:vp9_get_token
Unexecuted instantiation: vp9_picklpf.c:vp9_get_token
Unexecuted instantiation: vp9_quantize.c:vp9_get_token
Unexecuted instantiation: vp9_ratectrl.c:vp9_get_token
Unexecuted instantiation: vp9_rd.c:vp9_get_token
Unexecuted instantiation: vp9_segmentation.c:vp9_get_token
Unexecuted instantiation: vp9_speed_features.c:vp9_get_token
Unexecuted instantiation: vp9_svc_layercontext.c:vp9_get_token
Unexecuted instantiation: vp9_tokenize.c:vp9_get_token
Unexecuted instantiation: vp9_aq_variance.c:vp9_get_token
Unexecuted instantiation: vp9_aq_360.c:vp9_get_token
Unexecuted instantiation: vp9_aq_cyclicrefresh.c:vp9_get_token
Unexecuted instantiation: vp9_aq_complexity.c:vp9_get_token
Unexecuted instantiation: vp9_alt_ref_aq.c:vp9_get_token
Unexecuted instantiation: vp9_skin_detection.c:vp9_get_token
Unexecuted instantiation: vp9_noise_estimate.c:vp9_get_token
Unexecuted instantiation: vp9_ext_ratectrl.c:vp9_get_token
Unexecuted instantiation: vp9_temporal_filter.c:vp9_get_token
Unexecuted instantiation: vp9_tpl_model.c:vp9_get_token
Unexecuted instantiation: vp9_mbgraph.c:vp9_get_token
Unexecuted instantiation: temporal_filter_sse4.c:vp9_get_token
Unexecuted instantiation: highbd_temporal_filter_sse4.c:vp9_get_token
Unexecuted instantiation: vp9_cx_iface.c:vp9_get_token
Unexecuted instantiation: vp9_bitstream.c:vp9_get_token
Unexecuted instantiation: vp9_context_tree.c:vp9_get_token
Unexecuted instantiation: vp9_encodeframe.c:vp9_get_token
vp9_encodemb.c:vp9_get_token
Line
Count
Source
108
863M
static INLINE int16_t vp9_get_token(int v) {
109
863M
  if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) return 10;
110
850M
  return vp9_dct_cat_lt_10_value_tokens[v].token;
111
863M
}
Unexecuted instantiation: vp9_encodemv.c:vp9_get_token
Unexecuted instantiation: vp9_ethread.c:vp9_get_token
Unexecuted instantiation: vp9_firstpass.c:vp9_get_token
Unexecuted instantiation: vp9_lookahead.c:vp9_get_token
Unexecuted instantiation: vp9_multi_thread.c:vp9_get_token
Unexecuted instantiation: vp9_mcomp.c:vp9_get_token
Unexecuted instantiation: vp9_rdopt.c:vp9_get_token
Unexecuted instantiation: vp9_pickmode.c:vp9_get_token
112
113
static INLINE int vp9_get_token_cost(int v, int16_t *token,
114
10.3G
                                     const uint16_t *cat6_high_table) {
115
10.3G
  if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) {
116
291M
    EXTRABIT extrabits;
117
291M
    *token = CATEGORY6_TOKEN;
118
291M
    extrabits = abs(v) - CAT6_MIN_VAL;
119
291M
    return vp9_cat6_low_cost[extrabits & 0xff] +
120
291M
           cat6_high_table[extrabits >> 8];
121
291M
  }
122
10.0G
  *token = vp9_dct_cat_lt_10_value_tokens[v].token;
123
10.0G
  return vp9_dct_cat_lt_10_value_cost[v];
124
10.3G
}
Unexecuted instantiation: vp9_frame_scale.c:vp9_get_token_cost
Unexecuted instantiation: vp9_encoder.c:vp9_get_token_cost
Unexecuted instantiation: vp9_picklpf.c:vp9_get_token_cost
Unexecuted instantiation: vp9_quantize.c:vp9_get_token_cost
Unexecuted instantiation: vp9_ratectrl.c:vp9_get_token_cost
Unexecuted instantiation: vp9_rd.c:vp9_get_token_cost
Unexecuted instantiation: vp9_segmentation.c:vp9_get_token_cost
Unexecuted instantiation: vp9_speed_features.c:vp9_get_token_cost
Unexecuted instantiation: vp9_svc_layercontext.c:vp9_get_token_cost
Unexecuted instantiation: vp9_tokenize.c:vp9_get_token_cost
Unexecuted instantiation: vp9_aq_variance.c:vp9_get_token_cost
Unexecuted instantiation: vp9_aq_360.c:vp9_get_token_cost
Unexecuted instantiation: vp9_aq_cyclicrefresh.c:vp9_get_token_cost
Unexecuted instantiation: vp9_aq_complexity.c:vp9_get_token_cost
Unexecuted instantiation: vp9_alt_ref_aq.c:vp9_get_token_cost
Unexecuted instantiation: vp9_skin_detection.c:vp9_get_token_cost
Unexecuted instantiation: vp9_noise_estimate.c:vp9_get_token_cost
Unexecuted instantiation: vp9_ext_ratectrl.c:vp9_get_token_cost
Unexecuted instantiation: vp9_temporal_filter.c:vp9_get_token_cost
Unexecuted instantiation: vp9_tpl_model.c:vp9_get_token_cost
Unexecuted instantiation: vp9_mbgraph.c:vp9_get_token_cost
Unexecuted instantiation: temporal_filter_sse4.c:vp9_get_token_cost
Unexecuted instantiation: highbd_temporal_filter_sse4.c:vp9_get_token_cost
Unexecuted instantiation: vp9_cx_iface.c:vp9_get_token_cost
Unexecuted instantiation: vp9_bitstream.c:vp9_get_token_cost
Unexecuted instantiation: vp9_context_tree.c:vp9_get_token_cost
Unexecuted instantiation: vp9_encodeframe.c:vp9_get_token_cost
vp9_encodemb.c:vp9_get_token_cost
Line
Count
Source
114
506M
                                     const uint16_t *cat6_high_table) {
115
506M
  if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) {
116
15.7M
    EXTRABIT extrabits;
117
15.7M
    *token = CATEGORY6_TOKEN;
118
15.7M
    extrabits = abs(v) - CAT6_MIN_VAL;
119
15.7M
    return vp9_cat6_low_cost[extrabits & 0xff] +
120
15.7M
           cat6_high_table[extrabits >> 8];
121
15.7M
  }
122
490M
  *token = vp9_dct_cat_lt_10_value_tokens[v].token;
123
490M
  return vp9_dct_cat_lt_10_value_cost[v];
124
506M
}
Unexecuted instantiation: vp9_encodemv.c:vp9_get_token_cost
Unexecuted instantiation: vp9_ethread.c:vp9_get_token_cost
Unexecuted instantiation: vp9_firstpass.c:vp9_get_token_cost
Unexecuted instantiation: vp9_lookahead.c:vp9_get_token_cost
Unexecuted instantiation: vp9_multi_thread.c:vp9_get_token_cost
Unexecuted instantiation: vp9_mcomp.c:vp9_get_token_cost
vp9_rdopt.c:vp9_get_token_cost
Line
Count
Source
114
9.81G
                                     const uint16_t *cat6_high_table) {
115
9.81G
  if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) {
116
275M
    EXTRABIT extrabits;
117
275M
    *token = CATEGORY6_TOKEN;
118
275M
    extrabits = abs(v) - CAT6_MIN_VAL;
119
275M
    return vp9_cat6_low_cost[extrabits & 0xff] +
120
275M
           cat6_high_table[extrabits >> 8];
121
275M
  }
122
9.53G
  *token = vp9_dct_cat_lt_10_value_tokens[v].token;
123
9.53G
  return vp9_dct_cat_lt_10_value_cost[v];
124
9.81G
}
Unexecuted instantiation: vp9_pickmode.c:vp9_get_token_cost
125
126
#ifdef __cplusplus
127
}  // extern "C"
128
#endif
129
130
#endif  // VPX_VP9_ENCODER_VP9_TOKENIZE_H_