/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_ |