/src/aom/av1/encoder/mcomp.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2016, Alliance for Open Media. All rights reserved |
3 | | * |
4 | | * This source code is subject to the terms of the BSD 2 Clause License and |
5 | | * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License |
6 | | * was not distributed with this source code in the LICENSE file, you can |
7 | | * obtain it at www.aomedia.org/license/software. If the Alliance for Open |
8 | | * Media Patent License 1.0 was not distributed with this source code in the |
9 | | * PATENTS file, you can obtain it at www.aomedia.org/license/patent. |
10 | | */ |
11 | | |
12 | | #ifndef AOM_AV1_ENCODER_MCOMP_H_ |
13 | | #define AOM_AV1_ENCODER_MCOMP_H_ |
14 | | |
15 | | #include "av1/common/mv.h" |
16 | | #include "av1/encoder/block.h" |
17 | | #include "av1/encoder/rd.h" |
18 | | |
19 | | #include "aom_dsp/variance.h" |
20 | | |
21 | | #ifdef __cplusplus |
22 | | extern "C" { |
23 | | #endif |
24 | | |
25 | | // The maximum number of steps in a step search given the largest |
26 | | // allowed initial step |
27 | 0 | #define MAX_MVSEARCH_STEPS 11 |
28 | | // Max full pel mv specified in the unit of full pixel |
29 | | // Enable the use of motion vector in range [-1023, 1023]. |
30 | 0 | #define MAX_FULL_PEL_VAL ((1 << (MAX_MVSEARCH_STEPS - 1)) - 1) |
31 | | // Maximum size of the first step in full pel units |
32 | 0 | #define MAX_FIRST_STEP (1 << (MAX_MVSEARCH_STEPS - 1)) |
33 | | |
34 | 0 | #define SEARCH_RANGE_8P 3 |
35 | 0 | #define SEARCH_GRID_STRIDE_8P (2 * SEARCH_RANGE_8P + 1) |
36 | | #define SEARCH_GRID_CENTER_8P \ |
37 | 0 | (SEARCH_RANGE_8P * SEARCH_GRID_STRIDE_8P + SEARCH_RANGE_8P) |
38 | | |
39 | | // motion search site |
40 | | typedef struct search_site { |
41 | | FULLPEL_MV mv; |
42 | | int offset; |
43 | | } search_site; |
44 | | |
45 | | typedef struct search_site_config { |
46 | | search_site site[MAX_MVSEARCH_STEPS * 2][16 + 1]; |
47 | | // Number of search steps. |
48 | | int num_search_steps; |
49 | | int searches_per_step[MAX_MVSEARCH_STEPS * 2]; |
50 | | int radius[MAX_MVSEARCH_STEPS * 2]; |
51 | | int stride; |
52 | | } search_site_config; |
53 | | |
54 | | typedef struct { |
55 | | FULLPEL_MV coord; |
56 | | int coord_offset; |
57 | | } search_neighbors; |
58 | | |
59 | | struct AV1_COMP; |
60 | | struct SPEED_FEATURES; |
61 | | |
62 | | // ============================================================================= |
63 | | // Cost functions |
64 | | // ============================================================================= |
65 | | |
66 | | enum { |
67 | | MV_COST_ENTROPY, // Use the entropy rate of the mv as the cost |
68 | | MV_COST_L1_LOWRES, // Use the l1 norm of the mv as the cost (<480p) |
69 | | MV_COST_L1_MIDRES, // Use the l1 norm of the mv as the cost (>=480p) |
70 | | MV_COST_L1_HDRES, // Use the l1 norm of the mv as the cost (>=720p) |
71 | | MV_COST_NONE // Use 0 as as cost irrespective of the current mv |
72 | | } UENUM1BYTE(MV_COST_TYPE); |
73 | | |
74 | | typedef struct { |
75 | | // The reference mv used to compute the mv cost |
76 | | const MV *ref_mv; |
77 | | FULLPEL_MV full_ref_mv; |
78 | | MV_COST_TYPE mv_cost_type; |
79 | | const int *mvjcost; |
80 | | const int *mvcost[2]; |
81 | | int error_per_bit; |
82 | | // A multiplier used to convert rate to sad cost |
83 | | int sad_per_bit; |
84 | | } MV_COST_PARAMS; |
85 | | |
86 | | int av1_mv_bit_cost(const MV *mv, const MV *ref_mv, const int *mvjcost, |
87 | | int *const mvcost[2], int weight); |
88 | | |
89 | | int av1_get_mvpred_sse(const MV_COST_PARAMS *mv_cost_params, |
90 | | const FULLPEL_MV best_mv, |
91 | | const aom_variance_fn_ptr_t *vfp, |
92 | | const struct buf_2d *src, const struct buf_2d *pre); |
93 | | int av1_get_mvpred_compound_var(const MV_COST_PARAMS *ms_params, |
94 | | const FULLPEL_MV best_mv, |
95 | | const uint8_t *second_pred, const uint8_t *mask, |
96 | | int mask_stride, int invert_mask, |
97 | | const aom_variance_fn_ptr_t *vfp, |
98 | | const struct buf_2d *src, |
99 | | const struct buf_2d *pre); |
100 | | |
101 | | // ============================================================================= |
102 | | // Motion Search |
103 | | // ============================================================================= |
104 | | typedef struct { |
105 | | // The reference buffer |
106 | | const struct buf_2d *ref; |
107 | | |
108 | | // The source and predictors/mask used by translational search |
109 | | const struct buf_2d *src; |
110 | | const uint8_t *second_pred; |
111 | | const uint8_t *mask; |
112 | | int mask_stride; |
113 | | int inv_mask; |
114 | | |
115 | | // The weighted source and mask used by OBMC |
116 | | const int32_t *wsrc; |
117 | | const int32_t *obmc_mask; |
118 | | } MSBuffers; |
119 | | |
120 | | static INLINE void av1_set_ms_compound_refs(MSBuffers *ms_buffers, |
121 | | const uint8_t *second_pred, |
122 | | const uint8_t *mask, |
123 | 0 | int mask_stride, int invert_mask) { |
124 | 0 | ms_buffers->second_pred = second_pred; |
125 | 0 | ms_buffers->mask = mask; |
126 | 0 | ms_buffers->mask_stride = mask_stride; |
127 | 0 | ms_buffers->inv_mask = invert_mask; |
128 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_set_ms_compound_refs Unexecuted instantiation: av1_quantize.c:av1_set_ms_compound_refs Unexecuted instantiation: bitstream.c:av1_set_ms_compound_refs Unexecuted instantiation: encodemv.c:av1_set_ms_compound_refs Unexecuted instantiation: encoder.c:av1_set_ms_compound_refs Unexecuted instantiation: encoder_utils.c:av1_set_ms_compound_refs Unexecuted instantiation: encodetxb.c:av1_set_ms_compound_refs Unexecuted instantiation: ethread.c:av1_set_ms_compound_refs Unexecuted instantiation: firstpass.c:av1_set_ms_compound_refs Unexecuted instantiation: global_motion_facade.c:av1_set_ms_compound_refs Unexecuted instantiation: level.c:av1_set_ms_compound_refs Unexecuted instantiation: lookahead.c:av1_set_ms_compound_refs Unexecuted instantiation: mcomp.c:av1_set_ms_compound_refs Unexecuted instantiation: mv_prec.c:av1_set_ms_compound_refs Unexecuted instantiation: palette.c:av1_set_ms_compound_refs Unexecuted instantiation: pass2_strategy.c:av1_set_ms_compound_refs Unexecuted instantiation: pickcdef.c:av1_set_ms_compound_refs Unexecuted instantiation: picklpf.c:av1_set_ms_compound_refs Unexecuted instantiation: pickrst.c:av1_set_ms_compound_refs Unexecuted instantiation: ratectrl.c:av1_set_ms_compound_refs Unexecuted instantiation: rd.c:av1_set_ms_compound_refs Unexecuted instantiation: rdopt.c:av1_set_ms_compound_refs Unexecuted instantiation: segmentation.c:av1_set_ms_compound_refs Unexecuted instantiation: speed_features.c:av1_set_ms_compound_refs Unexecuted instantiation: superres_scale.c:av1_set_ms_compound_refs Unexecuted instantiation: svc_layercontext.c:av1_set_ms_compound_refs Unexecuted instantiation: temporal_filter.c:av1_set_ms_compound_refs Unexecuted instantiation: thirdpass.c:av1_set_ms_compound_refs Unexecuted instantiation: tokenize.c:av1_set_ms_compound_refs Unexecuted instantiation: tpl_model.c:av1_set_ms_compound_refs Unexecuted instantiation: tx_search.c:av1_set_ms_compound_refs Unexecuted instantiation: txb_rdopt.c:av1_set_ms_compound_refs Unexecuted instantiation: intra_mode_search.c:av1_set_ms_compound_refs Unexecuted instantiation: var_based_part.c:av1_set_ms_compound_refs Unexecuted instantiation: av1_noise_estimate.c:av1_set_ms_compound_refs Unexecuted instantiation: aq_complexity.c:av1_set_ms_compound_refs Unexecuted instantiation: aq_cyclicrefresh.c:av1_set_ms_compound_refs Unexecuted instantiation: aq_variance.c:av1_set_ms_compound_refs Unexecuted instantiation: allintra_vis.c:av1_set_ms_compound_refs Unexecuted instantiation: compound_type.c:av1_set_ms_compound_refs Unexecuted instantiation: context_tree.c:av1_set_ms_compound_refs Unexecuted instantiation: encodeframe.c:av1_set_ms_compound_refs Unexecuted instantiation: encodeframe_utils.c:av1_set_ms_compound_refs Unexecuted instantiation: encodemb.c:av1_set_ms_compound_refs Unexecuted instantiation: encode_strategy.c:av1_set_ms_compound_refs Unexecuted instantiation: global_motion.c:av1_set_ms_compound_refs Unexecuted instantiation: gop_structure.c:av1_set_ms_compound_refs Unexecuted instantiation: interp_search.c:av1_set_ms_compound_refs Unexecuted instantiation: motion_search_facade.c:av1_set_ms_compound_refs Unexecuted instantiation: partition_search.c:av1_set_ms_compound_refs Unexecuted instantiation: partition_strategy.c:av1_set_ms_compound_refs Unexecuted instantiation: nonrd_pickmode.c:av1_set_ms_compound_refs |
129 | | |
130 | | // ============================================================================= |
131 | | // Fullpixel Motion Search |
132 | | // ============================================================================= |
133 | | enum { |
134 | | // Search 8-points in the radius grid around center, up to 11 search stages. |
135 | | DIAMOND = 0, |
136 | | // Search 12-points in the radius/tan_radius grid around center, |
137 | | // up to 15 search stages. |
138 | | NSTEP = 1, |
139 | | // Search 8-points in the radius grid around center, up to 16 search stages. |
140 | | NSTEP_8PT = 2, |
141 | | // Search 8-points in the radius grid around center, upto 11 search stages |
142 | | // with clamping of search radius. |
143 | | CLAMPED_DIAMOND = 3, |
144 | | // Search maximum 8-points in the radius grid around center, |
145 | | // up to 11 search stages. First stage consists of 8 search points |
146 | | // and the rest with 6 search points each in hex shape. |
147 | | HEX = 4, |
148 | | // Search maximum 8-points in the radius grid around center, |
149 | | // up to 11 search stages. First stage consists of 4 search |
150 | | // points and the rest with 8 search points each. |
151 | | BIGDIA = 5, |
152 | | // Search 8-points in the square grid around center, up to 11 search stages. |
153 | | SQUARE = 6, |
154 | | // HEX search with up to 2 stages. |
155 | | FAST_HEX = 7, |
156 | | // BIGDIA search with up to 2 stages. |
157 | | FAST_DIAMOND = 8, |
158 | | // BIGDIA search with up to 3 stages. |
159 | | FAST_BIGDIA = 9, |
160 | | // Total number of search methods. |
161 | | NUM_SEARCH_METHODS, |
162 | | // Number of distinct search methods. |
163 | | NUM_DISTINCT_SEARCH_METHODS = SQUARE + 1, |
164 | | } UENUM1BYTE(SEARCH_METHODS); |
165 | | |
166 | | // This struct holds fullpixel motion search parameters that should be constant |
167 | | // during the search |
168 | | typedef struct { |
169 | | BLOCK_SIZE bsize; |
170 | | // A function pointer to the simd function for fast computation |
171 | | const aom_variance_fn_ptr_t *vfp; |
172 | | |
173 | | MSBuffers ms_buffers; |
174 | | |
175 | | // WARNING: search_method should be regarded as a private variable and should |
176 | | // not be modified directly so it is in sync with search_sites. To modify it, |
177 | | // use av1_set_mv_search_method. |
178 | | SEARCH_METHODS search_method; |
179 | | const search_site_config *search_sites; |
180 | | FullMvLimits mv_limits; |
181 | | |
182 | | int run_mesh_search; // Sets mesh search unless it got pruned by |
183 | | // prune_mesh_search. |
184 | | int prune_mesh_search; // Disables mesh search if the best_mv after a normal |
185 | | // search if close to the start_mv. |
186 | | int mesh_search_mv_diff_threshold; // mv diff threshold to enable |
187 | | // prune_mesh_search |
188 | | int force_mesh_thresh; // Forces mesh search if the residue variance is |
189 | | // higher than the threshold. |
190 | | const struct MESH_PATTERN *mesh_patterns[2]; |
191 | | |
192 | | // Use maximum search interval of 4 if true. This helps motion search to find |
193 | | // the best motion vector for screen content types. |
194 | | int fine_search_interval; |
195 | | |
196 | | int is_intra_mode; |
197 | | |
198 | | int fast_obmc_search; |
199 | | |
200 | | // For calculating mv cost |
201 | | MV_COST_PARAMS mv_cost_params; |
202 | | |
203 | | // Stores the function used to compute the sad. This can be different from the |
204 | | // sdf in vfp (e.g. downsampled sad and not sad) to allow speed up. |
205 | | aom_sad_fn_t sdf; |
206 | | aom_sad_multi_d_fn_t sdx4df; |
207 | | } FULLPEL_MOTION_SEARCH_PARAMS; |
208 | | |
209 | | void av1_init_obmc_buffer(OBMCBuffer *obmc_buffer); |
210 | | |
211 | | void av1_make_default_fullpel_ms_params( |
212 | | FULLPEL_MOTION_SEARCH_PARAMS *ms_params, const struct AV1_COMP *cpi, |
213 | | const MACROBLOCK *x, BLOCK_SIZE bsize, const MV *ref_mv, |
214 | | const search_site_config search_sites[NUM_DISTINCT_SEARCH_METHODS], |
215 | | int fine_search_interval); |
216 | | |
217 | | /*! Sets the \ref FULLPEL_MOTION_SEARCH_PARAMS to intra mode. */ |
218 | | void av1_set_ms_to_intra_mode(FULLPEL_MOTION_SEARCH_PARAMS *ms_params, |
219 | | const IntraBCMVCosts *dv_costs); |
220 | | |
221 | | // Sets up configs for fullpixel DIAMOND / CLAMPED_DIAMOND search method. |
222 | | void av1_init_dsmotion_compensation(search_site_config *cfg, int stride, |
223 | | int level); |
224 | | // Sets up configs for firstpass motion search. |
225 | | void av1_init_motion_fpf(search_site_config *cfg, int stride); |
226 | | // Sets up configs for NSTEP / NSTEP_8PT motion search method. |
227 | | void av1_init_motion_compensation_nstep(search_site_config *cfg, int stride, |
228 | | int level); |
229 | | // Sets up configs for BIGDIA / FAST_DIAMOND / FAST_BIGDIA |
230 | | // motion search method. |
231 | | void av1_init_motion_compensation_bigdia(search_site_config *cfg, int stride, |
232 | | int level); |
233 | | // Sets up configs for HEX or FAST_HEX motion search method. |
234 | | void av1_init_motion_compensation_hex(search_site_config *cfg, int stride, |
235 | | int level); |
236 | | // Sets up configs for SQUARE motion search method. |
237 | | void av1_init_motion_compensation_square(search_site_config *cfg, int stride, |
238 | | int level); |
239 | | |
240 | | // Mv beyond the range do not produce new/different prediction block. |
241 | | static INLINE void av1_set_mv_search_method( |
242 | | FULLPEL_MOTION_SEARCH_PARAMS *ms_params, |
243 | | const search_site_config search_sites[NUM_DISTINCT_SEARCH_METHODS], |
244 | 0 | SEARCH_METHODS search_method) { |
245 | | // Array to inform which all search methods are having |
246 | | // same candidates and different in number of search steps. |
247 | 0 | static const SEARCH_METHODS search_method_lookup[NUM_SEARCH_METHODS] = { |
248 | 0 | DIAMOND, // DIAMOND |
249 | 0 | NSTEP, // NSTEP |
250 | 0 | NSTEP_8PT, // NSTEP_8PT |
251 | 0 | CLAMPED_DIAMOND, // CLAMPED_DIAMOND |
252 | 0 | HEX, // HEX |
253 | 0 | BIGDIA, // BIGDIA |
254 | 0 | SQUARE, // SQUARE |
255 | 0 | HEX, // FAST_HEX |
256 | 0 | BIGDIA, // FAST_DIAMOND |
257 | 0 | BIGDIA // FAST_BIGDIA |
258 | 0 | }; |
259 | |
|
260 | 0 | ms_params->search_method = search_method; |
261 | 0 | ms_params->search_sites = |
262 | 0 | &search_sites[search_method_lookup[ms_params->search_method]]; |
263 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_set_mv_search_method Unexecuted instantiation: av1_quantize.c:av1_set_mv_search_method Unexecuted instantiation: bitstream.c:av1_set_mv_search_method Unexecuted instantiation: encodemv.c:av1_set_mv_search_method Unexecuted instantiation: encoder.c:av1_set_mv_search_method Unexecuted instantiation: encoder_utils.c:av1_set_mv_search_method Unexecuted instantiation: encodetxb.c:av1_set_mv_search_method Unexecuted instantiation: ethread.c:av1_set_mv_search_method Unexecuted instantiation: firstpass.c:av1_set_mv_search_method Unexecuted instantiation: global_motion_facade.c:av1_set_mv_search_method Unexecuted instantiation: level.c:av1_set_mv_search_method Unexecuted instantiation: lookahead.c:av1_set_mv_search_method Unexecuted instantiation: mcomp.c:av1_set_mv_search_method Unexecuted instantiation: mv_prec.c:av1_set_mv_search_method Unexecuted instantiation: palette.c:av1_set_mv_search_method Unexecuted instantiation: pass2_strategy.c:av1_set_mv_search_method Unexecuted instantiation: pickcdef.c:av1_set_mv_search_method Unexecuted instantiation: picklpf.c:av1_set_mv_search_method Unexecuted instantiation: pickrst.c:av1_set_mv_search_method Unexecuted instantiation: ratectrl.c:av1_set_mv_search_method Unexecuted instantiation: rd.c:av1_set_mv_search_method Unexecuted instantiation: rdopt.c:av1_set_mv_search_method Unexecuted instantiation: segmentation.c:av1_set_mv_search_method Unexecuted instantiation: speed_features.c:av1_set_mv_search_method Unexecuted instantiation: superres_scale.c:av1_set_mv_search_method Unexecuted instantiation: svc_layercontext.c:av1_set_mv_search_method Unexecuted instantiation: temporal_filter.c:av1_set_mv_search_method Unexecuted instantiation: thirdpass.c:av1_set_mv_search_method Unexecuted instantiation: tokenize.c:av1_set_mv_search_method Unexecuted instantiation: tpl_model.c:av1_set_mv_search_method Unexecuted instantiation: tx_search.c:av1_set_mv_search_method Unexecuted instantiation: txb_rdopt.c:av1_set_mv_search_method Unexecuted instantiation: intra_mode_search.c:av1_set_mv_search_method Unexecuted instantiation: var_based_part.c:av1_set_mv_search_method Unexecuted instantiation: av1_noise_estimate.c:av1_set_mv_search_method Unexecuted instantiation: aq_complexity.c:av1_set_mv_search_method Unexecuted instantiation: aq_cyclicrefresh.c:av1_set_mv_search_method Unexecuted instantiation: aq_variance.c:av1_set_mv_search_method Unexecuted instantiation: allintra_vis.c:av1_set_mv_search_method Unexecuted instantiation: compound_type.c:av1_set_mv_search_method Unexecuted instantiation: context_tree.c:av1_set_mv_search_method Unexecuted instantiation: encodeframe.c:av1_set_mv_search_method Unexecuted instantiation: encodeframe_utils.c:av1_set_mv_search_method Unexecuted instantiation: encodemb.c:av1_set_mv_search_method Unexecuted instantiation: encode_strategy.c:av1_set_mv_search_method Unexecuted instantiation: global_motion.c:av1_set_mv_search_method Unexecuted instantiation: gop_structure.c:av1_set_mv_search_method Unexecuted instantiation: interp_search.c:av1_set_mv_search_method Unexecuted instantiation: motion_search_facade.c:av1_set_mv_search_method Unexecuted instantiation: partition_search.c:av1_set_mv_search_method Unexecuted instantiation: partition_strategy.c:av1_set_mv_search_method Unexecuted instantiation: nonrd_pickmode.c:av1_set_mv_search_method |
264 | | |
265 | | // Set up limit values for MV components. |
266 | | // Mv beyond the range do not produce new/different prediction block. |
267 | | static INLINE void av1_set_mv_row_limits( |
268 | | const CommonModeInfoParams *const mi_params, FullMvLimits *mv_limits, |
269 | 0 | int mi_row, int mi_height, int border) { |
270 | 0 | const int min1 = -(mi_row * MI_SIZE + border - 2 * AOM_INTERP_EXTEND); |
271 | 0 | const int min2 = -(((mi_row + mi_height) * MI_SIZE) + 2 * AOM_INTERP_EXTEND); |
272 | 0 | mv_limits->row_min = AOMMAX(min1, min2); |
273 | 0 | const int max1 = (mi_params->mi_rows - mi_row - mi_height) * MI_SIZE + |
274 | 0 | border - 2 * AOM_INTERP_EXTEND; |
275 | 0 | const int max2 = |
276 | 0 | (mi_params->mi_rows - mi_row) * MI_SIZE + 2 * AOM_INTERP_EXTEND; |
277 | 0 | mv_limits->row_max = AOMMIN(max1, max2); |
278 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_set_mv_row_limits Unexecuted instantiation: av1_quantize.c:av1_set_mv_row_limits Unexecuted instantiation: bitstream.c:av1_set_mv_row_limits Unexecuted instantiation: encodemv.c:av1_set_mv_row_limits Unexecuted instantiation: encoder.c:av1_set_mv_row_limits Unexecuted instantiation: encoder_utils.c:av1_set_mv_row_limits Unexecuted instantiation: encodetxb.c:av1_set_mv_row_limits Unexecuted instantiation: ethread.c:av1_set_mv_row_limits Unexecuted instantiation: firstpass.c:av1_set_mv_row_limits Unexecuted instantiation: global_motion_facade.c:av1_set_mv_row_limits Unexecuted instantiation: level.c:av1_set_mv_row_limits Unexecuted instantiation: lookahead.c:av1_set_mv_row_limits Unexecuted instantiation: mcomp.c:av1_set_mv_row_limits Unexecuted instantiation: mv_prec.c:av1_set_mv_row_limits Unexecuted instantiation: palette.c:av1_set_mv_row_limits Unexecuted instantiation: pass2_strategy.c:av1_set_mv_row_limits Unexecuted instantiation: pickcdef.c:av1_set_mv_row_limits Unexecuted instantiation: picklpf.c:av1_set_mv_row_limits Unexecuted instantiation: pickrst.c:av1_set_mv_row_limits Unexecuted instantiation: ratectrl.c:av1_set_mv_row_limits Unexecuted instantiation: rd.c:av1_set_mv_row_limits Unexecuted instantiation: rdopt.c:av1_set_mv_row_limits Unexecuted instantiation: segmentation.c:av1_set_mv_row_limits Unexecuted instantiation: speed_features.c:av1_set_mv_row_limits Unexecuted instantiation: superres_scale.c:av1_set_mv_row_limits Unexecuted instantiation: svc_layercontext.c:av1_set_mv_row_limits Unexecuted instantiation: temporal_filter.c:av1_set_mv_row_limits Unexecuted instantiation: thirdpass.c:av1_set_mv_row_limits Unexecuted instantiation: tokenize.c:av1_set_mv_row_limits Unexecuted instantiation: tpl_model.c:av1_set_mv_row_limits Unexecuted instantiation: tx_search.c:av1_set_mv_row_limits Unexecuted instantiation: txb_rdopt.c:av1_set_mv_row_limits Unexecuted instantiation: intra_mode_search.c:av1_set_mv_row_limits Unexecuted instantiation: var_based_part.c:av1_set_mv_row_limits Unexecuted instantiation: av1_noise_estimate.c:av1_set_mv_row_limits Unexecuted instantiation: aq_complexity.c:av1_set_mv_row_limits Unexecuted instantiation: aq_cyclicrefresh.c:av1_set_mv_row_limits Unexecuted instantiation: aq_variance.c:av1_set_mv_row_limits Unexecuted instantiation: allintra_vis.c:av1_set_mv_row_limits Unexecuted instantiation: compound_type.c:av1_set_mv_row_limits Unexecuted instantiation: context_tree.c:av1_set_mv_row_limits Unexecuted instantiation: encodeframe.c:av1_set_mv_row_limits Unexecuted instantiation: encodeframe_utils.c:av1_set_mv_row_limits Unexecuted instantiation: encodemb.c:av1_set_mv_row_limits Unexecuted instantiation: encode_strategy.c:av1_set_mv_row_limits Unexecuted instantiation: global_motion.c:av1_set_mv_row_limits Unexecuted instantiation: gop_structure.c:av1_set_mv_row_limits Unexecuted instantiation: interp_search.c:av1_set_mv_row_limits Unexecuted instantiation: motion_search_facade.c:av1_set_mv_row_limits Unexecuted instantiation: partition_search.c:av1_set_mv_row_limits Unexecuted instantiation: partition_strategy.c:av1_set_mv_row_limits Unexecuted instantiation: nonrd_pickmode.c:av1_set_mv_row_limits |
279 | | |
280 | | static INLINE void av1_set_mv_col_limits( |
281 | | const CommonModeInfoParams *const mi_params, FullMvLimits *mv_limits, |
282 | 0 | int mi_col, int mi_width, int border) { |
283 | 0 | const int min1 = -(mi_col * MI_SIZE + border - 2 * AOM_INTERP_EXTEND); |
284 | 0 | const int min2 = -(((mi_col + mi_width) * MI_SIZE) + 2 * AOM_INTERP_EXTEND); |
285 | 0 | mv_limits->col_min = AOMMAX(min1, min2); |
286 | 0 | const int max1 = (mi_params->mi_cols - mi_col - mi_width) * MI_SIZE + border - |
287 | 0 | 2 * AOM_INTERP_EXTEND; |
288 | 0 | const int max2 = |
289 | 0 | (mi_params->mi_cols - mi_col) * MI_SIZE + 2 * AOM_INTERP_EXTEND; |
290 | 0 | mv_limits->col_max = AOMMIN(max1, max2); |
291 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_set_mv_col_limits Unexecuted instantiation: av1_quantize.c:av1_set_mv_col_limits Unexecuted instantiation: bitstream.c:av1_set_mv_col_limits Unexecuted instantiation: encodemv.c:av1_set_mv_col_limits Unexecuted instantiation: encoder.c:av1_set_mv_col_limits Unexecuted instantiation: encoder_utils.c:av1_set_mv_col_limits Unexecuted instantiation: encodetxb.c:av1_set_mv_col_limits Unexecuted instantiation: ethread.c:av1_set_mv_col_limits Unexecuted instantiation: firstpass.c:av1_set_mv_col_limits Unexecuted instantiation: global_motion_facade.c:av1_set_mv_col_limits Unexecuted instantiation: level.c:av1_set_mv_col_limits Unexecuted instantiation: lookahead.c:av1_set_mv_col_limits Unexecuted instantiation: mcomp.c:av1_set_mv_col_limits Unexecuted instantiation: mv_prec.c:av1_set_mv_col_limits Unexecuted instantiation: palette.c:av1_set_mv_col_limits Unexecuted instantiation: pass2_strategy.c:av1_set_mv_col_limits Unexecuted instantiation: pickcdef.c:av1_set_mv_col_limits Unexecuted instantiation: picklpf.c:av1_set_mv_col_limits Unexecuted instantiation: pickrst.c:av1_set_mv_col_limits Unexecuted instantiation: ratectrl.c:av1_set_mv_col_limits Unexecuted instantiation: rd.c:av1_set_mv_col_limits Unexecuted instantiation: rdopt.c:av1_set_mv_col_limits Unexecuted instantiation: segmentation.c:av1_set_mv_col_limits Unexecuted instantiation: speed_features.c:av1_set_mv_col_limits Unexecuted instantiation: superres_scale.c:av1_set_mv_col_limits Unexecuted instantiation: svc_layercontext.c:av1_set_mv_col_limits Unexecuted instantiation: temporal_filter.c:av1_set_mv_col_limits Unexecuted instantiation: thirdpass.c:av1_set_mv_col_limits Unexecuted instantiation: tokenize.c:av1_set_mv_col_limits Unexecuted instantiation: tpl_model.c:av1_set_mv_col_limits Unexecuted instantiation: tx_search.c:av1_set_mv_col_limits Unexecuted instantiation: txb_rdopt.c:av1_set_mv_col_limits Unexecuted instantiation: intra_mode_search.c:av1_set_mv_col_limits Unexecuted instantiation: var_based_part.c:av1_set_mv_col_limits Unexecuted instantiation: av1_noise_estimate.c:av1_set_mv_col_limits Unexecuted instantiation: aq_complexity.c:av1_set_mv_col_limits Unexecuted instantiation: aq_cyclicrefresh.c:av1_set_mv_col_limits Unexecuted instantiation: aq_variance.c:av1_set_mv_col_limits Unexecuted instantiation: allintra_vis.c:av1_set_mv_col_limits Unexecuted instantiation: compound_type.c:av1_set_mv_col_limits Unexecuted instantiation: context_tree.c:av1_set_mv_col_limits Unexecuted instantiation: encodeframe.c:av1_set_mv_col_limits Unexecuted instantiation: encodeframe_utils.c:av1_set_mv_col_limits Unexecuted instantiation: encodemb.c:av1_set_mv_col_limits Unexecuted instantiation: encode_strategy.c:av1_set_mv_col_limits Unexecuted instantiation: global_motion.c:av1_set_mv_col_limits Unexecuted instantiation: gop_structure.c:av1_set_mv_col_limits Unexecuted instantiation: interp_search.c:av1_set_mv_col_limits Unexecuted instantiation: motion_search_facade.c:av1_set_mv_col_limits Unexecuted instantiation: partition_search.c:av1_set_mv_col_limits Unexecuted instantiation: partition_strategy.c:av1_set_mv_col_limits Unexecuted instantiation: nonrd_pickmode.c:av1_set_mv_col_limits |
292 | | |
293 | | static INLINE void av1_set_mv_limits( |
294 | | const CommonModeInfoParams *const mi_params, FullMvLimits *mv_limits, |
295 | 0 | int mi_row, int mi_col, int mi_height, int mi_width, int border) { |
296 | 0 | av1_set_mv_row_limits(mi_params, mv_limits, mi_row, mi_height, border); |
297 | 0 | av1_set_mv_col_limits(mi_params, mv_limits, mi_col, mi_width, border); |
298 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_set_mv_limits Unexecuted instantiation: av1_quantize.c:av1_set_mv_limits Unexecuted instantiation: bitstream.c:av1_set_mv_limits Unexecuted instantiation: encodemv.c:av1_set_mv_limits Unexecuted instantiation: encoder.c:av1_set_mv_limits Unexecuted instantiation: encoder_utils.c:av1_set_mv_limits Unexecuted instantiation: encodetxb.c:av1_set_mv_limits Unexecuted instantiation: ethread.c:av1_set_mv_limits Unexecuted instantiation: firstpass.c:av1_set_mv_limits Unexecuted instantiation: global_motion_facade.c:av1_set_mv_limits Unexecuted instantiation: level.c:av1_set_mv_limits Unexecuted instantiation: lookahead.c:av1_set_mv_limits Unexecuted instantiation: mcomp.c:av1_set_mv_limits Unexecuted instantiation: mv_prec.c:av1_set_mv_limits Unexecuted instantiation: palette.c:av1_set_mv_limits Unexecuted instantiation: pass2_strategy.c:av1_set_mv_limits Unexecuted instantiation: pickcdef.c:av1_set_mv_limits Unexecuted instantiation: picklpf.c:av1_set_mv_limits Unexecuted instantiation: pickrst.c:av1_set_mv_limits Unexecuted instantiation: ratectrl.c:av1_set_mv_limits Unexecuted instantiation: rd.c:av1_set_mv_limits Unexecuted instantiation: rdopt.c:av1_set_mv_limits Unexecuted instantiation: segmentation.c:av1_set_mv_limits Unexecuted instantiation: speed_features.c:av1_set_mv_limits Unexecuted instantiation: superres_scale.c:av1_set_mv_limits Unexecuted instantiation: svc_layercontext.c:av1_set_mv_limits Unexecuted instantiation: temporal_filter.c:av1_set_mv_limits Unexecuted instantiation: thirdpass.c:av1_set_mv_limits Unexecuted instantiation: tokenize.c:av1_set_mv_limits Unexecuted instantiation: tpl_model.c:av1_set_mv_limits Unexecuted instantiation: tx_search.c:av1_set_mv_limits Unexecuted instantiation: txb_rdopt.c:av1_set_mv_limits Unexecuted instantiation: intra_mode_search.c:av1_set_mv_limits Unexecuted instantiation: var_based_part.c:av1_set_mv_limits Unexecuted instantiation: av1_noise_estimate.c:av1_set_mv_limits Unexecuted instantiation: aq_complexity.c:av1_set_mv_limits Unexecuted instantiation: aq_cyclicrefresh.c:av1_set_mv_limits Unexecuted instantiation: aq_variance.c:av1_set_mv_limits Unexecuted instantiation: allintra_vis.c:av1_set_mv_limits Unexecuted instantiation: compound_type.c:av1_set_mv_limits Unexecuted instantiation: context_tree.c:av1_set_mv_limits Unexecuted instantiation: encodeframe.c:av1_set_mv_limits Unexecuted instantiation: encodeframe_utils.c:av1_set_mv_limits Unexecuted instantiation: encodemb.c:av1_set_mv_limits Unexecuted instantiation: encode_strategy.c:av1_set_mv_limits Unexecuted instantiation: global_motion.c:av1_set_mv_limits Unexecuted instantiation: gop_structure.c:av1_set_mv_limits Unexecuted instantiation: interp_search.c:av1_set_mv_limits Unexecuted instantiation: motion_search_facade.c:av1_set_mv_limits Unexecuted instantiation: partition_search.c:av1_set_mv_limits Unexecuted instantiation: partition_strategy.c:av1_set_mv_limits Unexecuted instantiation: nonrd_pickmode.c:av1_set_mv_limits |
299 | | |
300 | | void av1_set_mv_search_range(FullMvLimits *mv_limits, const MV *mv); |
301 | | |
302 | | int av1_init_search_range(int size); |
303 | | |
304 | | unsigned int av1_int_pro_motion_estimation(const struct AV1_COMP *cpi, |
305 | | MACROBLOCK *x, BLOCK_SIZE bsize, |
306 | | int mi_row, int mi_col, |
307 | | const MV *ref_mv); |
308 | | |
309 | | int av1_refining_search_8p_c(const FULLPEL_MOTION_SEARCH_PARAMS *ms_params, |
310 | | const FULLPEL_MV start_mv, FULLPEL_MV *best_mv); |
311 | | |
312 | | int av1_full_pixel_search(const FULLPEL_MV start_mv, |
313 | | const FULLPEL_MOTION_SEARCH_PARAMS *ms_params, |
314 | | const int step_param, int *cost_list, |
315 | | FULLPEL_MV *best_mv, FULLPEL_MV *second_best_mv); |
316 | | |
317 | | int av1_intrabc_hash_search(const struct AV1_COMP *cpi, const MACROBLOCKD *xd, |
318 | | const FULLPEL_MOTION_SEARCH_PARAMS *ms_params, |
319 | | IntraBCHashInfo *intrabc_hash_info, |
320 | | FULLPEL_MV *best_mv); |
321 | | |
322 | | int av1_obmc_full_pixel_search(const FULLPEL_MV start_mv, |
323 | | const FULLPEL_MOTION_SEARCH_PARAMS *ms_params, |
324 | | const int step_param, FULLPEL_MV *best_mv); |
325 | | |
326 | | static INLINE int av1_is_fullmv_in_range(const FullMvLimits *mv_limits, |
327 | 0 | FULLPEL_MV mv) { |
328 | 0 | return (mv.col >= mv_limits->col_min) && (mv.col <= mv_limits->col_max) && |
329 | 0 | (mv.row >= mv_limits->row_min) && (mv.row <= mv_limits->row_max); |
330 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_is_fullmv_in_range Unexecuted instantiation: av1_quantize.c:av1_is_fullmv_in_range Unexecuted instantiation: bitstream.c:av1_is_fullmv_in_range Unexecuted instantiation: encodemv.c:av1_is_fullmv_in_range Unexecuted instantiation: encoder.c:av1_is_fullmv_in_range Unexecuted instantiation: encoder_utils.c:av1_is_fullmv_in_range Unexecuted instantiation: encodetxb.c:av1_is_fullmv_in_range Unexecuted instantiation: ethread.c:av1_is_fullmv_in_range Unexecuted instantiation: firstpass.c:av1_is_fullmv_in_range Unexecuted instantiation: global_motion_facade.c:av1_is_fullmv_in_range Unexecuted instantiation: level.c:av1_is_fullmv_in_range Unexecuted instantiation: lookahead.c:av1_is_fullmv_in_range Unexecuted instantiation: mcomp.c:av1_is_fullmv_in_range Unexecuted instantiation: mv_prec.c:av1_is_fullmv_in_range Unexecuted instantiation: palette.c:av1_is_fullmv_in_range Unexecuted instantiation: pass2_strategy.c:av1_is_fullmv_in_range Unexecuted instantiation: pickcdef.c:av1_is_fullmv_in_range Unexecuted instantiation: picklpf.c:av1_is_fullmv_in_range Unexecuted instantiation: pickrst.c:av1_is_fullmv_in_range Unexecuted instantiation: ratectrl.c:av1_is_fullmv_in_range Unexecuted instantiation: rd.c:av1_is_fullmv_in_range Unexecuted instantiation: rdopt.c:av1_is_fullmv_in_range Unexecuted instantiation: segmentation.c:av1_is_fullmv_in_range Unexecuted instantiation: speed_features.c:av1_is_fullmv_in_range Unexecuted instantiation: superres_scale.c:av1_is_fullmv_in_range Unexecuted instantiation: svc_layercontext.c:av1_is_fullmv_in_range Unexecuted instantiation: temporal_filter.c:av1_is_fullmv_in_range Unexecuted instantiation: thirdpass.c:av1_is_fullmv_in_range Unexecuted instantiation: tokenize.c:av1_is_fullmv_in_range Unexecuted instantiation: tpl_model.c:av1_is_fullmv_in_range Unexecuted instantiation: tx_search.c:av1_is_fullmv_in_range Unexecuted instantiation: txb_rdopt.c:av1_is_fullmv_in_range Unexecuted instantiation: intra_mode_search.c:av1_is_fullmv_in_range Unexecuted instantiation: var_based_part.c:av1_is_fullmv_in_range Unexecuted instantiation: av1_noise_estimate.c:av1_is_fullmv_in_range Unexecuted instantiation: aq_complexity.c:av1_is_fullmv_in_range Unexecuted instantiation: aq_cyclicrefresh.c:av1_is_fullmv_in_range Unexecuted instantiation: aq_variance.c:av1_is_fullmv_in_range Unexecuted instantiation: allintra_vis.c:av1_is_fullmv_in_range Unexecuted instantiation: compound_type.c:av1_is_fullmv_in_range Unexecuted instantiation: context_tree.c:av1_is_fullmv_in_range Unexecuted instantiation: encodeframe.c:av1_is_fullmv_in_range Unexecuted instantiation: encodeframe_utils.c:av1_is_fullmv_in_range Unexecuted instantiation: encodemb.c:av1_is_fullmv_in_range Unexecuted instantiation: encode_strategy.c:av1_is_fullmv_in_range Unexecuted instantiation: global_motion.c:av1_is_fullmv_in_range Unexecuted instantiation: gop_structure.c:av1_is_fullmv_in_range Unexecuted instantiation: interp_search.c:av1_is_fullmv_in_range Unexecuted instantiation: motion_search_facade.c:av1_is_fullmv_in_range Unexecuted instantiation: partition_search.c:av1_is_fullmv_in_range Unexecuted instantiation: partition_strategy.c:av1_is_fullmv_in_range Unexecuted instantiation: nonrd_pickmode.c:av1_is_fullmv_in_range |
331 | | // ============================================================================= |
332 | | // Subpixel Motion Search |
333 | | // ============================================================================= |
334 | | enum { |
335 | | EIGHTH_PEL, |
336 | | QUARTER_PEL, |
337 | | HALF_PEL, |
338 | | FULL_PEL |
339 | | } UENUM1BYTE(SUBPEL_FORCE_STOP); |
340 | | |
341 | | typedef struct { |
342 | | const aom_variance_fn_ptr_t *vfp; |
343 | | SUBPEL_SEARCH_TYPE subpel_search_type; |
344 | | // Source and reference buffers |
345 | | MSBuffers ms_buffers; |
346 | | int w, h; |
347 | | } SUBPEL_SEARCH_VAR_PARAMS; |
348 | | |
349 | | // This struct holds subpixel motion search parameters that should be constant |
350 | | // during the search |
351 | | typedef struct { |
352 | | // High level motion search settings |
353 | | int allow_hp; |
354 | | const int *cost_list; |
355 | | SUBPEL_FORCE_STOP forced_stop; |
356 | | int iters_per_step; |
357 | | SubpelMvLimits mv_limits; |
358 | | |
359 | | // For calculating mv cost |
360 | | MV_COST_PARAMS mv_cost_params; |
361 | | |
362 | | // Distortion calculation params |
363 | | SUBPEL_SEARCH_VAR_PARAMS var_params; |
364 | | } SUBPEL_MOTION_SEARCH_PARAMS; |
365 | | |
366 | | void av1_make_default_subpel_ms_params(SUBPEL_MOTION_SEARCH_PARAMS *ms_params, |
367 | | const struct AV1_COMP *cpi, |
368 | | const MACROBLOCK *x, BLOCK_SIZE bsize, |
369 | | const MV *ref_mv, const int *cost_list); |
370 | | |
371 | | typedef int(fractional_mv_step_fp)(MACROBLOCKD *xd, const AV1_COMMON *const cm, |
372 | | const SUBPEL_MOTION_SEARCH_PARAMS *ms_params, |
373 | | MV start_mv, MV *bestmv, int *distortion, |
374 | | unsigned int *sse1, |
375 | | int_mv *last_mv_search_list); |
376 | | |
377 | | extern fractional_mv_step_fp av1_find_best_sub_pixel_tree; |
378 | | extern fractional_mv_step_fp av1_find_best_sub_pixel_tree_pruned; |
379 | | extern fractional_mv_step_fp av1_find_best_sub_pixel_tree_pruned_more; |
380 | | extern fractional_mv_step_fp av1_return_max_sub_pixel_mv; |
381 | | extern fractional_mv_step_fp av1_return_min_sub_pixel_mv; |
382 | | extern fractional_mv_step_fp av1_find_best_obmc_sub_pixel_tree_up; |
383 | | |
384 | | unsigned int av1_refine_warped_mv(MACROBLOCKD *xd, const AV1_COMMON *const cm, |
385 | | const SUBPEL_MOTION_SEARCH_PARAMS *ms_params, |
386 | | BLOCK_SIZE bsize, const int *pts0, |
387 | | const int *pts_inref0, int total_samples); |
388 | | |
389 | 0 | static INLINE void av1_set_fractional_mv(int_mv *fractional_best_mv) { |
390 | 0 | for (int z = 0; z < 3; z++) { |
391 | 0 | fractional_best_mv[z].as_int = INVALID_MV; |
392 | 0 | } |
393 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_set_fractional_mv Unexecuted instantiation: av1_quantize.c:av1_set_fractional_mv Unexecuted instantiation: bitstream.c:av1_set_fractional_mv Unexecuted instantiation: encodemv.c:av1_set_fractional_mv Unexecuted instantiation: encoder.c:av1_set_fractional_mv Unexecuted instantiation: encoder_utils.c:av1_set_fractional_mv Unexecuted instantiation: encodetxb.c:av1_set_fractional_mv Unexecuted instantiation: ethread.c:av1_set_fractional_mv Unexecuted instantiation: firstpass.c:av1_set_fractional_mv Unexecuted instantiation: global_motion_facade.c:av1_set_fractional_mv Unexecuted instantiation: level.c:av1_set_fractional_mv Unexecuted instantiation: lookahead.c:av1_set_fractional_mv Unexecuted instantiation: mcomp.c:av1_set_fractional_mv Unexecuted instantiation: mv_prec.c:av1_set_fractional_mv Unexecuted instantiation: palette.c:av1_set_fractional_mv Unexecuted instantiation: pass2_strategy.c:av1_set_fractional_mv Unexecuted instantiation: pickcdef.c:av1_set_fractional_mv Unexecuted instantiation: picklpf.c:av1_set_fractional_mv Unexecuted instantiation: pickrst.c:av1_set_fractional_mv Unexecuted instantiation: ratectrl.c:av1_set_fractional_mv Unexecuted instantiation: rd.c:av1_set_fractional_mv Unexecuted instantiation: rdopt.c:av1_set_fractional_mv Unexecuted instantiation: segmentation.c:av1_set_fractional_mv Unexecuted instantiation: speed_features.c:av1_set_fractional_mv Unexecuted instantiation: superres_scale.c:av1_set_fractional_mv Unexecuted instantiation: svc_layercontext.c:av1_set_fractional_mv Unexecuted instantiation: temporal_filter.c:av1_set_fractional_mv Unexecuted instantiation: thirdpass.c:av1_set_fractional_mv Unexecuted instantiation: tokenize.c:av1_set_fractional_mv Unexecuted instantiation: tpl_model.c:av1_set_fractional_mv Unexecuted instantiation: tx_search.c:av1_set_fractional_mv Unexecuted instantiation: txb_rdopt.c:av1_set_fractional_mv Unexecuted instantiation: intra_mode_search.c:av1_set_fractional_mv Unexecuted instantiation: var_based_part.c:av1_set_fractional_mv Unexecuted instantiation: av1_noise_estimate.c:av1_set_fractional_mv Unexecuted instantiation: aq_complexity.c:av1_set_fractional_mv Unexecuted instantiation: aq_cyclicrefresh.c:av1_set_fractional_mv Unexecuted instantiation: aq_variance.c:av1_set_fractional_mv Unexecuted instantiation: allintra_vis.c:av1_set_fractional_mv Unexecuted instantiation: compound_type.c:av1_set_fractional_mv Unexecuted instantiation: context_tree.c:av1_set_fractional_mv Unexecuted instantiation: encodeframe.c:av1_set_fractional_mv Unexecuted instantiation: encodeframe_utils.c:av1_set_fractional_mv Unexecuted instantiation: encodemb.c:av1_set_fractional_mv Unexecuted instantiation: encode_strategy.c:av1_set_fractional_mv Unexecuted instantiation: global_motion.c:av1_set_fractional_mv Unexecuted instantiation: gop_structure.c:av1_set_fractional_mv Unexecuted instantiation: interp_search.c:av1_set_fractional_mv Unexecuted instantiation: motion_search_facade.c:av1_set_fractional_mv Unexecuted instantiation: partition_search.c:av1_set_fractional_mv Unexecuted instantiation: partition_strategy.c:av1_set_fractional_mv Unexecuted instantiation: nonrd_pickmode.c:av1_set_fractional_mv |
394 | | |
395 | | static INLINE void av1_set_subpel_mv_search_range(SubpelMvLimits *subpel_limits, |
396 | | const FullMvLimits *mv_limits, |
397 | 0 | const MV *ref_mv) { |
398 | 0 | const int max_mv = GET_MV_SUBPEL(MAX_FULL_PEL_VAL); |
399 | 0 | const int minc = |
400 | 0 | AOMMAX(GET_MV_SUBPEL(mv_limits->col_min), ref_mv->col - max_mv); |
401 | 0 | const int maxc = |
402 | 0 | AOMMIN(GET_MV_SUBPEL(mv_limits->col_max), ref_mv->col + max_mv); |
403 | 0 | const int minr = |
404 | 0 | AOMMAX(GET_MV_SUBPEL(mv_limits->row_min), ref_mv->row - max_mv); |
405 | 0 | const int maxr = |
406 | 0 | AOMMIN(GET_MV_SUBPEL(mv_limits->row_max), ref_mv->row + max_mv); |
407 | |
|
408 | 0 | subpel_limits->col_min = AOMMAX(MV_LOW + 1, minc); |
409 | 0 | subpel_limits->col_max = AOMMIN(MV_UPP - 1, maxc); |
410 | 0 | subpel_limits->row_min = AOMMAX(MV_LOW + 1, minr); |
411 | 0 | subpel_limits->row_max = AOMMIN(MV_UPP - 1, maxr); |
412 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_set_subpel_mv_search_range Unexecuted instantiation: av1_quantize.c:av1_set_subpel_mv_search_range Unexecuted instantiation: bitstream.c:av1_set_subpel_mv_search_range Unexecuted instantiation: encodemv.c:av1_set_subpel_mv_search_range Unexecuted instantiation: encoder.c:av1_set_subpel_mv_search_range Unexecuted instantiation: encoder_utils.c:av1_set_subpel_mv_search_range Unexecuted instantiation: encodetxb.c:av1_set_subpel_mv_search_range Unexecuted instantiation: ethread.c:av1_set_subpel_mv_search_range Unexecuted instantiation: firstpass.c:av1_set_subpel_mv_search_range Unexecuted instantiation: global_motion_facade.c:av1_set_subpel_mv_search_range Unexecuted instantiation: level.c:av1_set_subpel_mv_search_range Unexecuted instantiation: lookahead.c:av1_set_subpel_mv_search_range Unexecuted instantiation: mcomp.c:av1_set_subpel_mv_search_range Unexecuted instantiation: mv_prec.c:av1_set_subpel_mv_search_range Unexecuted instantiation: palette.c:av1_set_subpel_mv_search_range Unexecuted instantiation: pass2_strategy.c:av1_set_subpel_mv_search_range Unexecuted instantiation: pickcdef.c:av1_set_subpel_mv_search_range Unexecuted instantiation: picklpf.c:av1_set_subpel_mv_search_range Unexecuted instantiation: pickrst.c:av1_set_subpel_mv_search_range Unexecuted instantiation: ratectrl.c:av1_set_subpel_mv_search_range Unexecuted instantiation: rd.c:av1_set_subpel_mv_search_range Unexecuted instantiation: rdopt.c:av1_set_subpel_mv_search_range Unexecuted instantiation: segmentation.c:av1_set_subpel_mv_search_range Unexecuted instantiation: speed_features.c:av1_set_subpel_mv_search_range Unexecuted instantiation: superres_scale.c:av1_set_subpel_mv_search_range Unexecuted instantiation: svc_layercontext.c:av1_set_subpel_mv_search_range Unexecuted instantiation: temporal_filter.c:av1_set_subpel_mv_search_range Unexecuted instantiation: thirdpass.c:av1_set_subpel_mv_search_range Unexecuted instantiation: tokenize.c:av1_set_subpel_mv_search_range Unexecuted instantiation: tpl_model.c:av1_set_subpel_mv_search_range Unexecuted instantiation: tx_search.c:av1_set_subpel_mv_search_range Unexecuted instantiation: txb_rdopt.c:av1_set_subpel_mv_search_range Unexecuted instantiation: intra_mode_search.c:av1_set_subpel_mv_search_range Unexecuted instantiation: var_based_part.c:av1_set_subpel_mv_search_range Unexecuted instantiation: av1_noise_estimate.c:av1_set_subpel_mv_search_range Unexecuted instantiation: aq_complexity.c:av1_set_subpel_mv_search_range Unexecuted instantiation: aq_cyclicrefresh.c:av1_set_subpel_mv_search_range Unexecuted instantiation: aq_variance.c:av1_set_subpel_mv_search_range Unexecuted instantiation: allintra_vis.c:av1_set_subpel_mv_search_range Unexecuted instantiation: compound_type.c:av1_set_subpel_mv_search_range Unexecuted instantiation: context_tree.c:av1_set_subpel_mv_search_range Unexecuted instantiation: encodeframe.c:av1_set_subpel_mv_search_range Unexecuted instantiation: encodeframe_utils.c:av1_set_subpel_mv_search_range Unexecuted instantiation: encodemb.c:av1_set_subpel_mv_search_range Unexecuted instantiation: encode_strategy.c:av1_set_subpel_mv_search_range Unexecuted instantiation: global_motion.c:av1_set_subpel_mv_search_range Unexecuted instantiation: gop_structure.c:av1_set_subpel_mv_search_range Unexecuted instantiation: interp_search.c:av1_set_subpel_mv_search_range Unexecuted instantiation: motion_search_facade.c:av1_set_subpel_mv_search_range Unexecuted instantiation: partition_search.c:av1_set_subpel_mv_search_range Unexecuted instantiation: partition_strategy.c:av1_set_subpel_mv_search_range Unexecuted instantiation: nonrd_pickmode.c:av1_set_subpel_mv_search_range |
413 | | |
414 | | static INLINE int av1_is_subpelmv_in_range(const SubpelMvLimits *mv_limits, |
415 | 0 | MV mv) { |
416 | 0 | return (mv.col >= mv_limits->col_min) && (mv.col <= mv_limits->col_max) && |
417 | 0 | (mv.row >= mv_limits->row_min) && (mv.row <= mv_limits->row_max); |
418 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_is_subpelmv_in_range Unexecuted instantiation: av1_quantize.c:av1_is_subpelmv_in_range Unexecuted instantiation: bitstream.c:av1_is_subpelmv_in_range Unexecuted instantiation: encodemv.c:av1_is_subpelmv_in_range Unexecuted instantiation: encoder.c:av1_is_subpelmv_in_range Unexecuted instantiation: encoder_utils.c:av1_is_subpelmv_in_range Unexecuted instantiation: encodetxb.c:av1_is_subpelmv_in_range Unexecuted instantiation: ethread.c:av1_is_subpelmv_in_range Unexecuted instantiation: firstpass.c:av1_is_subpelmv_in_range Unexecuted instantiation: global_motion_facade.c:av1_is_subpelmv_in_range Unexecuted instantiation: level.c:av1_is_subpelmv_in_range Unexecuted instantiation: lookahead.c:av1_is_subpelmv_in_range Unexecuted instantiation: mcomp.c:av1_is_subpelmv_in_range Unexecuted instantiation: mv_prec.c:av1_is_subpelmv_in_range Unexecuted instantiation: palette.c:av1_is_subpelmv_in_range Unexecuted instantiation: pass2_strategy.c:av1_is_subpelmv_in_range Unexecuted instantiation: pickcdef.c:av1_is_subpelmv_in_range Unexecuted instantiation: picklpf.c:av1_is_subpelmv_in_range Unexecuted instantiation: pickrst.c:av1_is_subpelmv_in_range Unexecuted instantiation: ratectrl.c:av1_is_subpelmv_in_range Unexecuted instantiation: rd.c:av1_is_subpelmv_in_range Unexecuted instantiation: rdopt.c:av1_is_subpelmv_in_range Unexecuted instantiation: segmentation.c:av1_is_subpelmv_in_range Unexecuted instantiation: speed_features.c:av1_is_subpelmv_in_range Unexecuted instantiation: superres_scale.c:av1_is_subpelmv_in_range Unexecuted instantiation: svc_layercontext.c:av1_is_subpelmv_in_range Unexecuted instantiation: temporal_filter.c:av1_is_subpelmv_in_range Unexecuted instantiation: thirdpass.c:av1_is_subpelmv_in_range Unexecuted instantiation: tokenize.c:av1_is_subpelmv_in_range Unexecuted instantiation: tpl_model.c:av1_is_subpelmv_in_range Unexecuted instantiation: tx_search.c:av1_is_subpelmv_in_range Unexecuted instantiation: txb_rdopt.c:av1_is_subpelmv_in_range Unexecuted instantiation: intra_mode_search.c:av1_is_subpelmv_in_range Unexecuted instantiation: var_based_part.c:av1_is_subpelmv_in_range Unexecuted instantiation: av1_noise_estimate.c:av1_is_subpelmv_in_range Unexecuted instantiation: aq_complexity.c:av1_is_subpelmv_in_range Unexecuted instantiation: aq_cyclicrefresh.c:av1_is_subpelmv_in_range Unexecuted instantiation: aq_variance.c:av1_is_subpelmv_in_range Unexecuted instantiation: allintra_vis.c:av1_is_subpelmv_in_range Unexecuted instantiation: compound_type.c:av1_is_subpelmv_in_range Unexecuted instantiation: context_tree.c:av1_is_subpelmv_in_range Unexecuted instantiation: encodeframe.c:av1_is_subpelmv_in_range Unexecuted instantiation: encodeframe_utils.c:av1_is_subpelmv_in_range Unexecuted instantiation: encodemb.c:av1_is_subpelmv_in_range Unexecuted instantiation: encode_strategy.c:av1_is_subpelmv_in_range Unexecuted instantiation: global_motion.c:av1_is_subpelmv_in_range Unexecuted instantiation: gop_structure.c:av1_is_subpelmv_in_range Unexecuted instantiation: interp_search.c:av1_is_subpelmv_in_range Unexecuted instantiation: motion_search_facade.c:av1_is_subpelmv_in_range Unexecuted instantiation: partition_search.c:av1_is_subpelmv_in_range Unexecuted instantiation: partition_strategy.c:av1_is_subpelmv_in_range Unexecuted instantiation: nonrd_pickmode.c:av1_is_subpelmv_in_range |
419 | | |
420 | | #ifdef __cplusplus |
421 | | } // extern "C" |
422 | | #endif |
423 | | |
424 | | #endif // AOM_AV1_ENCODER_MCOMP_H_ |