/src/libvpx/vp9/encoder/vp9_tokenize.h
Line | Count | Source (jump to first uncovered line) |
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 | 135M | #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 | 546M | static INLINE const uint16_t *vp9_get_high_cost_table(int bit_depth) { |
85 | 546M | return bit_depth == 8 ? vp9_cat6_high_cost |
86 | 546M | : (bit_depth == 10 ? vp9_cat6_high10_high_cost |
87 | 0 | : vp9_cat6_high12_high_cost); |
88 | 546M | } Unexecuted instantiation: vp9_cx_iface.c:vp9_get_high_cost_table Unexecuted instantiation: vp9_firstpass.c:vp9_get_high_cost_table Unexecuted instantiation: vp9_mcomp.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: 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 | 15.3M | static INLINE const uint16_t *vp9_get_high_cost_table(int bit_depth) { | 85 | 15.3M | return bit_depth == 8 ? vp9_cat6_high_cost | 86 | 15.3M | : (bit_depth == 10 ? vp9_cat6_high10_high_cost | 87 | 0 | : vp9_cat6_high12_high_cost); | 88 | 15.3M | } |
Unexecuted instantiation: vp9_encodemv.c:vp9_get_high_cost_table Unexecuted instantiation: vp9_ethread.c:vp9_get_high_cost_table Unexecuted instantiation: vp9_frame_scale.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 vp9_rdopt.c:vp9_get_high_cost_table Line | Count | Source | 84 | 530M | static INLINE const uint16_t *vp9_get_high_cost_table(int bit_depth) { | 85 | 530M | return bit_depth == 8 ? vp9_cat6_high_cost | 86 | 530M | : (bit_depth == 10 ? vp9_cat6_high10_high_cost | 87 | 0 | : vp9_cat6_high12_high_cost); | 88 | 530M | } |
Unexecuted instantiation: vp9_pickmode.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 |
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 | 99.2M | static INLINE void vp9_get_token_extra(int v, int16_t *token, EXTRABIT *extra) { |
97 | 99.2M | if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) { |
98 | 7.50M | *token = CATEGORY6_TOKEN; |
99 | 7.50M | if (v >= CAT6_MIN_VAL) |
100 | 3.74M | *extra = 2 * v - 2 * CAT6_MIN_VAL; |
101 | 3.76M | else |
102 | 3.76M | *extra = -2 * v - 2 * CAT6_MIN_VAL + 1; |
103 | 7.50M | return; |
104 | 7.50M | } |
105 | 91.6M | *token = vp9_dct_cat_lt_10_value_tokens[v].token; |
106 | 91.6M | *extra = vp9_dct_cat_lt_10_value_tokens[v].extra; |
107 | 91.6M | } Unexecuted instantiation: vp9_cx_iface.c:vp9_get_token_extra Unexecuted instantiation: vp9_firstpass.c:vp9_get_token_extra Unexecuted instantiation: vp9_mcomp.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 | 99.2M | static INLINE void vp9_get_token_extra(int v, int16_t *token, EXTRABIT *extra) { | 97 | 99.2M | if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) { | 98 | 7.50M | *token = CATEGORY6_TOKEN; | 99 | 7.50M | if (v >= CAT6_MIN_VAL) | 100 | 3.74M | *extra = 2 * v - 2 * CAT6_MIN_VAL; | 101 | 3.76M | else | 102 | 3.76M | *extra = -2 * v - 2 * CAT6_MIN_VAL + 1; | 103 | 7.50M | return; | 104 | 7.50M | } | 105 | 91.6M | *token = vp9_dct_cat_lt_10_value_tokens[v].token; | 106 | 91.6M | *extra = vp9_dct_cat_lt_10_value_tokens[v].extra; | 107 | 91.6M | } |
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: 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_frame_scale.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_rdopt.c:vp9_get_token_extra Unexecuted instantiation: vp9_pickmode.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 |
108 | 585M | static INLINE int16_t vp9_get_token(int v) { |
109 | 585M | if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) return 10; |
110 | 575M | return vp9_dct_cat_lt_10_value_tokens[v].token; |
111 | 585M | } Unexecuted instantiation: vp9_cx_iface.c:vp9_get_token Unexecuted instantiation: vp9_firstpass.c:vp9_get_token Unexecuted instantiation: vp9_mcomp.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: 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 | 585M | static INLINE int16_t vp9_get_token(int v) { | 109 | 585M | if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) return 10; | 110 | 575M | return vp9_dct_cat_lt_10_value_tokens[v].token; | 111 | 585M | } |
Unexecuted instantiation: vp9_encodemv.c:vp9_get_token Unexecuted instantiation: vp9_ethread.c:vp9_get_token Unexecuted instantiation: vp9_frame_scale.c:vp9_get_token Unexecuted instantiation: vp9_lookahead.c:vp9_get_token Unexecuted instantiation: vp9_multi_thread.c:vp9_get_token Unexecuted instantiation: vp9_rdopt.c:vp9_get_token Unexecuted instantiation: vp9_pickmode.c:vp9_get_token Unexecuted instantiation: temporal_filter_sse4.c:vp9_get_token Unexecuted instantiation: highbd_temporal_filter_sse4.c:vp9_get_token |
112 | | |
113 | | static INLINE int vp9_get_token_cost(int v, int16_t *token, |
114 | 13.6G | const uint16_t *cat6_high_table) { |
115 | 13.6G | if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) { |
116 | 524M | EXTRABIT extrabits; |
117 | 524M | *token = CATEGORY6_TOKEN; |
118 | 524M | extrabits = abs(v) - CAT6_MIN_VAL; |
119 | 524M | return vp9_cat6_low_cost[extrabits & 0xff] + |
120 | 524M | cat6_high_table[extrabits >> 8]; |
121 | 524M | } |
122 | 13.0G | *token = vp9_dct_cat_lt_10_value_tokens[v].token; |
123 | 13.0G | return vp9_dct_cat_lt_10_value_cost[v]; |
124 | 13.6G | } Unexecuted instantiation: vp9_cx_iface.c:vp9_get_token_cost Unexecuted instantiation: vp9_firstpass.c:vp9_get_token_cost Unexecuted instantiation: vp9_mcomp.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: 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 | 362M | const uint16_t *cat6_high_table) { | 115 | 362M | if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) { | 116 | 11.3M | EXTRABIT extrabits; | 117 | 11.3M | *token = CATEGORY6_TOKEN; | 118 | 11.3M | extrabits = abs(v) - CAT6_MIN_VAL; | 119 | 11.3M | return vp9_cat6_low_cost[extrabits & 0xff] + | 120 | 11.3M | cat6_high_table[extrabits >> 8]; | 121 | 11.3M | } | 122 | 351M | *token = vp9_dct_cat_lt_10_value_tokens[v].token; | 123 | 351M | return vp9_dct_cat_lt_10_value_cost[v]; | 124 | 362M | } |
Unexecuted instantiation: vp9_encodemv.c:vp9_get_token_cost Unexecuted instantiation: vp9_ethread.c:vp9_get_token_cost Unexecuted instantiation: vp9_frame_scale.c:vp9_get_token_cost Unexecuted instantiation: vp9_lookahead.c:vp9_get_token_cost Unexecuted instantiation: vp9_multi_thread.c:vp9_get_token_cost vp9_rdopt.c:vp9_get_token_cost Line | Count | Source | 114 | 13.2G | const uint16_t *cat6_high_table) { | 115 | 13.2G | if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) { | 116 | 512M | EXTRABIT extrabits; | 117 | 512M | *token = CATEGORY6_TOKEN; | 118 | 512M | extrabits = abs(v) - CAT6_MIN_VAL; | 119 | 512M | return vp9_cat6_low_cost[extrabits & 0xff] + | 120 | 512M | cat6_high_table[extrabits >> 8]; | 121 | 512M | } | 122 | 12.7G | *token = vp9_dct_cat_lt_10_value_tokens[v].token; | 123 | 12.7G | return vp9_dct_cat_lt_10_value_cost[v]; | 124 | 13.2G | } |
Unexecuted instantiation: vp9_pickmode.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 |
125 | | |
126 | | #ifdef __cplusplus |
127 | | } // extern "C" |
128 | | #endif |
129 | | |
130 | | #endif // VPX_VP9_ENCODER_VP9_TOKENIZE_H_ |