/src/aom/av1/common/warped_motion.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_COMMON_WARPED_MOTION_H_ |
13 | | #define AOM_AV1_COMMON_WARPED_MOTION_H_ |
14 | | |
15 | | #include <stdio.h> |
16 | | #include <stdlib.h> |
17 | | #include <memory.h> |
18 | | #include <math.h> |
19 | | #include <assert.h> |
20 | | |
21 | | #include "config/aom_config.h" |
22 | | |
23 | | #include "aom_ports/mem.h" |
24 | | #include "aom_dsp/aom_dsp_common.h" |
25 | | #include "av1/common/mv.h" |
26 | | #include "av1/common/convolve.h" |
27 | | |
28 | 0 | #define MAX_PARAMDIM 9 |
29 | 0 | #define LEAST_SQUARES_SAMPLES_MAX_BITS 3 |
30 | 0 | #define LEAST_SQUARES_SAMPLES_MAX (1 << LEAST_SQUARES_SAMPLES_MAX_BITS) |
31 | | #define SAMPLES_ARRAY_SIZE (LEAST_SQUARES_SAMPLES_MAX * 2) |
32 | | #define WARPED_MOTION_DEBUG 0 |
33 | 0 | #define DEFAULT_WMTYPE AFFINE |
34 | 0 | #define WARP_ERROR_BLOCK_LOG 5 |
35 | 0 | #define WARP_ERROR_BLOCK (1 << WARP_ERROR_BLOCK_LOG) |
36 | | |
37 | | extern const int16_t av1_warped_filter[WARPEDPIXEL_PREC_SHIFTS * 3 + 1][8]; |
38 | | |
39 | | DECLARE_ALIGNED(8, extern const int8_t, |
40 | | av1_filter_8bit[WARPEDPIXEL_PREC_SHIFTS * 3 + 1][8]); |
41 | | |
42 | | /* clang-format off */ |
43 | | static const int error_measure_lut[512] = { |
44 | | // pow 0.7 |
45 | | 16384, 16339, 16294, 16249, 16204, 16158, 16113, 16068, |
46 | | 16022, 15977, 15932, 15886, 15840, 15795, 15749, 15703, |
47 | | 15657, 15612, 15566, 15520, 15474, 15427, 15381, 15335, |
48 | | 15289, 15242, 15196, 15149, 15103, 15056, 15010, 14963, |
49 | | 14916, 14869, 14822, 14775, 14728, 14681, 14634, 14587, |
50 | | 14539, 14492, 14445, 14397, 14350, 14302, 14254, 14206, |
51 | | 14159, 14111, 14063, 14015, 13967, 13918, 13870, 13822, |
52 | | 13773, 13725, 13676, 13628, 13579, 13530, 13481, 13432, |
53 | | 13383, 13334, 13285, 13236, 13187, 13137, 13088, 13038, |
54 | | 12988, 12939, 12889, 12839, 12789, 12739, 12689, 12639, |
55 | | 12588, 12538, 12487, 12437, 12386, 12335, 12285, 12234, |
56 | | 12183, 12132, 12080, 12029, 11978, 11926, 11875, 11823, |
57 | | 11771, 11719, 11667, 11615, 11563, 11511, 11458, 11406, |
58 | | 11353, 11301, 11248, 11195, 11142, 11089, 11036, 10982, |
59 | | 10929, 10875, 10822, 10768, 10714, 10660, 10606, 10552, |
60 | | 10497, 10443, 10388, 10333, 10279, 10224, 10168, 10113, |
61 | | 10058, 10002, 9947, 9891, 9835, 9779, 9723, 9666, |
62 | | 9610, 9553, 9497, 9440, 9383, 9326, 9268, 9211, |
63 | | 9153, 9095, 9037, 8979, 8921, 8862, 8804, 8745, |
64 | | 8686, 8627, 8568, 8508, 8449, 8389, 8329, 8269, |
65 | | 8208, 8148, 8087, 8026, 7965, 7903, 7842, 7780, |
66 | | 7718, 7656, 7593, 7531, 7468, 7405, 7341, 7278, |
67 | | 7214, 7150, 7086, 7021, 6956, 6891, 6826, 6760, |
68 | | 6695, 6628, 6562, 6495, 6428, 6361, 6293, 6225, |
69 | | 6157, 6089, 6020, 5950, 5881, 5811, 5741, 5670, |
70 | | 5599, 5527, 5456, 5383, 5311, 5237, 5164, 5090, |
71 | | 5015, 4941, 4865, 4789, 4713, 4636, 4558, 4480, |
72 | | 4401, 4322, 4242, 4162, 4080, 3998, 3916, 3832, |
73 | | 3748, 3663, 3577, 3490, 3402, 3314, 3224, 3133, |
74 | | 3041, 2948, 2854, 2758, 2661, 2562, 2461, 2359, |
75 | | 2255, 2148, 2040, 1929, 1815, 1698, 1577, 1452, |
76 | | 1323, 1187, 1045, 894, 731, 550, 339, 0, |
77 | | 339, 550, 731, 894, 1045, 1187, 1323, 1452, |
78 | | 1577, 1698, 1815, 1929, 2040, 2148, 2255, 2359, |
79 | | 2461, 2562, 2661, 2758, 2854, 2948, 3041, 3133, |
80 | | 3224, 3314, 3402, 3490, 3577, 3663, 3748, 3832, |
81 | | 3916, 3998, 4080, 4162, 4242, 4322, 4401, 4480, |
82 | | 4558, 4636, 4713, 4789, 4865, 4941, 5015, 5090, |
83 | | 5164, 5237, 5311, 5383, 5456, 5527, 5599, 5670, |
84 | | 5741, 5811, 5881, 5950, 6020, 6089, 6157, 6225, |
85 | | 6293, 6361, 6428, 6495, 6562, 6628, 6695, 6760, |
86 | | 6826, 6891, 6956, 7021, 7086, 7150, 7214, 7278, |
87 | | 7341, 7405, 7468, 7531, 7593, 7656, 7718, 7780, |
88 | | 7842, 7903, 7965, 8026, 8087, 8148, 8208, 8269, |
89 | | 8329, 8389, 8449, 8508, 8568, 8627, 8686, 8745, |
90 | | 8804, 8862, 8921, 8979, 9037, 9095, 9153, 9211, |
91 | | 9268, 9326, 9383, 9440, 9497, 9553, 9610, 9666, |
92 | | 9723, 9779, 9835, 9891, 9947, 10002, 10058, 10113, |
93 | | 10168, 10224, 10279, 10333, 10388, 10443, 10497, 10552, |
94 | | 10606, 10660, 10714, 10768, 10822, 10875, 10929, 10982, |
95 | | 11036, 11089, 11142, 11195, 11248, 11301, 11353, 11406, |
96 | | 11458, 11511, 11563, 11615, 11667, 11719, 11771, 11823, |
97 | | 11875, 11926, 11978, 12029, 12080, 12132, 12183, 12234, |
98 | | 12285, 12335, 12386, 12437, 12487, 12538, 12588, 12639, |
99 | | 12689, 12739, 12789, 12839, 12889, 12939, 12988, 13038, |
100 | | 13088, 13137, 13187, 13236, 13285, 13334, 13383, 13432, |
101 | | 13481, 13530, 13579, 13628, 13676, 13725, 13773, 13822, |
102 | | 13870, 13918, 13967, 14015, 14063, 14111, 14159, 14206, |
103 | | 14254, 14302, 14350, 14397, 14445, 14492, 14539, 14587, |
104 | | 14634, 14681, 14728, 14775, 14822, 14869, 14916, 14963, |
105 | | 15010, 15056, 15103, 15149, 15196, 15242, 15289, 15335, |
106 | | 15381, 15427, 15474, 15520, 15566, 15612, 15657, 15703, |
107 | | 15749, 15795, 15840, 15886, 15932, 15977, 16022, 16068, |
108 | | 16113, 16158, 16204, 16249, 16294, 16339, 16384, 16384, |
109 | | }; |
110 | | /* clang-format on */ |
111 | | |
112 | | static const uint8_t warp_pad_left[14][16] = { |
113 | | { 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, |
114 | | { 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, |
115 | | { 3, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, |
116 | | { 4, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, |
117 | | { 5, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, |
118 | | { 6, 6, 6, 6, 6, 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, |
119 | | { 7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, |
120 | | { 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 10, 11, 12, 13, 14, 15 }, |
121 | | { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 11, 12, 13, 14, 15 }, |
122 | | { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12, 13, 14, 15 }, |
123 | | { 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, 15 }, |
124 | | { 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, 15 }, |
125 | | { 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 15 }, |
126 | | { 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15 }, |
127 | | }; |
128 | | |
129 | | static const uint8_t warp_pad_right[14][16] = { |
130 | | { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14 }, |
131 | | { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13 }, |
132 | | { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 12, 12 }, |
133 | | { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 11, 11, 11 }, |
134 | | { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 10, 10 }, |
135 | | { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 9, 9 }, |
136 | | { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8 }, |
137 | | { 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, |
138 | | { 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 }, |
139 | | { 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }, |
140 | | { 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }, |
141 | | { 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, |
142 | | { 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, |
143 | | { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } |
144 | | }; |
145 | | |
146 | 0 | static INLINE int error_measure(int err) { |
147 | 0 | return error_measure_lut[255 + err]; |
148 | 0 | } Unexecuted instantiation: decodeframe.c:error_measure Unexecuted instantiation: decodemv.c:error_measure Unexecuted instantiation: decoder.c:error_measure Unexecuted instantiation: av1_cx_iface.c:error_measure Unexecuted instantiation: av1_quantize.c:error_measure Unexecuted instantiation: bitstream.c:error_measure Unexecuted instantiation: encodemv.c:error_measure Unexecuted instantiation: encoder.c:error_measure Unexecuted instantiation: encoder_utils.c:error_measure Unexecuted instantiation: encodetxb.c:error_measure Unexecuted instantiation: ethread.c:error_measure Unexecuted instantiation: firstpass.c:error_measure Unexecuted instantiation: global_motion_facade.c:error_measure Unexecuted instantiation: level.c:error_measure Unexecuted instantiation: lookahead.c:error_measure Unexecuted instantiation: mcomp.c:error_measure Unexecuted instantiation: mv_prec.c:error_measure Unexecuted instantiation: palette.c:error_measure Unexecuted instantiation: pass2_strategy.c:error_measure Unexecuted instantiation: pickcdef.c:error_measure Unexecuted instantiation: picklpf.c:error_measure Unexecuted instantiation: pickrst.c:error_measure Unexecuted instantiation: ratectrl.c:error_measure Unexecuted instantiation: rd.c:error_measure Unexecuted instantiation: rdopt.c:error_measure Unexecuted instantiation: reconinter_enc.c:error_measure Unexecuted instantiation: segmentation.c:error_measure Unexecuted instantiation: speed_features.c:error_measure Unexecuted instantiation: superres_scale.c:error_measure Unexecuted instantiation: svc_layercontext.c:error_measure Unexecuted instantiation: temporal_filter.c:error_measure Unexecuted instantiation: thirdpass.c:error_measure Unexecuted instantiation: tokenize.c:error_measure Unexecuted instantiation: tpl_model.c:error_measure Unexecuted instantiation: tx_search.c:error_measure Unexecuted instantiation: txb_rdopt.c:error_measure Unexecuted instantiation: intra_mode_search.c:error_measure Unexecuted instantiation: var_based_part.c:error_measure Unexecuted instantiation: av1_noise_estimate.c:error_measure Unexecuted instantiation: variance.c:error_measure Unexecuted instantiation: av1_loopfilter.c:error_measure Unexecuted instantiation: cdef.c:error_measure Unexecuted instantiation: entropymode.c:error_measure Unexecuted instantiation: mvref_common.c:error_measure Unexecuted instantiation: pred_common.c:error_measure Unexecuted instantiation: reconinter.c:error_measure Unexecuted instantiation: thread_common.c:error_measure Unexecuted instantiation: warped_motion.c:error_measure Unexecuted instantiation: aq_complexity.c:error_measure Unexecuted instantiation: aq_cyclicrefresh.c:error_measure Unexecuted instantiation: aq_variance.c:error_measure Unexecuted instantiation: allintra_vis.c:error_measure Unexecuted instantiation: compound_type.c:error_measure Unexecuted instantiation: context_tree.c:error_measure Unexecuted instantiation: encodeframe.c:error_measure Unexecuted instantiation: encodeframe_utils.c:error_measure Unexecuted instantiation: encodemb.c:error_measure Unexecuted instantiation: encode_strategy.c:error_measure Unexecuted instantiation: global_motion.c:error_measure Unexecuted instantiation: gop_structure.c:error_measure Unexecuted instantiation: interp_search.c:error_measure Unexecuted instantiation: motion_search_facade.c:error_measure Unexecuted instantiation: partition_search.c:error_measure Unexecuted instantiation: partition_strategy.c:error_measure Unexecuted instantiation: ransac.c:error_measure Unexecuted instantiation: nonrd_pickmode.c:error_measure Unexecuted instantiation: wedge_utils.c:error_measure |
149 | | |
150 | | // Returns the error between the frame described by 'ref' and the frame |
151 | | // described by 'dst'. |
152 | | int64_t av1_frame_error(int use_hbd, int bd, const uint8_t *ref, int stride, |
153 | | uint8_t *dst, int p_width, int p_height, int p_stride); |
154 | | |
155 | | int64_t av1_segmented_frame_error(int use_hbd, int bd, const uint8_t *ref, |
156 | | int stride, uint8_t *dst, int p_width, |
157 | | int p_height, int p_stride, |
158 | | uint8_t *segment_map, int segment_map_stride); |
159 | | |
160 | | int64_t av1_calc_highbd_frame_error(const uint16_t *const ref, int stride, |
161 | | const uint16_t *const dst, int p_width, |
162 | | int p_height, int p_stride, int bd); |
163 | | |
164 | | void highbd_warp_plane(WarpedMotionParams *wm, const uint16_t *const ref, |
165 | | int width, int height, int stride, uint16_t *const pred, |
166 | | int p_col, int p_row, int p_width, int p_height, |
167 | | int p_stride, int subsampling_x, int subsampling_y, |
168 | | int bd, ConvolveParams *conv_params); |
169 | | |
170 | | void warp_plane(WarpedMotionParams *wm, const uint8_t *const ref, int width, |
171 | | int height, int stride, uint8_t *pred, int p_col, int p_row, |
172 | | int p_width, int p_height, int p_stride, int subsampling_x, |
173 | | int subsampling_y, ConvolveParams *conv_params); |
174 | | |
175 | | void av1_warp_plane(WarpedMotionParams *wm, int use_hbd, int bd, |
176 | | const uint8_t *ref, int width, int height, int stride, |
177 | | uint8_t *pred, int p_col, int p_row, int p_width, |
178 | | int p_height, int p_stride, int subsampling_x, |
179 | | int subsampling_y, ConvolveParams *conv_params); |
180 | | |
181 | | int av1_find_projection(int np, const int *pts1, const int *pts2, |
182 | | BLOCK_SIZE bsize, int mvy, int mvx, |
183 | | WarpedMotionParams *wm_params, int mi_row, int mi_col); |
184 | | |
185 | | int av1_get_shear_params(WarpedMotionParams *wm); |
186 | | #endif // AOM_AV1_COMMON_WARPED_MOTION_H_ |