/src/libavif/ext/dav1d/src/env.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright © 2018, VideoLAN and dav1d authors |
3 | | * Copyright © 2018, Two Orioles, LLC |
4 | | * All rights reserved. |
5 | | * |
6 | | * Redistribution and use in source and binary forms, with or without |
7 | | * modification, are permitted provided that the following conditions are met: |
8 | | * |
9 | | * 1. Redistributions of source code must retain the above copyright notice, this |
10 | | * list of conditions and the following disclaimer. |
11 | | * |
12 | | * 2. Redistributions in binary form must reproduce the above copyright notice, |
13 | | * this list of conditions and the following disclaimer in the documentation |
14 | | * and/or other materials provided with the distribution. |
15 | | * |
16 | | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
17 | | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
18 | | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
19 | | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR |
20 | | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
21 | | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
22 | | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
23 | | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 | | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | | */ |
27 | | |
28 | | #ifndef DAV1D_SRC_ENV_H |
29 | | #define DAV1D_SRC_ENV_H |
30 | | |
31 | | #include <stddef.h> |
32 | | #include <stdint.h> |
33 | | #include <stdlib.h> |
34 | | |
35 | | #include "src/levels.h" |
36 | | #include "src/refmvs.h" |
37 | | #include "src/tables.h" |
38 | | |
39 | | typedef struct BlockContext { |
40 | | uint8_t ALIGN(mode[32], 8); |
41 | | uint8_t ALIGN(lcoef[32], 8); |
42 | | uint8_t ALIGN(ccoef[2][32], 8); |
43 | | uint8_t ALIGN(seg_pred[32], 8); |
44 | | uint8_t ALIGN(skip[32], 8); |
45 | | uint8_t ALIGN(skip_mode[32], 8); |
46 | | uint8_t ALIGN(intra[32], 8); |
47 | | uint8_t ALIGN(comp_type[32], 8); |
48 | | int8_t ALIGN(ref[2][32], 8); // -1 means intra |
49 | | uint8_t ALIGN(filter[2][32], 8); // 3 means unset |
50 | | int8_t ALIGN(tx_intra[32], 8); |
51 | | int8_t ALIGN(tx[32], 8); |
52 | | uint8_t ALIGN(tx_lpf_y[32], 8); |
53 | | uint8_t ALIGN(tx_lpf_uv[32], 8); |
54 | | uint8_t ALIGN(partition[16], 8); |
55 | | uint8_t ALIGN(uvmode[32], 8); |
56 | | uint8_t ALIGN(pal_sz[32], 8); |
57 | | } BlockContext; |
58 | | |
59 | | static inline int get_intra_ctx(const BlockContext *const a, |
60 | | const BlockContext *const l, |
61 | | const int yb4, const int xb4, |
62 | | const int have_top, const int have_left) |
63 | 930k | { |
64 | 930k | if (have_left) { |
65 | 804k | if (have_top) { |
66 | 643k | const int ctx = l->intra[yb4] + a->intra[xb4]; |
67 | 643k | return ctx + (ctx == 2); |
68 | 643k | } else |
69 | 160k | return l->intra[yb4] * 2; |
70 | 804k | } else { |
71 | 126k | return have_top ? a->intra[xb4] * 2 : 0; |
72 | 126k | } |
73 | 930k | } Unexecuted instantiation: lib.c:get_intra_ctx Unexecuted instantiation: log.c:get_intra_ctx Unexecuted instantiation: mem.c:get_intra_ctx Unexecuted instantiation: obu.c:get_intra_ctx Unexecuted instantiation: picture.c:get_intra_ctx Unexecuted instantiation: refmvs.c:get_intra_ctx Unexecuted instantiation: thread_task.c:get_intra_ctx Unexecuted instantiation: cdf.c:get_intra_ctx Line | Count | Source | 63 | 930k | { | 64 | 930k | if (have_left) { | 65 | 804k | if (have_top) { | 66 | 643k | const int ctx = l->intra[yb4] + a->intra[xb4]; | 67 | 643k | return ctx + (ctx == 2); | 68 | 643k | } else | 69 | 160k | return l->intra[yb4] * 2; | 70 | 804k | } else { | 71 | 126k | return have_top ? a->intra[xb4] * 2 : 0; | 72 | 126k | } | 73 | 930k | } |
Unexecuted instantiation: recon_tmpl.c:get_intra_ctx Unexecuted instantiation: cdef_apply_tmpl.c:get_intra_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:get_intra_ctx Unexecuted instantiation: lf_apply_tmpl.c:get_intra_ctx Unexecuted instantiation: lr_apply_tmpl.c:get_intra_ctx |
74 | | |
75 | | static inline int get_tx_ctx(const BlockContext *const a, |
76 | | const BlockContext *const l, |
77 | | const TxfmInfo *const max_tx, |
78 | | const int yb4, const int xb4) |
79 | 4.14M | { |
80 | 4.14M | return (l->tx_intra[yb4] >= max_tx->lh) + (a->tx_intra[xb4] >= max_tx->lw); |
81 | 4.14M | } Unexecuted instantiation: lib.c:get_tx_ctx Unexecuted instantiation: log.c:get_tx_ctx Unexecuted instantiation: mem.c:get_tx_ctx Unexecuted instantiation: obu.c:get_tx_ctx Unexecuted instantiation: picture.c:get_tx_ctx Unexecuted instantiation: refmvs.c:get_tx_ctx Unexecuted instantiation: thread_task.c:get_tx_ctx Unexecuted instantiation: cdf.c:get_tx_ctx Line | Count | Source | 79 | 4.14M | { | 80 | 4.14M | return (l->tx_intra[yb4] >= max_tx->lh) + (a->tx_intra[xb4] >= max_tx->lw); | 81 | 4.14M | } |
Unexecuted instantiation: recon_tmpl.c:get_tx_ctx Unexecuted instantiation: cdef_apply_tmpl.c:get_tx_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:get_tx_ctx Unexecuted instantiation: lf_apply_tmpl.c:get_tx_ctx Unexecuted instantiation: lr_apply_tmpl.c:get_tx_ctx |
82 | | |
83 | | static inline int get_partition_ctx(const BlockContext *const a, |
84 | | const BlockContext *const l, |
85 | | const enum BlockLevel bl, |
86 | | const int yb8, const int xb8) |
87 | 12.3M | { |
88 | 12.3M | return ((a->partition[xb8] >> (4 - bl)) & 1) + |
89 | 12.3M | (((l->partition[yb8] >> (4 - bl)) & 1) << 1); |
90 | 12.3M | } Unexecuted instantiation: lib.c:get_partition_ctx Unexecuted instantiation: log.c:get_partition_ctx Unexecuted instantiation: mem.c:get_partition_ctx Unexecuted instantiation: obu.c:get_partition_ctx Unexecuted instantiation: picture.c:get_partition_ctx Unexecuted instantiation: refmvs.c:get_partition_ctx Unexecuted instantiation: thread_task.c:get_partition_ctx Unexecuted instantiation: cdf.c:get_partition_ctx decode.c:get_partition_ctx Line | Count | Source | 87 | 12.3M | { | 88 | 12.3M | return ((a->partition[xb8] >> (4 - bl)) & 1) + | 89 | 12.3M | (((l->partition[yb8] >> (4 - bl)) & 1) << 1); | 90 | 12.3M | } |
Unexecuted instantiation: recon_tmpl.c:get_partition_ctx Unexecuted instantiation: cdef_apply_tmpl.c:get_partition_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:get_partition_ctx Unexecuted instantiation: lf_apply_tmpl.c:get_partition_ctx Unexecuted instantiation: lr_apply_tmpl.c:get_partition_ctx |
91 | | |
92 | | static inline unsigned gather_left_partition_prob(const uint16_t *const in, |
93 | | const enum BlockLevel bl) |
94 | 686k | { |
95 | 686k | unsigned out = in[PARTITION_H - 1] - in[PARTITION_H]; |
96 | | // Exploit the fact that cdfs for PARTITION_SPLIT, PARTITION_T_TOP_SPLIT, |
97 | | // PARTITION_T_BOTTOM_SPLIT and PARTITION_T_LEFT_SPLIT are neighbors. |
98 | 686k | out += in[PARTITION_SPLIT - 1] - in[PARTITION_T_LEFT_SPLIT]; |
99 | 686k | if (bl != BL_128X128) |
100 | 668k | out += in[PARTITION_H4 - 1] - in[PARTITION_H4]; |
101 | 686k | return out; |
102 | 686k | } Unexecuted instantiation: lib.c:gather_left_partition_prob Unexecuted instantiation: log.c:gather_left_partition_prob Unexecuted instantiation: mem.c:gather_left_partition_prob Unexecuted instantiation: obu.c:gather_left_partition_prob Unexecuted instantiation: picture.c:gather_left_partition_prob Unexecuted instantiation: refmvs.c:gather_left_partition_prob Unexecuted instantiation: thread_task.c:gather_left_partition_prob Unexecuted instantiation: cdf.c:gather_left_partition_prob decode.c:gather_left_partition_prob Line | Count | Source | 94 | 686k | { | 95 | 686k | unsigned out = in[PARTITION_H - 1] - in[PARTITION_H]; | 96 | | // Exploit the fact that cdfs for PARTITION_SPLIT, PARTITION_T_TOP_SPLIT, | 97 | | // PARTITION_T_BOTTOM_SPLIT and PARTITION_T_LEFT_SPLIT are neighbors. | 98 | 686k | out += in[PARTITION_SPLIT - 1] - in[PARTITION_T_LEFT_SPLIT]; | 99 | 686k | if (bl != BL_128X128) | 100 | 668k | out += in[PARTITION_H4 - 1] - in[PARTITION_H4]; | 101 | 686k | return out; | 102 | 686k | } |
Unexecuted instantiation: recon_tmpl.c:gather_left_partition_prob Unexecuted instantiation: cdef_apply_tmpl.c:gather_left_partition_prob Unexecuted instantiation: ipred_prepare_tmpl.c:gather_left_partition_prob Unexecuted instantiation: lf_apply_tmpl.c:gather_left_partition_prob Unexecuted instantiation: lr_apply_tmpl.c:gather_left_partition_prob |
103 | | |
104 | | static inline unsigned gather_top_partition_prob(const uint16_t *const in, |
105 | | const enum BlockLevel bl) |
106 | 1.78M | { |
107 | | // Exploit the fact that cdfs for PARTITION_V, PARTITION_SPLIT and |
108 | | // PARTITION_T_TOP_SPLIT are neighbors. |
109 | 1.78M | unsigned out = in[PARTITION_V - 1] - in[PARTITION_T_TOP_SPLIT]; |
110 | | // Exploit the facts that cdfs for PARTITION_T_LEFT_SPLIT and |
111 | | // PARTITION_T_RIGHT_SPLIT are neighbors, the probability for |
112 | | // PARTITION_V4 is always zero, and the probability for |
113 | | // PARTITION_T_RIGHT_SPLIT is zero in 128x128 blocks. |
114 | 1.78M | out += in[PARTITION_T_LEFT_SPLIT - 1]; |
115 | 1.78M | if (bl != BL_128X128) |
116 | 1.70M | out += in[PARTITION_V4 - 1] - in[PARTITION_T_RIGHT_SPLIT]; |
117 | 1.78M | return out; |
118 | 1.78M | } Unexecuted instantiation: lib.c:gather_top_partition_prob Unexecuted instantiation: log.c:gather_top_partition_prob Unexecuted instantiation: mem.c:gather_top_partition_prob Unexecuted instantiation: obu.c:gather_top_partition_prob Unexecuted instantiation: picture.c:gather_top_partition_prob Unexecuted instantiation: refmvs.c:gather_top_partition_prob Unexecuted instantiation: thread_task.c:gather_top_partition_prob Unexecuted instantiation: cdf.c:gather_top_partition_prob decode.c:gather_top_partition_prob Line | Count | Source | 106 | 1.78M | { | 107 | | // Exploit the fact that cdfs for PARTITION_V, PARTITION_SPLIT and | 108 | | // PARTITION_T_TOP_SPLIT are neighbors. | 109 | 1.78M | unsigned out = in[PARTITION_V - 1] - in[PARTITION_T_TOP_SPLIT]; | 110 | | // Exploit the facts that cdfs for PARTITION_T_LEFT_SPLIT and | 111 | | // PARTITION_T_RIGHT_SPLIT are neighbors, the probability for | 112 | | // PARTITION_V4 is always zero, and the probability for | 113 | | // PARTITION_T_RIGHT_SPLIT is zero in 128x128 blocks. | 114 | 1.78M | out += in[PARTITION_T_LEFT_SPLIT - 1]; | 115 | 1.78M | if (bl != BL_128X128) | 116 | 1.70M | out += in[PARTITION_V4 - 1] - in[PARTITION_T_RIGHT_SPLIT]; | 117 | 1.78M | return out; | 118 | 1.78M | } |
Unexecuted instantiation: recon_tmpl.c:gather_top_partition_prob Unexecuted instantiation: cdef_apply_tmpl.c:gather_top_partition_prob Unexecuted instantiation: ipred_prepare_tmpl.c:gather_top_partition_prob Unexecuted instantiation: lf_apply_tmpl.c:gather_top_partition_prob Unexecuted instantiation: lr_apply_tmpl.c:gather_top_partition_prob |
119 | | |
120 | | static inline enum TxfmType get_uv_inter_txtp(const TxfmInfo *const uvt_dim, |
121 | | const enum TxfmType ytxtp) |
122 | 238k | { |
123 | 238k | if (uvt_dim->max == TX_32X32) |
124 | 35.6k | return ytxtp == IDTX ? IDTX : DCT_DCT; |
125 | 202k | if (uvt_dim->min == TX_16X16 && |
126 | 10.2k | ((1 << ytxtp) & ((1 << H_FLIPADST) | (1 << V_FLIPADST) | |
127 | 10.2k | (1 << H_ADST) | (1 << V_ADST)))) |
128 | 324 | { |
129 | 324 | return DCT_DCT; |
130 | 324 | } |
131 | | |
132 | 202k | return ytxtp; |
133 | 202k | } Unexecuted instantiation: lib.c:get_uv_inter_txtp Unexecuted instantiation: log.c:get_uv_inter_txtp Unexecuted instantiation: mem.c:get_uv_inter_txtp Unexecuted instantiation: obu.c:get_uv_inter_txtp Unexecuted instantiation: picture.c:get_uv_inter_txtp Unexecuted instantiation: refmvs.c:get_uv_inter_txtp Unexecuted instantiation: thread_task.c:get_uv_inter_txtp Unexecuted instantiation: cdf.c:get_uv_inter_txtp Unexecuted instantiation: decode.c:get_uv_inter_txtp recon_tmpl.c:get_uv_inter_txtp Line | Count | Source | 122 | 238k | { | 123 | 238k | if (uvt_dim->max == TX_32X32) | 124 | 35.6k | return ytxtp == IDTX ? IDTX : DCT_DCT; | 125 | 202k | if (uvt_dim->min == TX_16X16 && | 126 | 10.2k | ((1 << ytxtp) & ((1 << H_FLIPADST) | (1 << V_FLIPADST) | | 127 | 10.2k | (1 << H_ADST) | (1 << V_ADST)))) | 128 | 324 | { | 129 | 324 | return DCT_DCT; | 130 | 324 | } | 131 | | | 132 | 202k | return ytxtp; | 133 | 202k | } |
Unexecuted instantiation: cdef_apply_tmpl.c:get_uv_inter_txtp Unexecuted instantiation: ipred_prepare_tmpl.c:get_uv_inter_txtp Unexecuted instantiation: lf_apply_tmpl.c:get_uv_inter_txtp Unexecuted instantiation: lr_apply_tmpl.c:get_uv_inter_txtp |
134 | | |
135 | | static inline int get_filter_ctx(const BlockContext *const a, |
136 | | const BlockContext *const l, |
137 | | const int comp, const int dir, const int ref, |
138 | | const int yb4, const int xb4) |
139 | 357k | { |
140 | 357k | const int a_filter = (a->ref[0][xb4] == ref || a->ref[1][xb4] == ref) ? |
141 | 196k | a->filter[dir][xb4] : DAV1D_N_SWITCHABLE_FILTERS; |
142 | 357k | const int l_filter = (l->ref[0][yb4] == ref || l->ref[1][yb4] == ref) ? |
143 | 235k | l->filter[dir][yb4] : DAV1D_N_SWITCHABLE_FILTERS; |
144 | | |
145 | 357k | if (a_filter == l_filter) { |
146 | 189k | return comp * 4 + a_filter; |
147 | 189k | } else if (a_filter == DAV1D_N_SWITCHABLE_FILTERS) { |
148 | 96.0k | return comp * 4 + l_filter; |
149 | 96.0k | } else if (l_filter == DAV1D_N_SWITCHABLE_FILTERS) { |
150 | 57.9k | return comp * 4 + a_filter; |
151 | 57.9k | } else { |
152 | 13.7k | return comp * 4 + DAV1D_N_SWITCHABLE_FILTERS; |
153 | 13.7k | } |
154 | 357k | } Unexecuted instantiation: lib.c:get_filter_ctx Unexecuted instantiation: log.c:get_filter_ctx Unexecuted instantiation: mem.c:get_filter_ctx Unexecuted instantiation: obu.c:get_filter_ctx Unexecuted instantiation: picture.c:get_filter_ctx Unexecuted instantiation: refmvs.c:get_filter_ctx Unexecuted instantiation: thread_task.c:get_filter_ctx Unexecuted instantiation: cdf.c:get_filter_ctx Line | Count | Source | 139 | 357k | { | 140 | 357k | const int a_filter = (a->ref[0][xb4] == ref || a->ref[1][xb4] == ref) ? | 141 | 196k | a->filter[dir][xb4] : DAV1D_N_SWITCHABLE_FILTERS; | 142 | 357k | const int l_filter = (l->ref[0][yb4] == ref || l->ref[1][yb4] == ref) ? | 143 | 235k | l->filter[dir][yb4] : DAV1D_N_SWITCHABLE_FILTERS; | 144 | | | 145 | 357k | if (a_filter == l_filter) { | 146 | 189k | return comp * 4 + a_filter; | 147 | 189k | } else if (a_filter == DAV1D_N_SWITCHABLE_FILTERS) { | 148 | 96.0k | return comp * 4 + l_filter; | 149 | 96.0k | } else if (l_filter == DAV1D_N_SWITCHABLE_FILTERS) { | 150 | 57.9k | return comp * 4 + a_filter; | 151 | 57.9k | } else { | 152 | 13.7k | return comp * 4 + DAV1D_N_SWITCHABLE_FILTERS; | 153 | 13.7k | } | 154 | 357k | } |
Unexecuted instantiation: recon_tmpl.c:get_filter_ctx Unexecuted instantiation: cdef_apply_tmpl.c:get_filter_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:get_filter_ctx Unexecuted instantiation: lf_apply_tmpl.c:get_filter_ctx Unexecuted instantiation: lr_apply_tmpl.c:get_filter_ctx |
155 | | |
156 | | static inline int get_comp_ctx(const BlockContext *const a, |
157 | | const BlockContext *const l, |
158 | | const int yb4, const int xb4, |
159 | | const int have_top, const int have_left) |
160 | 136k | { |
161 | 136k | if (have_top) { |
162 | 103k | if (have_left) { |
163 | 99.1k | if (a->comp_type[xb4]) { |
164 | 52.5k | if (l->comp_type[yb4]) { |
165 | 37.0k | return 4; |
166 | 37.0k | } else { |
167 | | // 4U means intra (-1) or bwd (>= 4) |
168 | 15.5k | return 2 + ((unsigned)l->ref[0][yb4] >= 4U); |
169 | 15.5k | } |
170 | 52.5k | } else if (l->comp_type[yb4]) { |
171 | | // 4U means intra (-1) or bwd (>= 4) |
172 | 17.6k | return 2 + ((unsigned)a->ref[0][xb4] >= 4U); |
173 | 28.9k | } else { |
174 | 28.9k | return (l->ref[0][yb4] >= 4) ^ (a->ref[0][xb4] >= 4); |
175 | 28.9k | } |
176 | 99.1k | } else { |
177 | 4.59k | return a->comp_type[xb4] ? 3 : a->ref[0][xb4] >= 4; |
178 | 4.59k | } |
179 | 103k | } else if (have_left) { |
180 | 28.6k | return l->comp_type[yb4] ? 3 : l->ref[0][yb4] >= 4; |
181 | 28.6k | } else { |
182 | 4.13k | return 1; |
183 | 4.13k | } |
184 | 136k | } Unexecuted instantiation: lib.c:get_comp_ctx Unexecuted instantiation: log.c:get_comp_ctx Unexecuted instantiation: mem.c:get_comp_ctx Unexecuted instantiation: obu.c:get_comp_ctx Unexecuted instantiation: picture.c:get_comp_ctx Unexecuted instantiation: refmvs.c:get_comp_ctx Unexecuted instantiation: thread_task.c:get_comp_ctx Unexecuted instantiation: cdf.c:get_comp_ctx Line | Count | Source | 160 | 136k | { | 161 | 136k | if (have_top) { | 162 | 103k | if (have_left) { | 163 | 99.1k | if (a->comp_type[xb4]) { | 164 | 52.5k | if (l->comp_type[yb4]) { | 165 | 37.0k | return 4; | 166 | 37.0k | } else { | 167 | | // 4U means intra (-1) or bwd (>= 4) | 168 | 15.5k | return 2 + ((unsigned)l->ref[0][yb4] >= 4U); | 169 | 15.5k | } | 170 | 52.5k | } else if (l->comp_type[yb4]) { | 171 | | // 4U means intra (-1) or bwd (>= 4) | 172 | 17.6k | return 2 + ((unsigned)a->ref[0][xb4] >= 4U); | 173 | 28.9k | } else { | 174 | 28.9k | return (l->ref[0][yb4] >= 4) ^ (a->ref[0][xb4] >= 4); | 175 | 28.9k | } | 176 | 99.1k | } else { | 177 | 4.59k | return a->comp_type[xb4] ? 3 : a->ref[0][xb4] >= 4; | 178 | 4.59k | } | 179 | 103k | } else if (have_left) { | 180 | 28.6k | return l->comp_type[yb4] ? 3 : l->ref[0][yb4] >= 4; | 181 | 28.6k | } else { | 182 | 4.13k | return 1; | 183 | 4.13k | } | 184 | 136k | } |
Unexecuted instantiation: recon_tmpl.c:get_comp_ctx Unexecuted instantiation: cdef_apply_tmpl.c:get_comp_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:get_comp_ctx Unexecuted instantiation: lf_apply_tmpl.c:get_comp_ctx Unexecuted instantiation: lr_apply_tmpl.c:get_comp_ctx |
185 | | |
186 | | static inline int get_comp_dir_ctx(const BlockContext *const a, |
187 | | const BlockContext *const l, |
188 | | const int yb4, const int xb4, |
189 | | const int have_top, const int have_left) |
190 | 83.1k | { |
191 | 83.1k | #define has_uni_comp(edge, off) \ |
192 | 105k | ((edge->ref[0][off] < 4) == (edge->ref[1][off] < 4)) |
193 | | |
194 | 83.1k | if (have_top && have_left) { |
195 | 64.4k | const int a_intra = a->intra[xb4], l_intra = l->intra[yb4]; |
196 | | |
197 | 64.4k | if (a_intra && l_intra) return 2; |
198 | 64.1k | if (a_intra || l_intra) { |
199 | 2.77k | const BlockContext *const edge = a_intra ? l : a; |
200 | 2.77k | const int off = a_intra ? yb4 : xb4; |
201 | | |
202 | 2.77k | if (edge->comp_type[off] == COMP_INTER_NONE) return 2; |
203 | 2.04k | return 1 + 2 * has_uni_comp(edge, off); |
204 | 2.77k | } |
205 | | |
206 | 61.3k | const int a_comp = a->comp_type[xb4] != COMP_INTER_NONE; |
207 | 61.3k | const int l_comp = l->comp_type[yb4] != COMP_INTER_NONE; |
208 | 61.3k | const int a_ref0 = a->ref[0][xb4], l_ref0 = l->ref[0][yb4]; |
209 | | |
210 | 61.3k | if (!a_comp && !l_comp) { |
211 | 5.16k | return 1 + 2 * ((a_ref0 >= 4) == (l_ref0 >= 4)); |
212 | 56.2k | } else if (!a_comp || !l_comp) { |
213 | 21.4k | const BlockContext *const edge = a_comp ? a : l; |
214 | 21.4k | const int off = a_comp ? xb4 : yb4; |
215 | | |
216 | 21.4k | if (!has_uni_comp(edge, off)) return 1; |
217 | 4.02k | return 3 + ((a_ref0 >= 4) == (l_ref0 >= 4)); |
218 | 34.7k | } else { |
219 | 34.7k | const int a_uni = has_uni_comp(a, xb4), l_uni = has_uni_comp(l, yb4); |
220 | | |
221 | 34.7k | if (!a_uni && !l_uni) return 0; |
222 | 8.92k | if (!a_uni || !l_uni) return 2; |
223 | 2.86k | return 3 + ((a_ref0 == 4) == (l_ref0 == 4)); |
224 | 8.92k | } |
225 | 61.3k | } else if (have_top || have_left) { |
226 | 17.1k | const BlockContext *const edge = have_left ? l : a; |
227 | 17.1k | const int off = have_left ? yb4 : xb4; |
228 | | |
229 | 17.1k | if (edge->intra[off]) return 2; |
230 | 16.5k | if (edge->comp_type[off] == COMP_INTER_NONE) return 2; |
231 | 12.1k | return 4 * has_uni_comp(edge, off); |
232 | 16.5k | } else { |
233 | 1.47k | return 2; |
234 | 1.47k | } |
235 | 83.1k | } Unexecuted instantiation: lib.c:get_comp_dir_ctx Unexecuted instantiation: log.c:get_comp_dir_ctx Unexecuted instantiation: mem.c:get_comp_dir_ctx Unexecuted instantiation: obu.c:get_comp_dir_ctx Unexecuted instantiation: picture.c:get_comp_dir_ctx Unexecuted instantiation: refmvs.c:get_comp_dir_ctx Unexecuted instantiation: thread_task.c:get_comp_dir_ctx Unexecuted instantiation: cdf.c:get_comp_dir_ctx decode.c:get_comp_dir_ctx Line | Count | Source | 190 | 83.1k | { | 191 | 83.1k | #define has_uni_comp(edge, off) \ | 192 | 83.1k | ((edge->ref[0][off] < 4) == (edge->ref[1][off] < 4)) | 193 | | | 194 | 83.1k | if (have_top && have_left) { | 195 | 64.4k | const int a_intra = a->intra[xb4], l_intra = l->intra[yb4]; | 196 | | | 197 | 64.4k | if (a_intra && l_intra) return 2; | 198 | 64.1k | if (a_intra || l_intra) { | 199 | 2.77k | const BlockContext *const edge = a_intra ? l : a; | 200 | 2.77k | const int off = a_intra ? yb4 : xb4; | 201 | | | 202 | 2.77k | if (edge->comp_type[off] == COMP_INTER_NONE) return 2; | 203 | 2.04k | return 1 + 2 * has_uni_comp(edge, off); | 204 | 2.77k | } | 205 | | | 206 | 61.3k | const int a_comp = a->comp_type[xb4] != COMP_INTER_NONE; | 207 | 61.3k | const int l_comp = l->comp_type[yb4] != COMP_INTER_NONE; | 208 | 61.3k | const int a_ref0 = a->ref[0][xb4], l_ref0 = l->ref[0][yb4]; | 209 | | | 210 | 61.3k | if (!a_comp && !l_comp) { | 211 | 5.16k | return 1 + 2 * ((a_ref0 >= 4) == (l_ref0 >= 4)); | 212 | 56.2k | } else if (!a_comp || !l_comp) { | 213 | 21.4k | const BlockContext *const edge = a_comp ? a : l; | 214 | 21.4k | const int off = a_comp ? xb4 : yb4; | 215 | | | 216 | 21.4k | if (!has_uni_comp(edge, off)) return 1; | 217 | 4.02k | return 3 + ((a_ref0 >= 4) == (l_ref0 >= 4)); | 218 | 34.7k | } else { | 219 | 34.7k | const int a_uni = has_uni_comp(a, xb4), l_uni = has_uni_comp(l, yb4); | 220 | | | 221 | 34.7k | if (!a_uni && !l_uni) return 0; | 222 | 8.92k | if (!a_uni || !l_uni) return 2; | 223 | 2.86k | return 3 + ((a_ref0 == 4) == (l_ref0 == 4)); | 224 | 8.92k | } | 225 | 61.3k | } else if (have_top || have_left) { | 226 | 17.1k | const BlockContext *const edge = have_left ? l : a; | 227 | 17.1k | const int off = have_left ? yb4 : xb4; | 228 | | | 229 | 17.1k | if (edge->intra[off]) return 2; | 230 | 16.5k | if (edge->comp_type[off] == COMP_INTER_NONE) return 2; | 231 | 12.1k | return 4 * has_uni_comp(edge, off); | 232 | 16.5k | } else { | 233 | 1.47k | return 2; | 234 | 1.47k | } | 235 | 83.1k | } |
Unexecuted instantiation: recon_tmpl.c:get_comp_dir_ctx Unexecuted instantiation: cdef_apply_tmpl.c:get_comp_dir_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:get_comp_dir_ctx Unexecuted instantiation: lf_apply_tmpl.c:get_comp_dir_ctx Unexecuted instantiation: lr_apply_tmpl.c:get_comp_dir_ctx |
236 | | |
237 | | static inline int get_poc_diff(const int order_hint_n_bits, |
238 | | const int poc0, const int poc1) |
239 | 782k | { |
240 | 782k | if (!order_hint_n_bits) return 0; |
241 | 624k | const int mask = 1 << (order_hint_n_bits - 1); |
242 | 624k | const int diff = poc0 - poc1; |
243 | 624k | return (diff & (mask - 1)) - (diff & mask); |
244 | 782k | } Unexecuted instantiation: lib.c:get_poc_diff Unexecuted instantiation: log.c:get_poc_diff Unexecuted instantiation: mem.c:get_poc_diff Line | Count | Source | 239 | 91.9k | { | 240 | 91.9k | if (!order_hint_n_bits) return 0; | 241 | 91.9k | const int mask = 1 << (order_hint_n_bits - 1); | 242 | 91.9k | const int diff = poc0 - poc1; | 243 | 91.9k | return (diff & (mask - 1)) - (diff & mask); | 244 | 91.9k | } |
Unexecuted instantiation: picture.c:get_poc_diff Line | Count | Source | 239 | 431k | { | 240 | 431k | if (!order_hint_n_bits) return 0; | 241 | 319k | const int mask = 1 << (order_hint_n_bits - 1); | 242 | 319k | const int diff = poc0 - poc1; | 243 | 319k | return (diff & (mask - 1)) - (diff & mask); | 244 | 431k | } |
Unexecuted instantiation: thread_task.c:get_poc_diff Unexecuted instantiation: cdf.c:get_poc_diff Line | Count | Source | 239 | 259k | { | 240 | 259k | if (!order_hint_n_bits) return 0; | 241 | 213k | const int mask = 1 << (order_hint_n_bits - 1); | 242 | 213k | const int diff = poc0 - poc1; | 243 | 213k | return (diff & (mask - 1)) - (diff & mask); | 244 | 259k | } |
Unexecuted instantiation: recon_tmpl.c:get_poc_diff Unexecuted instantiation: cdef_apply_tmpl.c:get_poc_diff Unexecuted instantiation: ipred_prepare_tmpl.c:get_poc_diff Unexecuted instantiation: lf_apply_tmpl.c:get_poc_diff Unexecuted instantiation: lr_apply_tmpl.c:get_poc_diff |
245 | | |
246 | | static inline int get_jnt_comp_ctx(const int order_hint_n_bits, const int poc, |
247 | | const int ref0poc, const int ref1poc, |
248 | | const BlockContext *const a, |
249 | | const BlockContext *const l, |
250 | | const int yb4, const int xb4) |
251 | 16.9k | { |
252 | 16.9k | const int d0 = abs(get_poc_diff(order_hint_n_bits, ref0poc, poc)); |
253 | 16.9k | const int d1 = abs(get_poc_diff(order_hint_n_bits, poc, ref1poc)); |
254 | 16.9k | const int offset = d0 == d1; |
255 | 16.9k | const int a_ctx = a->comp_type[xb4] >= COMP_INTER_AVG || |
256 | 10.0k | a->ref[0][xb4] == 6; |
257 | 16.9k | const int l_ctx = l->comp_type[yb4] >= COMP_INTER_AVG || |
258 | 8.35k | l->ref[0][yb4] == 6; |
259 | | |
260 | 16.9k | return 3 * offset + a_ctx + l_ctx; |
261 | 16.9k | } Unexecuted instantiation: lib.c:get_jnt_comp_ctx Unexecuted instantiation: log.c:get_jnt_comp_ctx Unexecuted instantiation: mem.c:get_jnt_comp_ctx Unexecuted instantiation: obu.c:get_jnt_comp_ctx Unexecuted instantiation: picture.c:get_jnt_comp_ctx Unexecuted instantiation: refmvs.c:get_jnt_comp_ctx Unexecuted instantiation: thread_task.c:get_jnt_comp_ctx Unexecuted instantiation: cdf.c:get_jnt_comp_ctx decode.c:get_jnt_comp_ctx Line | Count | Source | 251 | 16.9k | { | 252 | 16.9k | const int d0 = abs(get_poc_diff(order_hint_n_bits, ref0poc, poc)); | 253 | 16.9k | const int d1 = abs(get_poc_diff(order_hint_n_bits, poc, ref1poc)); | 254 | 16.9k | const int offset = d0 == d1; | 255 | 16.9k | const int a_ctx = a->comp_type[xb4] >= COMP_INTER_AVG || | 256 | 10.0k | a->ref[0][xb4] == 6; | 257 | 16.9k | const int l_ctx = l->comp_type[yb4] >= COMP_INTER_AVG || | 258 | 8.35k | l->ref[0][yb4] == 6; | 259 | | | 260 | 16.9k | return 3 * offset + a_ctx + l_ctx; | 261 | 16.9k | } |
Unexecuted instantiation: recon_tmpl.c:get_jnt_comp_ctx Unexecuted instantiation: cdef_apply_tmpl.c:get_jnt_comp_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:get_jnt_comp_ctx Unexecuted instantiation: lf_apply_tmpl.c:get_jnt_comp_ctx Unexecuted instantiation: lr_apply_tmpl.c:get_jnt_comp_ctx |
262 | | |
263 | | static inline int get_mask_comp_ctx(const BlockContext *const a, |
264 | | const BlockContext *const l, |
265 | | const int yb4, const int xb4) |
266 | 51.7k | { |
267 | 51.7k | const int a_ctx = a->comp_type[xb4] >= COMP_INTER_SEG ? 1 : |
268 | 51.7k | a->ref[0][xb4] == 6 ? 3 : 0; |
269 | 51.7k | const int l_ctx = l->comp_type[yb4] >= COMP_INTER_SEG ? 1 : |
270 | 51.7k | l->ref[0][yb4] == 6 ? 3 : 0; |
271 | | |
272 | 51.7k | return imin(a_ctx + l_ctx, 5); |
273 | 51.7k | } Unexecuted instantiation: lib.c:get_mask_comp_ctx Unexecuted instantiation: log.c:get_mask_comp_ctx Unexecuted instantiation: mem.c:get_mask_comp_ctx Unexecuted instantiation: obu.c:get_mask_comp_ctx Unexecuted instantiation: picture.c:get_mask_comp_ctx Unexecuted instantiation: refmvs.c:get_mask_comp_ctx Unexecuted instantiation: thread_task.c:get_mask_comp_ctx Unexecuted instantiation: cdf.c:get_mask_comp_ctx decode.c:get_mask_comp_ctx Line | Count | Source | 266 | 51.7k | { | 267 | 51.7k | const int a_ctx = a->comp_type[xb4] >= COMP_INTER_SEG ? 1 : | 268 | 51.7k | a->ref[0][xb4] == 6 ? 3 : 0; | 269 | 51.7k | const int l_ctx = l->comp_type[yb4] >= COMP_INTER_SEG ? 1 : | 270 | 51.7k | l->ref[0][yb4] == 6 ? 3 : 0; | 271 | | | 272 | 51.7k | return imin(a_ctx + l_ctx, 5); | 273 | 51.7k | } |
Unexecuted instantiation: recon_tmpl.c:get_mask_comp_ctx Unexecuted instantiation: cdef_apply_tmpl.c:get_mask_comp_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:get_mask_comp_ctx Unexecuted instantiation: lf_apply_tmpl.c:get_mask_comp_ctx Unexecuted instantiation: lr_apply_tmpl.c:get_mask_comp_ctx |
274 | | |
275 | 144k | #define av1_get_ref_2_ctx av1_get_bwd_ref_ctx |
276 | 329k | #define av1_get_ref_3_ctx av1_get_fwd_ref_ctx |
277 | 277k | #define av1_get_ref_4_ctx av1_get_fwd_ref_1_ctx |
278 | 51.7k | #define av1_get_ref_5_ctx av1_get_fwd_ref_2_ctx |
279 | 37.6k | #define av1_get_ref_6_ctx av1_get_bwd_ref_1_ctx |
280 | 14.1k | #define av1_get_uni_p_ctx av1_get_ref_ctx |
281 | 6.26k | #define av1_get_uni_p2_ctx av1_get_fwd_ref_2_ctx |
282 | | |
283 | | static inline int av1_get_ref_ctx(const BlockContext *const a, |
284 | | const BlockContext *const l, |
285 | | const int yb4, const int xb4, |
286 | | int have_top, int have_left) |
287 | 491k | { |
288 | 491k | int cnt[2] = { 0 }; |
289 | | |
290 | 491k | if (have_top && !a->intra[xb4]) { |
291 | 309k | cnt[a->ref[0][xb4] >= 4]++; |
292 | 309k | if (a->comp_type[xb4]) cnt[a->ref[1][xb4] >= 4]++; |
293 | 309k | } |
294 | | |
295 | 491k | if (have_left && !l->intra[yb4]) { |
296 | 357k | cnt[l->ref[0][yb4] >= 4]++; |
297 | 357k | if (l->comp_type[yb4]) cnt[l->ref[1][yb4] >= 4]++; |
298 | 357k | } |
299 | | |
300 | 491k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; |
301 | 491k | } Unexecuted instantiation: lib.c:av1_get_ref_ctx Unexecuted instantiation: log.c:av1_get_ref_ctx Unexecuted instantiation: mem.c:av1_get_ref_ctx Unexecuted instantiation: obu.c:av1_get_ref_ctx Unexecuted instantiation: picture.c:av1_get_ref_ctx Unexecuted instantiation: refmvs.c:av1_get_ref_ctx Unexecuted instantiation: thread_task.c:av1_get_ref_ctx Unexecuted instantiation: cdf.c:av1_get_ref_ctx Line | Count | Source | 287 | 491k | { | 288 | 491k | int cnt[2] = { 0 }; | 289 | | | 290 | 491k | if (have_top && !a->intra[xb4]) { | 291 | 309k | cnt[a->ref[0][xb4] >= 4]++; | 292 | 309k | if (a->comp_type[xb4]) cnt[a->ref[1][xb4] >= 4]++; | 293 | 309k | } | 294 | | | 295 | 491k | if (have_left && !l->intra[yb4]) { | 296 | 357k | cnt[l->ref[0][yb4] >= 4]++; | 297 | 357k | if (l->comp_type[yb4]) cnt[l->ref[1][yb4] >= 4]++; | 298 | 357k | } | 299 | | | 300 | 491k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; | 301 | 491k | } |
Unexecuted instantiation: recon_tmpl.c:av1_get_ref_ctx Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_ref_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_ref_ctx Unexecuted instantiation: lf_apply_tmpl.c:av1_get_ref_ctx Unexecuted instantiation: lr_apply_tmpl.c:av1_get_ref_ctx |
302 | | |
303 | | static inline int av1_get_fwd_ref_ctx(const BlockContext *const a, |
304 | | const BlockContext *const l, |
305 | | const int yb4, const int xb4, |
306 | | const int have_top, const int have_left) |
307 | 402k | { |
308 | 402k | int cnt[4] = { 0 }; |
309 | | |
310 | 402k | if (have_top && !a->intra[xb4]) { |
311 | 255k | if (a->ref[0][xb4] < 4) cnt[a->ref[0][xb4]]++; |
312 | 255k | if (a->comp_type[xb4] && a->ref[1][xb4] < 4) cnt[a->ref[1][xb4]]++; |
313 | 255k | } |
314 | | |
315 | 402k | if (have_left && !l->intra[yb4]) { |
316 | 281k | if (l->ref[0][yb4] < 4) cnt[l->ref[0][yb4]]++; |
317 | 281k | if (l->comp_type[yb4] && l->ref[1][yb4] < 4) cnt[l->ref[1][yb4]]++; |
318 | 281k | } |
319 | | |
320 | 402k | cnt[0] += cnt[1]; |
321 | 402k | cnt[2] += cnt[3]; |
322 | | |
323 | 402k | return cnt[0] == cnt[2] ? 1 : cnt[0] < cnt[2] ? 0 : 2; |
324 | 402k | } Unexecuted instantiation: lib.c:av1_get_fwd_ref_ctx Unexecuted instantiation: log.c:av1_get_fwd_ref_ctx Unexecuted instantiation: mem.c:av1_get_fwd_ref_ctx Unexecuted instantiation: obu.c:av1_get_fwd_ref_ctx Unexecuted instantiation: picture.c:av1_get_fwd_ref_ctx Unexecuted instantiation: refmvs.c:av1_get_fwd_ref_ctx Unexecuted instantiation: thread_task.c:av1_get_fwd_ref_ctx Unexecuted instantiation: cdf.c:av1_get_fwd_ref_ctx decode.c:av1_get_fwd_ref_ctx Line | Count | Source | 307 | 402k | { | 308 | 402k | int cnt[4] = { 0 }; | 309 | | | 310 | 402k | if (have_top && !a->intra[xb4]) { | 311 | 255k | if (a->ref[0][xb4] < 4) cnt[a->ref[0][xb4]]++; | 312 | 255k | if (a->comp_type[xb4] && a->ref[1][xb4] < 4) cnt[a->ref[1][xb4]]++; | 313 | 255k | } | 314 | | | 315 | 402k | if (have_left && !l->intra[yb4]) { | 316 | 281k | if (l->ref[0][yb4] < 4) cnt[l->ref[0][yb4]]++; | 317 | 281k | if (l->comp_type[yb4] && l->ref[1][yb4] < 4) cnt[l->ref[1][yb4]]++; | 318 | 281k | } | 319 | | | 320 | 402k | cnt[0] += cnt[1]; | 321 | 402k | cnt[2] += cnt[3]; | 322 | | | 323 | 402k | return cnt[0] == cnt[2] ? 1 : cnt[0] < cnt[2] ? 0 : 2; | 324 | 402k | } |
Unexecuted instantiation: recon_tmpl.c:av1_get_fwd_ref_ctx Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_fwd_ref_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_fwd_ref_ctx Unexecuted instantiation: lf_apply_tmpl.c:av1_get_fwd_ref_ctx Unexecuted instantiation: lr_apply_tmpl.c:av1_get_fwd_ref_ctx |
325 | | |
326 | | static inline int av1_get_fwd_ref_1_ctx(const BlockContext *const a, |
327 | | const BlockContext *const l, |
328 | | const int yb4, const int xb4, |
329 | | const int have_top, const int have_left) |
330 | 324k | { |
331 | 324k | int cnt[2] = { 0 }; |
332 | | |
333 | 324k | if (have_top && !a->intra[xb4]) { |
334 | 205k | if (a->ref[0][xb4] < 2) cnt[a->ref[0][xb4]]++; |
335 | 205k | if (a->comp_type[xb4] && a->ref[1][xb4] < 2) cnt[a->ref[1][xb4]]++; |
336 | 205k | } |
337 | | |
338 | 324k | if (have_left && !l->intra[yb4]) { |
339 | 219k | if (l->ref[0][yb4] < 2) cnt[l->ref[0][yb4]]++; |
340 | 219k | if (l->comp_type[yb4] && l->ref[1][yb4] < 2) cnt[l->ref[1][yb4]]++; |
341 | 219k | } |
342 | | |
343 | 324k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; |
344 | 324k | } Unexecuted instantiation: lib.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: log.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: mem.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: obu.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: picture.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: refmvs.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: thread_task.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: cdf.c:av1_get_fwd_ref_1_ctx decode.c:av1_get_fwd_ref_1_ctx Line | Count | Source | 330 | 324k | { | 331 | 324k | int cnt[2] = { 0 }; | 332 | | | 333 | 324k | if (have_top && !a->intra[xb4]) { | 334 | 205k | if (a->ref[0][xb4] < 2) cnt[a->ref[0][xb4]]++; | 335 | 205k | if (a->comp_type[xb4] && a->ref[1][xb4] < 2) cnt[a->ref[1][xb4]]++; | 336 | 205k | } | 337 | | | 338 | 324k | if (have_left && !l->intra[yb4]) { | 339 | 219k | if (l->ref[0][yb4] < 2) cnt[l->ref[0][yb4]]++; | 340 | 219k | if (l->comp_type[yb4] && l->ref[1][yb4] < 2) cnt[l->ref[1][yb4]]++; | 341 | 219k | } | 342 | | | 343 | 324k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; | 344 | 324k | } |
Unexecuted instantiation: recon_tmpl.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: lf_apply_tmpl.c:av1_get_fwd_ref_1_ctx Unexecuted instantiation: lr_apply_tmpl.c:av1_get_fwd_ref_1_ctx |
345 | | |
346 | | static inline int av1_get_fwd_ref_2_ctx(const BlockContext *const a, |
347 | | const BlockContext *const l, |
348 | | const int yb4, const int xb4, |
349 | | const int have_top, const int have_left) |
350 | 84.4k | { |
351 | 84.4k | int cnt[2] = { 0 }; |
352 | | |
353 | 84.4k | if (have_top && !a->intra[xb4]) { |
354 | 55.8k | if ((a->ref[0][xb4] ^ 2U) < 2) cnt[a->ref[0][xb4] - 2]++; |
355 | 55.8k | if (a->comp_type[xb4] && (a->ref[1][xb4] ^ 2U) < 2) cnt[a->ref[1][xb4] - 2]++; |
356 | 55.8k | } |
357 | | |
358 | 84.4k | if (have_left && !l->intra[yb4]) { |
359 | 67.5k | if ((l->ref[0][yb4] ^ 2U) < 2) cnt[l->ref[0][yb4] - 2]++; |
360 | 67.5k | if (l->comp_type[yb4] && (l->ref[1][yb4] ^ 2U) < 2) cnt[l->ref[1][yb4] - 2]++; |
361 | 67.5k | } |
362 | | |
363 | 84.4k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; |
364 | 84.4k | } Unexecuted instantiation: lib.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: log.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: mem.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: obu.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: picture.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: refmvs.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: thread_task.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: cdf.c:av1_get_fwd_ref_2_ctx decode.c:av1_get_fwd_ref_2_ctx Line | Count | Source | 350 | 84.4k | { | 351 | 84.4k | int cnt[2] = { 0 }; | 352 | | | 353 | 84.4k | if (have_top && !a->intra[xb4]) { | 354 | 55.8k | if ((a->ref[0][xb4] ^ 2U) < 2) cnt[a->ref[0][xb4] - 2]++; | 355 | 55.8k | if (a->comp_type[xb4] && (a->ref[1][xb4] ^ 2U) < 2) cnt[a->ref[1][xb4] - 2]++; | 356 | 55.8k | } | 357 | | | 358 | 84.4k | if (have_left && !l->intra[yb4]) { | 359 | 67.5k | if ((l->ref[0][yb4] ^ 2U) < 2) cnt[l->ref[0][yb4] - 2]++; | 360 | 67.5k | if (l->comp_type[yb4] && (l->ref[1][yb4] ^ 2U) < 2) cnt[l->ref[1][yb4] - 2]++; | 361 | 67.5k | } | 362 | | | 363 | 84.4k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; | 364 | 84.4k | } |
Unexecuted instantiation: recon_tmpl.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: lf_apply_tmpl.c:av1_get_fwd_ref_2_ctx Unexecuted instantiation: lr_apply_tmpl.c:av1_get_fwd_ref_2_ctx |
365 | | |
366 | | static inline int av1_get_bwd_ref_ctx(const BlockContext *const a, |
367 | | const BlockContext *const l, |
368 | | const int yb4, const int xb4, |
369 | | const int have_top, const int have_left) |
370 | 213k | { |
371 | 213k | int cnt[3] = { 0 }; |
372 | | |
373 | 213k | if (have_top && !a->intra[xb4]) { |
374 | 150k | if (a->ref[0][xb4] >= 4) cnt[a->ref[0][xb4] - 4]++; |
375 | 150k | if (a->comp_type[xb4] && a->ref[1][xb4] >= 4) cnt[a->ref[1][xb4] - 4]++; |
376 | 150k | } |
377 | | |
378 | 213k | if (have_left && !l->intra[yb4]) { |
379 | 193k | if (l->ref[0][yb4] >= 4) cnt[l->ref[0][yb4] - 4]++; |
380 | 193k | if (l->comp_type[yb4] && l->ref[1][yb4] >= 4) cnt[l->ref[1][yb4] - 4]++; |
381 | 193k | } |
382 | | |
383 | 213k | cnt[1] += cnt[0]; |
384 | | |
385 | 213k | return cnt[2] == cnt[1] ? 1 : cnt[1] < cnt[2] ? 0 : 2; |
386 | 213k | } Unexecuted instantiation: lib.c:av1_get_bwd_ref_ctx Unexecuted instantiation: log.c:av1_get_bwd_ref_ctx Unexecuted instantiation: mem.c:av1_get_bwd_ref_ctx Unexecuted instantiation: obu.c:av1_get_bwd_ref_ctx Unexecuted instantiation: picture.c:av1_get_bwd_ref_ctx Unexecuted instantiation: refmvs.c:av1_get_bwd_ref_ctx Unexecuted instantiation: thread_task.c:av1_get_bwd_ref_ctx Unexecuted instantiation: cdf.c:av1_get_bwd_ref_ctx decode.c:av1_get_bwd_ref_ctx Line | Count | Source | 370 | 213k | { | 371 | 213k | int cnt[3] = { 0 }; | 372 | | | 373 | 213k | if (have_top && !a->intra[xb4]) { | 374 | 150k | if (a->ref[0][xb4] >= 4) cnt[a->ref[0][xb4] - 4]++; | 375 | 150k | if (a->comp_type[xb4] && a->ref[1][xb4] >= 4) cnt[a->ref[1][xb4] - 4]++; | 376 | 150k | } | 377 | | | 378 | 213k | if (have_left && !l->intra[yb4]) { | 379 | 193k | if (l->ref[0][yb4] >= 4) cnt[l->ref[0][yb4] - 4]++; | 380 | 193k | if (l->comp_type[yb4] && l->ref[1][yb4] >= 4) cnt[l->ref[1][yb4] - 4]++; | 381 | 193k | } | 382 | | | 383 | 213k | cnt[1] += cnt[0]; | 384 | | | 385 | 213k | return cnt[2] == cnt[1] ? 1 : cnt[1] < cnt[2] ? 0 : 2; | 386 | 213k | } |
Unexecuted instantiation: recon_tmpl.c:av1_get_bwd_ref_ctx Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_bwd_ref_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_bwd_ref_ctx Unexecuted instantiation: lf_apply_tmpl.c:av1_get_bwd_ref_ctx Unexecuted instantiation: lr_apply_tmpl.c:av1_get_bwd_ref_ctx |
387 | | |
388 | | static inline int av1_get_bwd_ref_1_ctx(const BlockContext *const a, |
389 | | const BlockContext *const l, |
390 | | const int yb4, const int xb4, |
391 | | const int have_top, const int have_left) |
392 | 69.9k | { |
393 | 69.9k | int cnt[3] = { 0 }; |
394 | | |
395 | 69.9k | if (have_top && !a->intra[xb4]) { |
396 | 55.2k | if (a->ref[0][xb4] >= 4) cnt[a->ref[0][xb4] - 4]++; |
397 | 55.2k | if (a->comp_type[xb4] && a->ref[1][xb4] >= 4) cnt[a->ref[1][xb4] - 4]++; |
398 | 55.2k | } |
399 | | |
400 | 69.9k | if (have_left && !l->intra[yb4]) { |
401 | 63.3k | if (l->ref[0][yb4] >= 4) cnt[l->ref[0][yb4] - 4]++; |
402 | 63.3k | if (l->comp_type[yb4] && l->ref[1][yb4] >= 4) cnt[l->ref[1][yb4] - 4]++; |
403 | 63.3k | } |
404 | | |
405 | 69.9k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; |
406 | 69.9k | } Unexecuted instantiation: lib.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: log.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: mem.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: obu.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: picture.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: refmvs.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: thread_task.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: cdf.c:av1_get_bwd_ref_1_ctx decode.c:av1_get_bwd_ref_1_ctx Line | Count | Source | 392 | 69.9k | { | 393 | 69.9k | int cnt[3] = { 0 }; | 394 | | | 395 | 69.9k | if (have_top && !a->intra[xb4]) { | 396 | 55.2k | if (a->ref[0][xb4] >= 4) cnt[a->ref[0][xb4] - 4]++; | 397 | 55.2k | if (a->comp_type[xb4] && a->ref[1][xb4] >= 4) cnt[a->ref[1][xb4] - 4]++; | 398 | 55.2k | } | 399 | | | 400 | 69.9k | if (have_left && !l->intra[yb4]) { | 401 | 63.3k | if (l->ref[0][yb4] >= 4) cnt[l->ref[0][yb4] - 4]++; | 402 | 63.3k | if (l->comp_type[yb4] && l->ref[1][yb4] >= 4) cnt[l->ref[1][yb4] - 4]++; | 403 | 63.3k | } | 404 | | | 405 | 69.9k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; | 406 | 69.9k | } |
Unexecuted instantiation: recon_tmpl.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: lf_apply_tmpl.c:av1_get_bwd_ref_1_ctx Unexecuted instantiation: lr_apply_tmpl.c:av1_get_bwd_ref_1_ctx |
407 | | |
408 | | static inline int av1_get_uni_p1_ctx(const BlockContext *const a, |
409 | | const BlockContext *const l, |
410 | | const int yb4, const int xb4, |
411 | | const int have_top, const int have_left) |
412 | 10.2k | { |
413 | 10.2k | int cnt[3] = { 0 }; |
414 | | |
415 | 10.2k | if (have_top && !a->intra[xb4]) { |
416 | 7.86k | if (a->ref[0][xb4] - 1U < 3) cnt[a->ref[0][xb4] - 1]++; |
417 | 7.86k | if (a->comp_type[xb4] && a->ref[1][xb4] - 1U < 3) cnt[a->ref[1][xb4] - 1]++; |
418 | 7.86k | } |
419 | | |
420 | 10.2k | if (have_left && !l->intra[yb4]) { |
421 | 9.17k | if (l->ref[0][yb4] - 1U < 3) cnt[l->ref[0][yb4] - 1]++; |
422 | 9.17k | if (l->comp_type[yb4] && l->ref[1][yb4] - 1U < 3) cnt[l->ref[1][yb4] - 1]++; |
423 | 9.17k | } |
424 | | |
425 | 10.2k | cnt[1] += cnt[2]; |
426 | | |
427 | 10.2k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; |
428 | 10.2k | } Unexecuted instantiation: lib.c:av1_get_uni_p1_ctx Unexecuted instantiation: log.c:av1_get_uni_p1_ctx Unexecuted instantiation: mem.c:av1_get_uni_p1_ctx Unexecuted instantiation: obu.c:av1_get_uni_p1_ctx Unexecuted instantiation: picture.c:av1_get_uni_p1_ctx Unexecuted instantiation: refmvs.c:av1_get_uni_p1_ctx Unexecuted instantiation: thread_task.c:av1_get_uni_p1_ctx Unexecuted instantiation: cdf.c:av1_get_uni_p1_ctx decode.c:av1_get_uni_p1_ctx Line | Count | Source | 412 | 10.2k | { | 413 | 10.2k | int cnt[3] = { 0 }; | 414 | | | 415 | 10.2k | if (have_top && !a->intra[xb4]) { | 416 | 7.86k | if (a->ref[0][xb4] - 1U < 3) cnt[a->ref[0][xb4] - 1]++; | 417 | 7.86k | if (a->comp_type[xb4] && a->ref[1][xb4] - 1U < 3) cnt[a->ref[1][xb4] - 1]++; | 418 | 7.86k | } | 419 | | | 420 | 10.2k | if (have_left && !l->intra[yb4]) { | 421 | 9.17k | if (l->ref[0][yb4] - 1U < 3) cnt[l->ref[0][yb4] - 1]++; | 422 | 9.17k | if (l->comp_type[yb4] && l->ref[1][yb4] - 1U < 3) cnt[l->ref[1][yb4] - 1]++; | 423 | 9.17k | } | 424 | | | 425 | 10.2k | cnt[1] += cnt[2]; | 426 | | | 427 | 10.2k | return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2; | 428 | 10.2k | } |
Unexecuted instantiation: recon_tmpl.c:av1_get_uni_p1_ctx Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_uni_p1_ctx Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_uni_p1_ctx Unexecuted instantiation: lf_apply_tmpl.c:av1_get_uni_p1_ctx Unexecuted instantiation: lr_apply_tmpl.c:av1_get_uni_p1_ctx |
429 | | |
430 | | static inline int get_drl_context(const refmvs_candidate *const ref_mv_stack, |
431 | | const int ref_idx) |
432 | 203k | { |
433 | 203k | if (ref_mv_stack[ref_idx].weight >= 640) |
434 | 158k | return ref_mv_stack[ref_idx + 1].weight < 640; |
435 | | |
436 | 18.4E | return ref_mv_stack[ref_idx + 1].weight < 640 ? 2 : 0; |
437 | 203k | } Unexecuted instantiation: lib.c:get_drl_context Unexecuted instantiation: log.c:get_drl_context Unexecuted instantiation: mem.c:get_drl_context Unexecuted instantiation: obu.c:get_drl_context Unexecuted instantiation: picture.c:get_drl_context Unexecuted instantiation: refmvs.c:get_drl_context Unexecuted instantiation: thread_task.c:get_drl_context Unexecuted instantiation: cdf.c:get_drl_context Line | Count | Source | 432 | 203k | { | 433 | 203k | if (ref_mv_stack[ref_idx].weight >= 640) | 434 | 158k | return ref_mv_stack[ref_idx + 1].weight < 640; | 435 | | | 436 | 18.4E | return ref_mv_stack[ref_idx + 1].weight < 640 ? 2 : 0; | 437 | 203k | } |
Unexecuted instantiation: recon_tmpl.c:get_drl_context Unexecuted instantiation: cdef_apply_tmpl.c:get_drl_context Unexecuted instantiation: ipred_prepare_tmpl.c:get_drl_context Unexecuted instantiation: lf_apply_tmpl.c:get_drl_context Unexecuted instantiation: lr_apply_tmpl.c:get_drl_context |
438 | | |
439 | | static inline unsigned get_cur_frame_segid(const int by, const int bx, |
440 | | const int have_top, |
441 | | const int have_left, |
442 | | int *const seg_ctx, |
443 | | const uint8_t *cur_seg_map, |
444 | | const ptrdiff_t stride) |
445 | 1.06M | { |
446 | 1.06M | cur_seg_map += bx + by * stride; |
447 | 1.06M | if (have_left && have_top) { |
448 | 527k | const int l = cur_seg_map[-1]; |
449 | 527k | const int a = cur_seg_map[-stride]; |
450 | 527k | const int al = cur_seg_map[-(stride + 1)]; |
451 | | |
452 | 527k | if (l == a && al == l) *seg_ctx = 2; |
453 | 338k | else if (l == a || al == l || a == al) *seg_ctx = 1; |
454 | 65.4k | else *seg_ctx = 0; |
455 | 527k | return a == al ? a : l; |
456 | 537k | } else { |
457 | 537k | *seg_ctx = 0; |
458 | 537k | return have_left ? cur_seg_map[-1] : have_top ? cur_seg_map[-stride] : 0; |
459 | 537k | } |
460 | 1.06M | } Unexecuted instantiation: lib.c:get_cur_frame_segid Unexecuted instantiation: log.c:get_cur_frame_segid Unexecuted instantiation: mem.c:get_cur_frame_segid Unexecuted instantiation: obu.c:get_cur_frame_segid Unexecuted instantiation: picture.c:get_cur_frame_segid Unexecuted instantiation: refmvs.c:get_cur_frame_segid Unexecuted instantiation: thread_task.c:get_cur_frame_segid Unexecuted instantiation: cdf.c:get_cur_frame_segid decode.c:get_cur_frame_segid Line | Count | Source | 445 | 1.06M | { | 446 | 1.06M | cur_seg_map += bx + by * stride; | 447 | 1.06M | if (have_left && have_top) { | 448 | 527k | const int l = cur_seg_map[-1]; | 449 | 527k | const int a = cur_seg_map[-stride]; | 450 | 527k | const int al = cur_seg_map[-(stride + 1)]; | 451 | | | 452 | 527k | if (l == a && al == l) *seg_ctx = 2; | 453 | 338k | else if (l == a || al == l || a == al) *seg_ctx = 1; | 454 | 65.4k | else *seg_ctx = 0; | 455 | 527k | return a == al ? a : l; | 456 | 537k | } else { | 457 | 537k | *seg_ctx = 0; | 458 | 537k | return have_left ? cur_seg_map[-1] : have_top ? cur_seg_map[-stride] : 0; | 459 | 537k | } | 460 | 1.06M | } |
Unexecuted instantiation: recon_tmpl.c:get_cur_frame_segid Unexecuted instantiation: cdef_apply_tmpl.c:get_cur_frame_segid Unexecuted instantiation: ipred_prepare_tmpl.c:get_cur_frame_segid Unexecuted instantiation: lf_apply_tmpl.c:get_cur_frame_segid Unexecuted instantiation: lr_apply_tmpl.c:get_cur_frame_segid |
461 | | |
462 | 276k | static inline void fix_int_mv_precision(mv *const mv) { |
463 | 276k | mv->x = (mv->x - (mv->x >> 15) + 3) & ~7U; |
464 | 276k | mv->y = (mv->y - (mv->y >> 15) + 3) & ~7U; |
465 | 276k | } Unexecuted instantiation: lib.c:fix_int_mv_precision Unexecuted instantiation: log.c:fix_int_mv_precision Unexecuted instantiation: mem.c:fix_int_mv_precision Unexecuted instantiation: obu.c:fix_int_mv_precision Unexecuted instantiation: picture.c:fix_int_mv_precision refmvs.c:fix_int_mv_precision Line | Count | Source | 462 | 118k | static inline void fix_int_mv_precision(mv *const mv) { | 463 | 118k | mv->x = (mv->x - (mv->x >> 15) + 3) & ~7U; | 464 | 118k | mv->y = (mv->y - (mv->y >> 15) + 3) & ~7U; | 465 | 118k | } |
Unexecuted instantiation: thread_task.c:fix_int_mv_precision Unexecuted instantiation: cdf.c:fix_int_mv_precision decode.c:fix_int_mv_precision Line | Count | Source | 462 | 157k | static inline void fix_int_mv_precision(mv *const mv) { | 463 | 157k | mv->x = (mv->x - (mv->x >> 15) + 3) & ~7U; | 464 | 157k | mv->y = (mv->y - (mv->y >> 15) + 3) & ~7U; | 465 | 157k | } |
Unexecuted instantiation: recon_tmpl.c:fix_int_mv_precision Unexecuted instantiation: cdef_apply_tmpl.c:fix_int_mv_precision Unexecuted instantiation: ipred_prepare_tmpl.c:fix_int_mv_precision Unexecuted instantiation: lf_apply_tmpl.c:fix_int_mv_precision Unexecuted instantiation: lr_apply_tmpl.c:fix_int_mv_precision |
466 | | |
467 | | static inline void fix_mv_precision(const Dav1dFrameHeader *const hdr, |
468 | | mv *const mv) |
469 | 547k | { |
470 | 547k | if (hdr->force_integer_mv) { |
471 | 125k | fix_int_mv_precision(mv); |
472 | 422k | } else if (!hdr->hp) { |
473 | 185k | mv->x = (mv->x - (mv->x >> 15)) & ~1U; |
474 | 185k | mv->y = (mv->y - (mv->y >> 15)) & ~1U; |
475 | 185k | } |
476 | 547k | } Unexecuted instantiation: lib.c:fix_mv_precision Unexecuted instantiation: log.c:fix_mv_precision Unexecuted instantiation: mem.c:fix_mv_precision Unexecuted instantiation: obu.c:fix_mv_precision Unexecuted instantiation: picture.c:fix_mv_precision refmvs.c:fix_mv_precision Line | Count | Source | 469 | 98.1k | { | 470 | 98.1k | if (hdr->force_integer_mv) { | 471 | 3.17k | fix_int_mv_precision(mv); | 472 | 94.9k | } else if (!hdr->hp) { | 473 | 27.1k | mv->x = (mv->x - (mv->x >> 15)) & ~1U; | 474 | 27.1k | mv->y = (mv->y - (mv->y >> 15)) & ~1U; | 475 | 27.1k | } | 476 | 98.1k | } |
Unexecuted instantiation: thread_task.c:fix_mv_precision Unexecuted instantiation: cdf.c:fix_mv_precision decode.c:fix_mv_precision Line | Count | Source | 469 | 449k | { | 470 | 449k | if (hdr->force_integer_mv) { | 471 | 122k | fix_int_mv_precision(mv); | 472 | 327k | } else if (!hdr->hp) { | 473 | 158k | mv->x = (mv->x - (mv->x >> 15)) & ~1U; | 474 | 158k | mv->y = (mv->y - (mv->y >> 15)) & ~1U; | 475 | 158k | } | 476 | 449k | } |
Unexecuted instantiation: recon_tmpl.c:fix_mv_precision Unexecuted instantiation: cdef_apply_tmpl.c:fix_mv_precision Unexecuted instantiation: ipred_prepare_tmpl.c:fix_mv_precision Unexecuted instantiation: lf_apply_tmpl.c:fix_mv_precision Unexecuted instantiation: lr_apply_tmpl.c:fix_mv_precision |
477 | | |
478 | | static inline mv get_gmv_2d(const Dav1dWarpedMotionParams *const gmv, |
479 | | const int bx4, const int by4, |
480 | | const int bw4, const int bh4, |
481 | | const Dav1dFrameHeader *const hdr) |
482 | 954k | { |
483 | 954k | switch (gmv->type) { |
484 | 148k | case DAV1D_WM_TYPE_ROT_ZOOM: |
485 | 148k | assert(gmv->matrix[5] == gmv->matrix[2]); |
486 | 148k | assert(gmv->matrix[4] == -gmv->matrix[3]); |
487 | | // fall-through |
488 | 148k | default: |
489 | 199k | case DAV1D_WM_TYPE_AFFINE: { |
490 | 199k | const int x = bx4 * 4 + bw4 * 2 - 1; |
491 | 199k | const int y = by4 * 4 + bh4 * 2 - 1; |
492 | 199k | const int xc = (gmv->matrix[2] - (1 << 16)) * x + |
493 | 199k | gmv->matrix[3] * y + gmv->matrix[0]; |
494 | 199k | const int yc = (gmv->matrix[5] - (1 << 16)) * y + |
495 | 199k | gmv->matrix[4] * x + gmv->matrix[1]; |
496 | 199k | const int shift = 16 - (3 - !hdr->hp); |
497 | 199k | const int round = (1 << shift) >> 1; |
498 | 199k | mv res = (mv) { |
499 | 199k | .y = apply_sign(((abs(yc) + round) >> shift) << !hdr->hp, yc), |
500 | 199k | .x = apply_sign(((abs(xc) + round) >> shift) << !hdr->hp, xc), |
501 | 199k | }; |
502 | 199k | if (hdr->force_integer_mv) |
503 | 96.0k | fix_int_mv_precision(&res); |
504 | 199k | return res; |
505 | 148k | } |
506 | 113k | case DAV1D_WM_TYPE_TRANSLATION: { |
507 | 113k | mv res = (mv) { |
508 | 113k | .y = gmv->matrix[0] >> 13, |
509 | 113k | .x = gmv->matrix[1] >> 13, |
510 | 113k | }; |
511 | 113k | if (hdr->force_integer_mv) |
512 | 54.4k | fix_int_mv_precision(&res); |
513 | 113k | return res; |
514 | 148k | } |
515 | 640k | case DAV1D_WM_TYPE_IDENTITY: |
516 | 640k | return (mv) { .x = 0, .y = 0 }; |
517 | 954k | } |
518 | 954k | } Unexecuted instantiation: lib.c:get_gmv_2d Unexecuted instantiation: log.c:get_gmv_2d Unexecuted instantiation: mem.c:get_gmv_2d Unexecuted instantiation: obu.c:get_gmv_2d Unexecuted instantiation: picture.c:get_gmv_2d Line | Count | Source | 482 | 792k | { | 483 | 792k | switch (gmv->type) { | 484 | 118k | case DAV1D_WM_TYPE_ROT_ZOOM: | 485 | 118k | assert(gmv->matrix[5] == gmv->matrix[2]); | 486 | 118k | assert(gmv->matrix[4] == -gmv->matrix[3]); | 487 | | // fall-through | 488 | 118k | default: | 489 | 158k | case DAV1D_WM_TYPE_AFFINE: { | 490 | 158k | const int x = bx4 * 4 + bw4 * 2 - 1; | 491 | 158k | const int y = by4 * 4 + bh4 * 2 - 1; | 492 | 158k | const int xc = (gmv->matrix[2] - (1 << 16)) * x + | 493 | 158k | gmv->matrix[3] * y + gmv->matrix[0]; | 494 | 158k | const int yc = (gmv->matrix[5] - (1 << 16)) * y + | 495 | 158k | gmv->matrix[4] * x + gmv->matrix[1]; | 496 | 158k | const int shift = 16 - (3 - !hdr->hp); | 497 | 158k | const int round = (1 << shift) >> 1; | 498 | 158k | mv res = (mv) { | 499 | 158k | .y = apply_sign(((abs(yc) + round) >> shift) << !hdr->hp, yc), | 500 | 158k | .x = apply_sign(((abs(xc) + round) >> shift) << !hdr->hp, xc), | 501 | 158k | }; | 502 | 158k | if (hdr->force_integer_mv) | 503 | 74.6k | fix_int_mv_precision(&res); | 504 | 158k | return res; | 505 | 118k | } | 506 | 86.4k | case DAV1D_WM_TYPE_TRANSLATION: { | 507 | 86.4k | mv res = (mv) { | 508 | 86.4k | .y = gmv->matrix[0] >> 13, | 509 | 86.4k | .x = gmv->matrix[1] >> 13, | 510 | 86.4k | }; | 511 | 86.4k | if (hdr->force_integer_mv) | 512 | 40.9k | fix_int_mv_precision(&res); | 513 | 86.4k | return res; | 514 | 118k | } | 515 | 547k | case DAV1D_WM_TYPE_IDENTITY: | 516 | 547k | return (mv) { .x = 0, .y = 0 }; | 517 | 792k | } | 518 | 792k | } |
Unexecuted instantiation: thread_task.c:get_gmv_2d Unexecuted instantiation: cdf.c:get_gmv_2d Line | Count | Source | 482 | 161k | { | 483 | 161k | switch (gmv->type) { | 484 | 30.5k | case DAV1D_WM_TYPE_ROT_ZOOM: | 485 | 30.5k | assert(gmv->matrix[5] == gmv->matrix[2]); | 486 | 30.5k | assert(gmv->matrix[4] == -gmv->matrix[3]); | 487 | | // fall-through | 488 | 30.5k | default: | 489 | 41.1k | case DAV1D_WM_TYPE_AFFINE: { | 490 | 41.1k | const int x = bx4 * 4 + bw4 * 2 - 1; | 491 | 41.1k | const int y = by4 * 4 + bh4 * 2 - 1; | 492 | 41.1k | const int xc = (gmv->matrix[2] - (1 << 16)) * x + | 493 | 41.1k | gmv->matrix[3] * y + gmv->matrix[0]; | 494 | 41.1k | const int yc = (gmv->matrix[5] - (1 << 16)) * y + | 495 | 41.1k | gmv->matrix[4] * x + gmv->matrix[1]; | 496 | 41.1k | const int shift = 16 - (3 - !hdr->hp); | 497 | 41.1k | const int round = (1 << shift) >> 1; | 498 | 41.1k | mv res = (mv) { | 499 | 41.1k | .y = apply_sign(((abs(yc) + round) >> shift) << !hdr->hp, yc), | 500 | 41.1k | .x = apply_sign(((abs(xc) + round) >> shift) << !hdr->hp, xc), | 501 | 41.1k | }; | 502 | 41.1k | if (hdr->force_integer_mv) | 503 | 21.3k | fix_int_mv_precision(&res); | 504 | 41.1k | return res; | 505 | 30.5k | } | 506 | 27.1k | case DAV1D_WM_TYPE_TRANSLATION: { | 507 | 27.1k | mv res = (mv) { | 508 | 27.1k | .y = gmv->matrix[0] >> 13, | 509 | 27.1k | .x = gmv->matrix[1] >> 13, | 510 | 27.1k | }; | 511 | 27.1k | if (hdr->force_integer_mv) | 512 | 13.5k | fix_int_mv_precision(&res); | 513 | 27.1k | return res; | 514 | 30.5k | } | 515 | 93.5k | case DAV1D_WM_TYPE_IDENTITY: | 516 | 93.5k | return (mv) { .x = 0, .y = 0 }; | 517 | 161k | } | 518 | 161k | } |
Unexecuted instantiation: recon_tmpl.c:get_gmv_2d Unexecuted instantiation: cdef_apply_tmpl.c:get_gmv_2d Unexecuted instantiation: ipred_prepare_tmpl.c:get_gmv_2d Unexecuted instantiation: lf_apply_tmpl.c:get_gmv_2d Unexecuted instantiation: lr_apply_tmpl.c:get_gmv_2d |
519 | | |
520 | | #endif /* DAV1D_SRC_ENV_H */ |