Coverage Report

Created: 2026-05-16 06:41

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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_