Coverage Report

Created: 2026-10-28 06:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/svt-av1/Source/Lib/Codec/grainSynthesis.h
Line
Count
Source
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 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
/*!\file
13
  * \brief Describes film grain parameters and film grain synthesis
14
  *
15
  */
16
#ifndef AOM_AOM_GRAIN_SYNTHESIS_H_
17
#define AOM_AOM_GRAIN_SYNTHESIS_H_
18
19
#include <stdint.h>
20
#include "EbSvtAv1.h"
21
22
#ifdef __cplusplus
23
extern "C" {
24
#endif
25
26
0
static inline bool svt_aom_film_grain_params_valid(const AomFilmGrain* grain) {
27
0
    if (grain->apply_grain == 0) {
28
0
        return true;
29
0
    }
30
0
    if (grain->apply_grain != 1 || (grain->bit_depth != 8 && grain->bit_depth != 10) ||
31
0
        (uint32_t)grain->update_parameters > 1 || (uint32_t)grain->ignore_ref > 1 ||
32
0
        (uint32_t)grain->chroma_scaling_from_luma > 1 || (uint32_t)grain->overlap_flag > 1 ||
33
0
        (uint32_t)grain->clip_to_restricted_range > 1 || grain->scaling_shift < 8 || grain->scaling_shift > 11 ||
34
0
        (uint32_t)grain->ar_coeff_lag > 3 || grain->ar_coeff_shift < 6 || grain->ar_coeff_shift > 9 ||
35
0
        (uint32_t)grain->grain_scale_shift > 3 || (uint32_t)grain->num_y_points > 14 ||
36
0
        (uint32_t)grain->num_cb_points > 10 || (uint32_t)grain->num_cr_points > 10 ||
37
0
        (!grain->chroma_scaling_from_luma && grain->num_y_points && (!grain->num_cb_points != !grain->num_cr_points))) {
38
0
        return false;
39
0
    }
40
0
    const int counts[]           = {grain->num_y_points, grain->num_cb_points, grain->num_cr_points};
41
0
    const int32_t (*points[])[2] = {grain->scaling_points_y, grain->scaling_points_cb, grain->scaling_points_cr};
42
0
    const int32_t* coeffs[]      = {grain->ar_coeffs_y, grain->ar_coeffs_cb, grain->ar_coeffs_cr};
43
0
    for (int plane = 0; plane < 3; ++plane) {
44
0
        for (int i = 0; i < counts[plane]; ++i) {
45
0
            if ((uint32_t)points[plane][i][0] > 255 || (uint32_t)points[plane][i][1] > 255 ||
46
0
                (i && points[plane][i][0] <= points[plane][i - 1][0])) {
47
0
                return false;
48
0
            }
49
0
        }
50
0
        const int n = 2 * grain->ar_coeff_lag * (grain->ar_coeff_lag + 1) + (plane && grain->num_y_points > 0);
51
0
        if (counts[plane] || (plane && grain->chroma_scaling_from_luma)) {
52
0
            for (int i = 0; i < n; ++i) {
53
0
                if (coeffs[plane][i] < -128 || coeffs[plane][i] > 127) {
54
0
                    return false;
55
0
                }
56
0
            }
57
0
        }
58
0
    }
59
0
    if ((grain->num_cb_points &&
60
0
         ((uint32_t)grain->cb_mult > 255 || (uint32_t)grain->cb_luma_mult > 255 || (uint32_t)grain->cb_offset > 511)) ||
61
0
        (grain->num_cr_points &&
62
0
         ((uint32_t)grain->cr_mult > 255 || (uint32_t)grain->cr_luma_mult > 255 || (uint32_t)grain->cr_offset > 511))) {
63
0
        return false;
64
0
    }
65
0
    return true;
66
0
}
Unexecuted instantiation: enc_handle.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: enc_settings.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: aom_dsp_rtcd.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: av1me.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: cdef_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: corner_match.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: dlf_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: enc_cdef.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: enc_dec_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: enc_inter_prediction.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: enc_intra_prediction.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: enc_mode_config.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: entropy_coding.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: ec_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: full_loop.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: grainSynthesis.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: hash_motion.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: initial_rc_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: intra_prediction.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: md_rate_estimation.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: mode_decision.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: md_config_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: md_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: motion_estimation.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: me_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: noise_model.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: noise_util.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: packetization_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: palette.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: pic_analysis_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: pcs.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: pd_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: pd_results.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: pic_manager_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: pic_operators.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: pred_structure.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: product_coding_loop.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: ac_bias.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: rc_aq.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: rc_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: rc_rtc_cbr.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: rc_vbr_cbr.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: rd_cost.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: reference_object.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: resize.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: resource_coordination_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: rest_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: restoration.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: restoration_pick.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: segmentation.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: sequence_control_set.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: src_ops_process.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: super_res.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: svt_psnr.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: kernel_dispatch.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: temporal_filtering.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: transforms.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: warped_motion.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: encode_txb_ref_c.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: highbd_picture_operators_c.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: picture_operators_c.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: sad_av1.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: variance.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: adaptive_mv_pred.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: coding_loop.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: coding_unit.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: deblocking_filter.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: encode_context.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: firstpass.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: global_me.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: global_me_cost.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: mcomp.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: me_context.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: pass2_strategy.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: rc_crf_cqp.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: global_motion.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: ransac.c:svt_aom_film_grain_params_valid
Unexecuted instantiation: enc_warped_motion.c:svt_aom_film_grain_params_valid
67
68
int32_t svt_aom_film_grain_params_equal(const AomFilmGrain* pars_a, const AomFilmGrain* pars_b);
69
70
/*!\brief Add film grain
71
     *
72
     * Add film grain to an image
73
     *
74
     * \param[in]    grain_params     Grain parameters
75
     * \param[in]    luma             luma plane
76
     * \param[in]    cb               cb plane
77
     * \param[in]    cr               cr plane
78
     * \param[in]    height           luma plane height
79
     * \param[in]    width            luma plane width
80
     * \param[in]    luma_stride      luma plane stride
81
     * \param[in]    chroma_stride    chroma plane stride
82
     */
83
void svt_av1_add_film_grain_run(const AomFilmGrain* grain_params, uint8_t* luma, uint8_t* cb, uint8_t* cr,
84
                                int32_t height, int32_t width, int32_t luma_stride, int32_t chroma_stride,
85
                                int32_t use_high_bit_depth, int32_t chroma_subsamp_y, int32_t chroma_subsamp_x);
86
87
void svt_aom_fgn_copy_rect(uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t width,
88
                           int32_t height, int32_t use_high_bit_depth);
89
90
#ifdef __cplusplus
91
} // extern "C"
92
#endif
93
94
#endif // AOM_AOM_GRAIN_SYNTHESIS_H_