/work/svt-av1/Source/Lib/Codec/noise_model.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2017, 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 https://www.aomedia.org/license/software-license. 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 https://www.aomedia.org/license/patent-license. |
10 | | */ |
11 | | |
12 | | #ifndef AOM_AOM_DSP_NOISE_MODEL_H_ |
13 | | #define AOM_AOM_DSP_NOISE_MODEL_H_ |
14 | | |
15 | | #include "EbConfigMacros.h" |
16 | | |
17 | | #if CONFIG_ENABLE_FILM_GRAIN |
18 | | |
19 | | #ifdef __cplusplus |
20 | | extern "C" { |
21 | | #endif // __cplusplus |
22 | | |
23 | | #include <stdint.h> |
24 | | #include "grainSynthesis.h" |
25 | | #include "pic_buffer_desc.h" |
26 | | #include "object.h" |
27 | | |
28 | | /*!\brief Wrapper of data required to represent linear system of eqns and soln. |
29 | | */ |
30 | | typedef struct { |
31 | | double* A; |
32 | | double* b; |
33 | | double* x; |
34 | | int32_t n; |
35 | | } AomEquationSystem; |
36 | | |
37 | | /*!\brief Representation of a piecewise linear curve |
38 | | * |
39 | | * Holds n points as (x, y) pairs, that store the curve. |
40 | | */ |
41 | | typedef struct { |
42 | | double (*points)[2]; |
43 | | int32_t num_points; |
44 | | } AomNoiseStrengthLut; |
45 | | |
46 | | /*!\brief Init the noise strength lut with the given number of points*/ |
47 | | int32_t svt_aom_noise_strength_lut_init(AomNoiseStrengthLut* lut, int32_t num_points); |
48 | | |
49 | | /*!\brief Frees the noise strength lut. */ |
50 | | void svt_aom_noise_strength_lut_free(AomNoiseStrengthLut* lut); |
51 | | |
52 | | /*!\brief Helper struct to model noise strength as a function of intensity. |
53 | | * |
54 | | * Internally, this structure holds a representation of a linear system |
55 | | * of equations that models noise strength (standard deviation) as a |
56 | | * function of intensity. The mapping is initially stored using a |
57 | | * piecewise representation with evenly spaced bins that cover the entire |
58 | | * domain from [min_intensity, max_intensity]. Each observation (x,y) gives a |
59 | | * constraint of the form: |
60 | | * y_{i} (1 - a) + y_{i+1} a = y |
61 | | * where y_{i} is the value of bin i and x_{i} <= x <= x_{i+1} and |
62 | | * a = x/(x_{i+1} - x{i}). The equation system holds the corresponding |
63 | | * normal equations. |
64 | | * |
65 | | * As there may be missing data, the solution is regularized to get a |
66 | | * complete set of values for the bins. A reduced representation after |
67 | | * solving can be obtained by getting the corresponding noise_strength_lut_t. |
68 | | */ |
69 | | typedef struct { |
70 | | AomEquationSystem eqns; |
71 | | double min_intensity; |
72 | | double max_intensity; |
73 | | int32_t num_bins; |
74 | | int32_t num_equations; |
75 | | double total; |
76 | | } AomNoiseStrengthSolver; |
77 | | |
78 | | /*!\brief Initializes the noise solver with the given number of bins. |
79 | | * |
80 | | * Returns 0 if initialization fails. |
81 | | * |
82 | | * \param[in] solver The noise solver to be initialized. |
83 | | * \param[in] num_bins Number of bins to use in the internal representation. |
84 | | * \param[in] bit_depth The bit depth used to derive {min,max}_intensity. |
85 | | */ |
86 | | int32_t svt_aom_noise_strength_solver_init(AomNoiseStrengthSolver* solver, int32_t num_bins, int32_t bit_depth); |
87 | | /*!\brief Gets the x coordinate of bin i. |
88 | | * |
89 | | * \param[in] i The bin whose coordinate to query. |
90 | | */ |
91 | | double svt_aom_noise_strength_solver_get_center(const AomNoiseStrengthSolver* solver, int32_t i); |
92 | | |
93 | | /*!\brief Add an observation of the block mean intensity to its noise strength. |
94 | | * |
95 | | * \param[in] block_mean The average block intensity, |
96 | | * \param[in] noise_std The observed noise strength. |
97 | | */ |
98 | | void svt_aom_noise_strength_solver_add_measurement(AomNoiseStrengthSolver* solver, double block_mean, double noise_std); |
99 | | |
100 | | /*!\brief Solves the current set of equations for the noise strength. */ |
101 | | int32_t svt_aom_noise_strength_solver_solve(AomNoiseStrengthSolver* solver); |
102 | | |
103 | | /*!\brief Fits a reduced piecewise linear lut to the internal solution |
104 | | * |
105 | | * \param[in] max_num_points The maximum number of output points |
106 | | * \param[out] lut The output piecewise linear lut. |
107 | | */ |
108 | | int32_t svt_aom_noise_strength_solver_fit_piecewise(const AomNoiseStrengthSolver* solver, int32_t max_num_points, |
109 | | AomNoiseStrengthLut* lut); |
110 | | |
111 | | /*!\brief Helper for holding precomputed data for finding flat blocks. |
112 | | * |
113 | | * Internally a block is modeled with a low-order polynomial model. A |
114 | | * planar model would be a bunch of equations like: |
115 | | * <[y_i x_i 1], [a_1, a_2, a_3]> = b_i |
116 | | * for each point in the block. The system matrix A with row i as [y_i x_i 1] |
117 | | * is maintained as is the inverse, inv(A'*A), so that the plane parameters |
118 | | * can be fit for each block. |
119 | | */ |
120 | | typedef struct { |
121 | | double* at_a_inv; |
122 | | double* A; |
123 | | int32_t num_params; // The number of parameters used for internal low-order model |
124 | | int32_t block_size; // The block size the finder was initialized with |
125 | | double normalization; // Normalization factor (1 / (2^(bit_depth) - 1)) |
126 | | int32_t use_highbd; // Whether input data should be interpreted as uint16 |
127 | | } AomFlatBlockFinder; |
128 | | |
129 | | /*!\brief Init the block_finder with the given block size, bit_depth */ |
130 | | int32_t svt_aom_flat_block_finder_init(AomFlatBlockFinder* block_finder, int32_t block_size, int32_t bit_depth, |
131 | | int32_t use_highbd); |
132 | | void svt_aom_flat_block_finder_free(AomFlatBlockFinder* block_finder); |
133 | | |
134 | | /*!\brief Helper to extract a block and low order "planar" model. */ |
135 | | void svt_aom_flat_block_finder_extract_block_c(const AomFlatBlockFinder* block_finder, const uint8_t* const data, |
136 | | int32_t w, int32_t h, int32_t stride, int32_t offsx, int32_t offsy, |
137 | | double* plane, double* block); |
138 | | |
139 | | /*!\brief Runs the flat block finder on the input data. |
140 | | * |
141 | | * Find flat blocks in the input image data. Returns a map of |
142 | | * flat_blocks, where the value of flat_blocks map will be non-zero |
143 | | * when a block is determined to be flat. A higher value indicates a bigger |
144 | | * confidence in the decision. |
145 | | */ |
146 | | int32_t svt_aom_flat_block_finder_run(const AomFlatBlockFinder* block_finder, const uint8_t* const data, int32_t w, |
147 | | int32_t h, int32_t stride, uint8_t* flat_blocks); |
148 | | |
149 | | // The noise shape indicates the allowed coefficients in the AR model. |
150 | | typedef enum { AOM_NOISE_SHAPE_DIAMOND = 0, AOM_NOISE_SHAPE_SQUARE = 1 } AomNoiseShape; |
151 | | |
152 | | // The parameters of the noise model include the shape type, lag, the |
153 | | // bit depth of the input images provided, and whether the input images |
154 | | // will be using uint16 (or uint8) representation. |
155 | | typedef struct { |
156 | | AomNoiseShape shape; |
157 | | int32_t lag; |
158 | | int32_t bit_depth; |
159 | | int32_t use_highbd; |
160 | | } AomNoiseModelParams; |
161 | | |
162 | | /*!\brief State of a noise model estimate for a single channel. |
163 | | * |
164 | | * This contains a system of equations that can be used to solve |
165 | | * for the auto-regressive coefficients as well as a noise strength |
166 | | * solver that can be used to model noise strength as a function of |
167 | | * intensity. |
168 | | */ |
169 | | typedef struct { |
170 | | AomEquationSystem eqns; |
171 | | AomNoiseStrengthSolver strength_solver; |
172 | | int32_t num_observations; // The number of observations in the eqn system |
173 | | double ar_gain; // The gain of the current AR filter |
174 | | } AomNoiseState; |
175 | | |
176 | | /*!\brief Complete model of noise for a planar video |
177 | | * |
178 | | * This includes a noise model for the latest frame and an aggregated |
179 | | * estimate over all previous frames that had similar parameters. |
180 | | */ |
181 | | typedef struct { |
182 | | AomNoiseModelParams params; |
183 | | AomNoiseState combined_state[3]; // Combined state per channel |
184 | | AomNoiseState latest_state[3]; // Latest state per channel |
185 | | int32_t (*coords)[2]; // Offsets (x,y) of the coefficient samples |
186 | | int32_t n; // Number of parameters (size of coords) |
187 | | int32_t bit_depth; |
188 | | } AomNoiseModel; |
189 | | |
190 | | /*!\brief Result of a noise model update. */ |
191 | | typedef enum { |
192 | | AOM_NOISE_STATUS_OK = 0, |
193 | | AOM_NOISE_STATUS_INVALID_ARGUMENT, |
194 | | AOM_NOISE_STATUS_INSUFFICIENT_FLAT_BLOCKS, |
195 | | AOM_NOISE_STATUS_DIFFERENT_NOISE_TYPE, |
196 | | AOM_NOISE_STATUS_INTERNAL_ERROR, |
197 | | AOM_NOISE_STATUS_INSUFFICIENT_NOISE_PIXELS, |
198 | | } AomNoiseStatus; |
199 | | |
200 | | /************************************ |
201 | | * DenoiseAndModelInitData |
202 | | ************************************/ |
203 | | typedef struct DenoiseAndModelInitData { |
204 | | uint16_t noise_level; |
205 | | uint32_t encoder_bit_depth; |
206 | | uint32_t encoder_color_format; |
207 | | |
208 | | uint16_t width; |
209 | | uint16_t height; |
210 | | uint16_t y_stride; |
211 | | uint16_t u_stride; |
212 | | uint16_t v_stride; |
213 | | uint8_t denoise_apply; |
214 | | bool adaptive_film_grain; |
215 | | } DenoiseAndModelInitData; |
216 | | |
217 | | typedef struct AomDenoiseAndModel { |
218 | | EbDctor dctor; |
219 | | int32_t block_size; |
220 | | int32_t bit_depth; |
221 | | float noise_level; |
222 | | |
223 | | // Size of current denoised buffer and flat_block buffer |
224 | | int32_t width; |
225 | | int32_t height; |
226 | | int32_t y_stride; |
227 | | int32_t uv_stride; |
228 | | int32_t num_blocks_w; |
229 | | int32_t num_blocks_h; |
230 | | |
231 | | // Buffers for image and noise_psd allocated on the fly |
232 | | float noise_psd[3]; |
233 | | uint8_t* denoised[3]; |
234 | | uint8_t* flat_blocks; |
235 | | uint16_t* packed[3]; |
236 | | EbPictureBufferDesc* denoised_pic; |
237 | | EbPictureBufferDesc* packed_pic; |
238 | | |
239 | | AomFlatBlockFinder flat_block_finder; |
240 | | AomNoiseModel noise_model; |
241 | | uint8_t denoise_apply; |
242 | | } AomDenoiseAndModel; |
243 | | |
244 | | /************************************ |
245 | | * denoise and model constructor |
246 | | ************************************/ |
247 | | EbErrorType svt_aom_denoise_and_model_ctor(AomDenoiseAndModel* object_ptr, EbPtr object_init_data_ptr); |
248 | | |
249 | | /*!\brief Initializes a noise model with the given parameters. |
250 | | * |
251 | | * Returns 0 on failure. |
252 | | */ |
253 | | int32_t svt_aom_noise_model_init(AomNoiseModel* model, const AomNoiseModelParams params); |
254 | | void svt_aom_noise_model_free(AomNoiseModel* model); |
255 | | |
256 | | /*\brief Save the "latest" estimate into the "combined" estimate. |
257 | | * |
258 | | * This is meant to be called when the noise modeling detected a change |
259 | | * in parameters (or for example, if a user wanted to reset estimation at |
260 | | * a shot boundary). |
261 | | */ |
262 | | void svt_aom_noise_model_save_latest(AomNoiseModel* noise_model); |
263 | | |
264 | | /*!\brief Converts the noise_model parameters to the corresponding |
265 | | * grain_parameters. |
266 | | * |
267 | | * The noise structs in this file are suitable for estimation (e.g., using |
268 | | * floats), but the grain parameters in the Bitstream are quantized. This |
269 | | * function does the conversion by selecting the correct quantization levels. |
270 | | */ |
271 | | int32_t svt_aom_noise_model_get_grain_parameters(AomNoiseModel* const noise_model, AomFilmGrain* film_grain); |
272 | | |
273 | | /*!\brief Perform a Wiener filter denoising in 2D using the provided noise psd. |
274 | | * |
275 | | * \param[in] data Raw frame data |
276 | | * \param[out] denoised Denoised frame data |
277 | | * \param[in] w Frame width |
278 | | * \param[in] h Frame height |
279 | | * \param[in] stride Stride of the planes |
280 | | * \param[in] chroma_sub_log2 Chroma subsampling for planes != 0. |
281 | | * \param[in] noise_psd The power spectral density of the noise |
282 | | * \param[in] block_size The size of blocks |
283 | | * \param[in] bit_depth Bit depth of the image |
284 | | * \param[in] use_highbd If true, uint8 pointers are interpreted as |
285 | | * uint16 and stride is measured in uint16. |
286 | | * This must be true when bit_depth >= 10. |
287 | | */ |
288 | | int32_t svt_aom_wiener_denoise_2d(const uint8_t* const data[3], uint8_t* denoised[3], int32_t w, int32_t h, |
289 | | int32_t stride[3], int32_t chroma_sub_log2[2], float noise_psd[3], int32_t block_size, |
290 | | int32_t bit_depth, int32_t use_highbd); |
291 | | |
292 | | struct AomDenoiseAndModel; |
293 | | |
294 | | /*!\brief Denoise the buffer and model the residual noise. |
295 | | * |
296 | | * This is meant to be called sequentially on input frames. The input buffer |
297 | | * is denoised and the residual noise is modelled. The current noise estimate |
298 | | * is populated in film_grain. Returns true on success. The grain.apply_grain |
299 | | * parameter will be true when the input buffer was successfully denoised and |
300 | | * grain was modelled. Returns false on error. |
301 | | * |
302 | | * \param[in] ctx Struct that holds some buffers for denoising and the |
303 | | * current noise estimate. |
304 | | * \param[in/out] buf The raw input buffer to be denoised. |
305 | | * \param[out] grain Output film grain parameters |
306 | | */ |
307 | | int32_t svt_aom_denoise_and_model_run(struct AomDenoiseAndModel* ctx, EbPictureBufferDesc* sd, AomFilmGrain* film_grain, |
308 | | int32_t use_highbd); |
309 | | |
310 | | /*!\brief Allocates a context that can be used for denoising and noise modeling. |
311 | | * |
312 | | * \param[in] bit_depth Bit depth of buffers this will be run on. |
313 | | * \param[in] block_size Block size for noise modeling and flat block |
314 | | * estimation |
315 | | * \param[in] noise_level The noise_level (2.5 for moderate noise, and 5 for |
316 | | * higher levels of noise) |
317 | | */ |
318 | | |
319 | | int32_t is_ref_noise_model_different(AomNoiseModel* const noise_model, AomNoiseModel* const ref_noise_model); |
320 | | |
321 | | // Matrix multiply |
322 | 0 | static INLINE void multiply_mat_1_n_3(const double* m1, const double* m2, double* res, const int32_t inner_dim) { |
323 | 0 | double sum0 = 0, sum1 = 0, sum2 = 0; |
324 | 0 | int32_t inner_m3 = 0; |
325 | |
|
326 | 0 | for (int32_t inner = 0; inner < inner_dim; ++inner, inner_m3 += 3) { |
327 | 0 | const double m1_inner = m1[inner]; |
328 | 0 | sum0 += m1_inner * m2[inner_m3 + 0]; |
329 | 0 | sum1 += m1_inner * m2[inner_m3 + 1]; |
330 | 0 | sum2 += m1_inner * m2[inner_m3 + 2]; |
331 | 0 | } |
332 | |
|
333 | 0 | *(res++) = sum0; |
334 | 0 | *(res++) = sum1; |
335 | 0 | *(res++) = sum2; |
336 | 0 | } Unexecuted instantiation: enc_handle.c:multiply_mat_1_n_3 Unexecuted instantiation: enc_settings.c:multiply_mat_1_n_3 Unexecuted instantiation: aom_dsp_rtcd.c:multiply_mat_1_n_3 Unexecuted instantiation: av1me.c:multiply_mat_1_n_3 Unexecuted instantiation: cdef_process.c:multiply_mat_1_n_3 Unexecuted instantiation: corner_match.c:multiply_mat_1_n_3 Unexecuted instantiation: dlf_process.c:multiply_mat_1_n_3 Unexecuted instantiation: enc_cdef.c:multiply_mat_1_n_3 Unexecuted instantiation: enc_dec_process.c:multiply_mat_1_n_3 Unexecuted instantiation: enc_inter_prediction.c:multiply_mat_1_n_3 Unexecuted instantiation: enc_intra_prediction.c:multiply_mat_1_n_3 Unexecuted instantiation: enc_mode_config.c:multiply_mat_1_n_3 Unexecuted instantiation: entropy_coding.c:multiply_mat_1_n_3 Unexecuted instantiation: ec_process.c:multiply_mat_1_n_3 Unexecuted instantiation: full_loop.c:multiply_mat_1_n_3 Unexecuted instantiation: hash_motion.c:multiply_mat_1_n_3 Unexecuted instantiation: initial_rc_process.c:multiply_mat_1_n_3 Unexecuted instantiation: intra_prediction.c:multiply_mat_1_n_3 Unexecuted instantiation: md_rate_estimation.c:multiply_mat_1_n_3 Unexecuted instantiation: mode_decision.c:multiply_mat_1_n_3 Unexecuted instantiation: md_config_process.c:multiply_mat_1_n_3 Unexecuted instantiation: md_process.c:multiply_mat_1_n_3 Unexecuted instantiation: motion_estimation.c:multiply_mat_1_n_3 Unexecuted instantiation: me_process.c:multiply_mat_1_n_3 Unexecuted instantiation: noise_model.c:multiply_mat_1_n_3 Unexecuted instantiation: noise_util.c:multiply_mat_1_n_3 Unexecuted instantiation: packetization_process.c:multiply_mat_1_n_3 Unexecuted instantiation: palette.c:multiply_mat_1_n_3 Unexecuted instantiation: pic_analysis_process.c:multiply_mat_1_n_3 Unexecuted instantiation: pcs.c:multiply_mat_1_n_3 Unexecuted instantiation: pd_process.c:multiply_mat_1_n_3 Unexecuted instantiation: pd_results.c:multiply_mat_1_n_3 Unexecuted instantiation: pic_manager_process.c:multiply_mat_1_n_3 Unexecuted instantiation: pic_operators.c:multiply_mat_1_n_3 Unexecuted instantiation: pred_structure.c:multiply_mat_1_n_3 Unexecuted instantiation: product_coding_loop.c:multiply_mat_1_n_3 Unexecuted instantiation: ac_bias.c:multiply_mat_1_n_3 Unexecuted instantiation: rc_aq.c:multiply_mat_1_n_3 Unexecuted instantiation: rc_process.c:multiply_mat_1_n_3 Unexecuted instantiation: rc_rtc_cbr.c:multiply_mat_1_n_3 Unexecuted instantiation: rc_vbr_cbr.c:multiply_mat_1_n_3 Unexecuted instantiation: rd_cost.c:multiply_mat_1_n_3 Unexecuted instantiation: reference_object.c:multiply_mat_1_n_3 Unexecuted instantiation: resize.c:multiply_mat_1_n_3 Unexecuted instantiation: resource_coordination_process.c:multiply_mat_1_n_3 Unexecuted instantiation: rest_process.c:multiply_mat_1_n_3 Unexecuted instantiation: restoration.c:multiply_mat_1_n_3 Unexecuted instantiation: restoration_pick.c:multiply_mat_1_n_3 Unexecuted instantiation: segmentation.c:multiply_mat_1_n_3 Unexecuted instantiation: sequence_control_set.c:multiply_mat_1_n_3 Unexecuted instantiation: src_ops_process.c:multiply_mat_1_n_3 Unexecuted instantiation: super_res.c:multiply_mat_1_n_3 Unexecuted instantiation: svt_psnr.c:multiply_mat_1_n_3 Unexecuted instantiation: kernel_dispatch.c:multiply_mat_1_n_3 Unexecuted instantiation: temporal_filtering.c:multiply_mat_1_n_3 Unexecuted instantiation: transforms.c:multiply_mat_1_n_3 Unexecuted instantiation: warped_motion.c:multiply_mat_1_n_3 Unexecuted instantiation: encode_txb_ref_c.c:multiply_mat_1_n_3 Unexecuted instantiation: sad_av1.c:multiply_mat_1_n_3 Unexecuted instantiation: variance.c:multiply_mat_1_n_3 Unexecuted instantiation: adaptive_mv_pred.c:multiply_mat_1_n_3 Unexecuted instantiation: coding_loop.c:multiply_mat_1_n_3 Unexecuted instantiation: coding_unit.c:multiply_mat_1_n_3 Unexecuted instantiation: deblocking_filter.c:multiply_mat_1_n_3 Unexecuted instantiation: encode_context.c:multiply_mat_1_n_3 Unexecuted instantiation: firstpass.c:multiply_mat_1_n_3 Unexecuted instantiation: global_me.c:multiply_mat_1_n_3 Unexecuted instantiation: global_me_cost.c:multiply_mat_1_n_3 Unexecuted instantiation: mcomp.c:multiply_mat_1_n_3 Unexecuted instantiation: me_context.c:multiply_mat_1_n_3 Unexecuted instantiation: pass2_strategy.c:multiply_mat_1_n_3 Unexecuted instantiation: rc_crf_cqp.c:multiply_mat_1_n_3 Unexecuted instantiation: global_motion.c:multiply_mat_1_n_3 Unexecuted instantiation: ransac.c:multiply_mat_1_n_3 Unexecuted instantiation: enc_warped_motion.c:multiply_mat_1_n_3 |
337 | | |
338 | 0 | static INLINE void multiply_mat_3_3_1(const double* m1, const double* m2, double* res) { |
339 | 0 | double sum0, sum1, sum2; |
340 | |
|
341 | 0 | sum0 = m1[0 * 3 + 0] * m2[0 * 1 + 0]; |
342 | 0 | sum0 += m1[0 * 3 + 1] * m2[1 * 1 + 0]; |
343 | 0 | sum0 += m1[0 * 3 + 2] * m2[2 * 1 + 0]; |
344 | 0 | *(res++) = sum0; |
345 | |
|
346 | 0 | sum1 = m1[1 * 3 + 0] * m2[0 * 1 + 0]; |
347 | 0 | sum1 += m1[1 * 3 + 1] * m2[1 * 1 + 0]; |
348 | 0 | sum1 += m1[1 * 3 + 2] * m2[2 * 1 + 0]; |
349 | 0 | *(res++) = sum1; |
350 | |
|
351 | 0 | sum2 = m1[2 * 3 + 0] * m2[0 * 1 + 0]; |
352 | 0 | sum2 += m1[2 * 3 + 1] * m2[1 * 1 + 0]; |
353 | 0 | sum2 += m1[2 * 3 + 2] * m2[2 * 1 + 0]; |
354 | 0 | *(res++) = sum2; |
355 | 0 | } Unexecuted instantiation: enc_handle.c:multiply_mat_3_3_1 Unexecuted instantiation: enc_settings.c:multiply_mat_3_3_1 Unexecuted instantiation: aom_dsp_rtcd.c:multiply_mat_3_3_1 Unexecuted instantiation: av1me.c:multiply_mat_3_3_1 Unexecuted instantiation: cdef_process.c:multiply_mat_3_3_1 Unexecuted instantiation: corner_match.c:multiply_mat_3_3_1 Unexecuted instantiation: dlf_process.c:multiply_mat_3_3_1 Unexecuted instantiation: enc_cdef.c:multiply_mat_3_3_1 Unexecuted instantiation: enc_dec_process.c:multiply_mat_3_3_1 Unexecuted instantiation: enc_inter_prediction.c:multiply_mat_3_3_1 Unexecuted instantiation: enc_intra_prediction.c:multiply_mat_3_3_1 Unexecuted instantiation: enc_mode_config.c:multiply_mat_3_3_1 Unexecuted instantiation: entropy_coding.c:multiply_mat_3_3_1 Unexecuted instantiation: ec_process.c:multiply_mat_3_3_1 Unexecuted instantiation: full_loop.c:multiply_mat_3_3_1 Unexecuted instantiation: hash_motion.c:multiply_mat_3_3_1 Unexecuted instantiation: initial_rc_process.c:multiply_mat_3_3_1 Unexecuted instantiation: intra_prediction.c:multiply_mat_3_3_1 Unexecuted instantiation: md_rate_estimation.c:multiply_mat_3_3_1 Unexecuted instantiation: mode_decision.c:multiply_mat_3_3_1 Unexecuted instantiation: md_config_process.c:multiply_mat_3_3_1 Unexecuted instantiation: md_process.c:multiply_mat_3_3_1 Unexecuted instantiation: motion_estimation.c:multiply_mat_3_3_1 Unexecuted instantiation: me_process.c:multiply_mat_3_3_1 Unexecuted instantiation: noise_model.c:multiply_mat_3_3_1 Unexecuted instantiation: noise_util.c:multiply_mat_3_3_1 Unexecuted instantiation: packetization_process.c:multiply_mat_3_3_1 Unexecuted instantiation: palette.c:multiply_mat_3_3_1 Unexecuted instantiation: pic_analysis_process.c:multiply_mat_3_3_1 Unexecuted instantiation: pcs.c:multiply_mat_3_3_1 Unexecuted instantiation: pd_process.c:multiply_mat_3_3_1 Unexecuted instantiation: pd_results.c:multiply_mat_3_3_1 Unexecuted instantiation: pic_manager_process.c:multiply_mat_3_3_1 Unexecuted instantiation: pic_operators.c:multiply_mat_3_3_1 Unexecuted instantiation: pred_structure.c:multiply_mat_3_3_1 Unexecuted instantiation: product_coding_loop.c:multiply_mat_3_3_1 Unexecuted instantiation: ac_bias.c:multiply_mat_3_3_1 Unexecuted instantiation: rc_aq.c:multiply_mat_3_3_1 Unexecuted instantiation: rc_process.c:multiply_mat_3_3_1 Unexecuted instantiation: rc_rtc_cbr.c:multiply_mat_3_3_1 Unexecuted instantiation: rc_vbr_cbr.c:multiply_mat_3_3_1 Unexecuted instantiation: rd_cost.c:multiply_mat_3_3_1 Unexecuted instantiation: reference_object.c:multiply_mat_3_3_1 Unexecuted instantiation: resize.c:multiply_mat_3_3_1 Unexecuted instantiation: resource_coordination_process.c:multiply_mat_3_3_1 Unexecuted instantiation: rest_process.c:multiply_mat_3_3_1 Unexecuted instantiation: restoration.c:multiply_mat_3_3_1 Unexecuted instantiation: restoration_pick.c:multiply_mat_3_3_1 Unexecuted instantiation: segmentation.c:multiply_mat_3_3_1 Unexecuted instantiation: sequence_control_set.c:multiply_mat_3_3_1 Unexecuted instantiation: src_ops_process.c:multiply_mat_3_3_1 Unexecuted instantiation: super_res.c:multiply_mat_3_3_1 Unexecuted instantiation: svt_psnr.c:multiply_mat_3_3_1 Unexecuted instantiation: kernel_dispatch.c:multiply_mat_3_3_1 Unexecuted instantiation: temporal_filtering.c:multiply_mat_3_3_1 Unexecuted instantiation: transforms.c:multiply_mat_3_3_1 Unexecuted instantiation: warped_motion.c:multiply_mat_3_3_1 Unexecuted instantiation: encode_txb_ref_c.c:multiply_mat_3_3_1 Unexecuted instantiation: sad_av1.c:multiply_mat_3_3_1 Unexecuted instantiation: variance.c:multiply_mat_3_3_1 Unexecuted instantiation: adaptive_mv_pred.c:multiply_mat_3_3_1 Unexecuted instantiation: coding_loop.c:multiply_mat_3_3_1 Unexecuted instantiation: coding_unit.c:multiply_mat_3_3_1 Unexecuted instantiation: deblocking_filter.c:multiply_mat_3_3_1 Unexecuted instantiation: encode_context.c:multiply_mat_3_3_1 Unexecuted instantiation: firstpass.c:multiply_mat_3_3_1 Unexecuted instantiation: global_me.c:multiply_mat_3_3_1 Unexecuted instantiation: global_me_cost.c:multiply_mat_3_3_1 Unexecuted instantiation: mcomp.c:multiply_mat_3_3_1 Unexecuted instantiation: me_context.c:multiply_mat_3_3_1 Unexecuted instantiation: pass2_strategy.c:multiply_mat_3_3_1 Unexecuted instantiation: rc_crf_cqp.c:multiply_mat_3_3_1 Unexecuted instantiation: global_motion.c:multiply_mat_3_3_1 Unexecuted instantiation: ransac.c:multiply_mat_3_3_1 Unexecuted instantiation: enc_warped_motion.c:multiply_mat_3_3_1 |
356 | | |
357 | 0 | static INLINE void multiply_mat_n_3_1(const double* m1, const double* m2, double* res, const int32_t m1_rows) { |
358 | 0 | int32_t row_m3 = 0; |
359 | |
|
360 | 0 | for (int32_t row = 0; row < m1_rows; ++row, row_m3 += 3) { |
361 | 0 | double sum = m1[row_m3 + 0] * m2[0 * 1 + 0]; |
362 | 0 | sum += m1[row_m3 + 1] * m2[1 * 1 + 0]; |
363 | 0 | sum += m1[row_m3 + 2] * m2[2 * 1 + 0]; |
364 | 0 | *(res++) = sum; |
365 | 0 | } |
366 | 0 | } Unexecuted instantiation: enc_handle.c:multiply_mat_n_3_1 Unexecuted instantiation: enc_settings.c:multiply_mat_n_3_1 Unexecuted instantiation: aom_dsp_rtcd.c:multiply_mat_n_3_1 Unexecuted instantiation: av1me.c:multiply_mat_n_3_1 Unexecuted instantiation: cdef_process.c:multiply_mat_n_3_1 Unexecuted instantiation: corner_match.c:multiply_mat_n_3_1 Unexecuted instantiation: dlf_process.c:multiply_mat_n_3_1 Unexecuted instantiation: enc_cdef.c:multiply_mat_n_3_1 Unexecuted instantiation: enc_dec_process.c:multiply_mat_n_3_1 Unexecuted instantiation: enc_inter_prediction.c:multiply_mat_n_3_1 Unexecuted instantiation: enc_intra_prediction.c:multiply_mat_n_3_1 Unexecuted instantiation: enc_mode_config.c:multiply_mat_n_3_1 Unexecuted instantiation: entropy_coding.c:multiply_mat_n_3_1 Unexecuted instantiation: ec_process.c:multiply_mat_n_3_1 Unexecuted instantiation: full_loop.c:multiply_mat_n_3_1 Unexecuted instantiation: hash_motion.c:multiply_mat_n_3_1 Unexecuted instantiation: initial_rc_process.c:multiply_mat_n_3_1 Unexecuted instantiation: intra_prediction.c:multiply_mat_n_3_1 Unexecuted instantiation: md_rate_estimation.c:multiply_mat_n_3_1 Unexecuted instantiation: mode_decision.c:multiply_mat_n_3_1 Unexecuted instantiation: md_config_process.c:multiply_mat_n_3_1 Unexecuted instantiation: md_process.c:multiply_mat_n_3_1 Unexecuted instantiation: motion_estimation.c:multiply_mat_n_3_1 Unexecuted instantiation: me_process.c:multiply_mat_n_3_1 Unexecuted instantiation: noise_model.c:multiply_mat_n_3_1 Unexecuted instantiation: noise_util.c:multiply_mat_n_3_1 Unexecuted instantiation: packetization_process.c:multiply_mat_n_3_1 Unexecuted instantiation: palette.c:multiply_mat_n_3_1 Unexecuted instantiation: pic_analysis_process.c:multiply_mat_n_3_1 Unexecuted instantiation: pcs.c:multiply_mat_n_3_1 Unexecuted instantiation: pd_process.c:multiply_mat_n_3_1 Unexecuted instantiation: pd_results.c:multiply_mat_n_3_1 Unexecuted instantiation: pic_manager_process.c:multiply_mat_n_3_1 Unexecuted instantiation: pic_operators.c:multiply_mat_n_3_1 Unexecuted instantiation: pred_structure.c:multiply_mat_n_3_1 Unexecuted instantiation: product_coding_loop.c:multiply_mat_n_3_1 Unexecuted instantiation: ac_bias.c:multiply_mat_n_3_1 Unexecuted instantiation: rc_aq.c:multiply_mat_n_3_1 Unexecuted instantiation: rc_process.c:multiply_mat_n_3_1 Unexecuted instantiation: rc_rtc_cbr.c:multiply_mat_n_3_1 Unexecuted instantiation: rc_vbr_cbr.c:multiply_mat_n_3_1 Unexecuted instantiation: rd_cost.c:multiply_mat_n_3_1 Unexecuted instantiation: reference_object.c:multiply_mat_n_3_1 Unexecuted instantiation: resize.c:multiply_mat_n_3_1 Unexecuted instantiation: resource_coordination_process.c:multiply_mat_n_3_1 Unexecuted instantiation: rest_process.c:multiply_mat_n_3_1 Unexecuted instantiation: restoration.c:multiply_mat_n_3_1 Unexecuted instantiation: restoration_pick.c:multiply_mat_n_3_1 Unexecuted instantiation: segmentation.c:multiply_mat_n_3_1 Unexecuted instantiation: sequence_control_set.c:multiply_mat_n_3_1 Unexecuted instantiation: src_ops_process.c:multiply_mat_n_3_1 Unexecuted instantiation: super_res.c:multiply_mat_n_3_1 Unexecuted instantiation: svt_psnr.c:multiply_mat_n_3_1 Unexecuted instantiation: kernel_dispatch.c:multiply_mat_n_3_1 Unexecuted instantiation: temporal_filtering.c:multiply_mat_n_3_1 Unexecuted instantiation: transforms.c:multiply_mat_n_3_1 Unexecuted instantiation: warped_motion.c:multiply_mat_n_3_1 Unexecuted instantiation: encode_txb_ref_c.c:multiply_mat_n_3_1 Unexecuted instantiation: sad_av1.c:multiply_mat_n_3_1 Unexecuted instantiation: variance.c:multiply_mat_n_3_1 Unexecuted instantiation: adaptive_mv_pred.c:multiply_mat_n_3_1 Unexecuted instantiation: coding_loop.c:multiply_mat_n_3_1 Unexecuted instantiation: coding_unit.c:multiply_mat_n_3_1 Unexecuted instantiation: deblocking_filter.c:multiply_mat_n_3_1 Unexecuted instantiation: encode_context.c:multiply_mat_n_3_1 Unexecuted instantiation: firstpass.c:multiply_mat_n_3_1 Unexecuted instantiation: global_me.c:multiply_mat_n_3_1 Unexecuted instantiation: global_me_cost.c:multiply_mat_n_3_1 Unexecuted instantiation: mcomp.c:multiply_mat_n_3_1 Unexecuted instantiation: me_context.c:multiply_mat_n_3_1 Unexecuted instantiation: pass2_strategy.c:multiply_mat_n_3_1 Unexecuted instantiation: rc_crf_cqp.c:multiply_mat_n_3_1 Unexecuted instantiation: global_motion.c:multiply_mat_n_3_1 Unexecuted instantiation: ransac.c:multiply_mat_n_3_1 Unexecuted instantiation: enc_warped_motion.c:multiply_mat_n_3_1 |
367 | | #ifdef __cplusplus |
368 | | } // extern "C" |
369 | | #endif // __cplusplus |
370 | | |
371 | | #endif // CONFIG_ENABLE_FILM_GRAIN |
372 | | |
373 | | #endif // AOM_AOM_DSP_NOISE_MODEL_H_ |