/src/libhevc/encoder/ihevce_stasino_helpers.h
Line | Count | Source (jump to first uncovered line) |
1 | | /****************************************************************************** |
2 | | * |
3 | | * Copyright (C) 2018 The Android Open Source Project |
4 | | * |
5 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | | * you may not use this file except in compliance with the License. |
7 | | * You may obtain a copy of the License at: |
8 | | * |
9 | | * http://www.apache.org/licenses/LICENSE-2.0 |
10 | | * |
11 | | * Unless required by applicable law or agreed to in writing, software |
12 | | * distributed under the License is distributed on an "AS IS" BASIS, |
13 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 | | * See the License for the specific language governing permissions and |
15 | | * limitations under the License. |
16 | | * |
17 | | ***************************************************************************** |
18 | | * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore |
19 | | */ |
20 | | |
21 | | /** |
22 | | ******************************************************************************* |
23 | | * @file |
24 | | * ihevce_stasino_helpers.h |
25 | | * |
26 | | * @brief |
27 | | * |
28 | | * |
29 | | * @author |
30 | | * Ittiam |
31 | | * |
32 | | * @remarks |
33 | | * None |
34 | | * |
35 | | ******************************************************************************* |
36 | | */ |
37 | | |
38 | | #ifndef _IHEVCE_STASINO_HELPERS_H_ |
39 | | #define _IHEVCE_STASINO_HELPERS_H_ |
40 | | |
41 | | #include <math.h> |
42 | | /****************************************************************************/ |
43 | | /* Constant Macros */ |
44 | | /****************************************************************************/ |
45 | | |
46 | | /****************************************************************************/ |
47 | | /* Function Macros */ |
48 | | /****************************************************************************/ |
49 | | #define MULTIPLY_STIM_WITH_DISTORTION(dist, stimXalpha, stim_q_level, alpha_q_level) \ |
50 | 0 | { \ |
51 | 0 | ULWORD64 u8_pure_dist = (dist); \ |
52 | 0 | WORD32 i4_q_level = stim_q_level + alpha_q_level; \ |
53 | 0 | \ |
54 | 0 | u8_pure_dist *= ((1 << (i4_q_level)) - (stimXalpha)); \ |
55 | 0 | u8_pure_dist += (1 << ((i4_q_level)-1)); \ |
56 | 0 | (dist) = u8_pure_dist >> (i4_q_level); \ |
57 | 0 | } |
58 | | |
59 | | /****************************************************************************/ |
60 | | /* Typedefs */ |
61 | | /****************************************************************************/ |
62 | | |
63 | | /****************************************************************************/ |
64 | | /* Enums */ |
65 | | /****************************************************************************/ |
66 | | |
67 | | /****************************************************************************/ |
68 | | /* Structure */ |
69 | | /****************************************************************************/ |
70 | | |
71 | | /****************************************************************************/ |
72 | | /* Function Prototypes */ |
73 | | /****************************************************************************/ |
74 | | |
75 | | void ihevce_calc_variance( |
76 | | void *pv_input, |
77 | | WORD32 i4_stride, |
78 | | WORD32 *pi4_mean, |
79 | | UWORD32 *pu4_variance, |
80 | | UWORD8 u1_block_height, |
81 | | UWORD8 u1_block_width, |
82 | | UWORD8 u1_is_hbd, |
83 | | UWORD8 u1_disable_normalization); |
84 | | |
85 | | void ihevce_calc_variance_signed( |
86 | | WORD16 *pv_input, |
87 | | WORD32 i4_stride, |
88 | | WORD32 *pi4_mean, |
89 | | UWORD32 *pu4_variance, |
90 | | UWORD8 u1_block_height, |
91 | | UWORD8 u1_block_width); |
92 | | |
93 | | void ihevce_calc_chroma_variance( |
94 | | void *pv_input, |
95 | | WORD32 i4_stride, |
96 | | WORD32 *pi4_mean, |
97 | | UWORD32 *pu4_variance, |
98 | | UWORD8 u1_block_height, |
99 | | UWORD8 u1_block_width, |
100 | | UWORD8 u1_is_hbd, |
101 | | CHROMA_PLANE_ID_T e_chroma_plane); |
102 | | |
103 | | static INLINE UWORD32 ihevce_compute_stim(UWORD32 u4_variance1, UWORD32 u4_variance2) |
104 | 0 | { |
105 | 0 | return (u4_variance1 == u4_variance2) |
106 | 0 | ? (1 << STIM_Q_FORMAT) |
107 | 0 | : ((UWORD32)( |
108 | 0 | ((2 * (double)u4_variance1 * (double)u4_variance2) / |
109 | 0 | (pow((double)u4_variance1, 2) + pow((double)u4_variance2, 2))) * |
110 | 0 | pow((double)2, STIM_Q_FORMAT))); |
111 | 0 | } Unexecuted instantiation: hme_refine.c:ihevce_compute_stim Unexecuted instantiation: hme_search_algo.c:ihevce_compute_stim Unexecuted instantiation: hme_subpel.c:ihevce_compute_stim Unexecuted instantiation: hme_utils.c:ihevce_compute_stim Unexecuted instantiation: ihevce_enc_loop_utils.c:ihevce_compute_stim Unexecuted instantiation: ihevce_stasino_helpers.c:ihevce_compute_stim Unexecuted instantiation: hme_err_compute.c:ihevce_compute_stim Unexecuted instantiation: hme_fullpel.c:ihevce_compute_stim Unexecuted instantiation: ihevce_enc_cu_recursion.c:ihevce_compute_stim Unexecuted instantiation: ihevce_enc_loop_inter_mode_sifter.c:ihevce_compute_stim |
112 | | |
113 | | LWORD64 ihevce_inject_stim_into_distortion( |
114 | | void *pv_src, |
115 | | WORD32 i4_src_stride, |
116 | | void *pv_pred, |
117 | | WORD32 i4_pred_stride, |
118 | | LWORD64 i8_distortion, |
119 | | WORD32 i4_alpha_stim_multiplier, |
120 | | UWORD8 u1_blk_size, |
121 | | UWORD8 u1_is_hbd, |
122 | | UWORD8 u1_enable_psyRDOPT, |
123 | | CHROMA_PLANE_ID_T e_chroma_plane); |
124 | | |
125 | | static INLINE WORD32 ihevce_derive_noise_weighted_alpha_stim_multiplier( |
126 | | WORD32 i4_alpha, UWORD32 u4SrcVar, UWORD32 u4PredVar, WORD32 i4_stim) |
127 | 0 | { |
128 | 0 | (void)u4SrcVar; |
129 | 0 | (void)u4PredVar; |
130 | 0 | (void)i4_stim; |
131 | 0 | return i4_alpha; |
132 | 0 | } Unexecuted instantiation: hme_refine.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: hme_search_algo.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: hme_subpel.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: hme_utils.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: ihevce_enc_loop_utils.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: ihevce_stasino_helpers.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: hme_err_compute.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: hme_fullpel.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: ihevce_enc_cu_recursion.c:ihevce_derive_noise_weighted_alpha_stim_multiplier Unexecuted instantiation: ihevce_enc_loop_inter_mode_sifter.c:ihevce_derive_noise_weighted_alpha_stim_multiplier |
133 | | |
134 | | static INLINE WORD32 ihevce_compute_noise_term(WORD32 i4_alpha, UWORD32 u4SrcVar, UWORD32 u4PredVar) |
135 | 0 | { |
136 | 0 | if(i4_alpha) |
137 | 0 | { |
138 | 0 | WORD32 i4_stim = ihevce_compute_stim(u4SrcVar, u4PredVar); |
139 | |
|
140 | 0 | ASSERT(i4_stim >= 0); |
141 | | |
142 | 0 | i4_alpha = ihevce_derive_noise_weighted_alpha_stim_multiplier( |
143 | 0 | i4_alpha, u4SrcVar, u4PredVar, i4_stim); |
144 | |
|
145 | 0 | return i4_stim * i4_alpha; |
146 | 0 | } |
147 | 0 | else |
148 | 0 | { |
149 | 0 | return 0; |
150 | 0 | } |
151 | 0 | } Unexecuted instantiation: hme_refine.c:ihevce_compute_noise_term Unexecuted instantiation: hme_search_algo.c:ihevce_compute_noise_term Unexecuted instantiation: hme_subpel.c:ihevce_compute_noise_term Unexecuted instantiation: hme_utils.c:ihevce_compute_noise_term Unexecuted instantiation: ihevce_enc_loop_utils.c:ihevce_compute_noise_term Unexecuted instantiation: ihevce_stasino_helpers.c:ihevce_compute_noise_term Unexecuted instantiation: hme_err_compute.c:ihevce_compute_noise_term Unexecuted instantiation: hme_fullpel.c:ihevce_compute_noise_term Unexecuted instantiation: ihevce_enc_cu_recursion.c:ihevce_compute_noise_term Unexecuted instantiation: ihevce_enc_loop_inter_mode_sifter.c:ihevce_compute_noise_term |
152 | | |
153 | | UWORD8 ihevce_determine_cu_noise_based_on_8x8Blk_data( |
154 | | UWORD8 *pu1_is_8x8Blk_noisy, UWORD8 u1_cu_x_pos, UWORD8 u1_cu_y_pos, UWORD8 u1_cu_size); |
155 | | |
156 | | LWORD64 ihevce_psy_rd_cost_croma( |
157 | | LWORD64 *pui4_source_satd, |
158 | | void *p_recon, |
159 | | WORD32 recon_stride_vert, |
160 | | WORD32 recond_stride_horz, |
161 | | WORD32 cu_size_luma, |
162 | | WORD32 pic_type, |
163 | | WORD32 layer_id, |
164 | | WORD32 lambda, |
165 | | WORD32 start_index, |
166 | | WORD32 is_hbd, |
167 | | WORD32 sub_sampling_type, |
168 | | ihevce_cmn_opt_func_t *ps_cmn_utils_optimised_function_list |
169 | | |
170 | | ); |
171 | | |
172 | | LWORD64 ihevce_psy_rd_cost( |
173 | | LWORD64 *pui4_source_satd, |
174 | | void *pv_recon, |
175 | | WORD32 recon_stride_vert, |
176 | | WORD32 recond_stride_horz, |
177 | | WORD32 cu_size, |
178 | | WORD32 pic_type, |
179 | | WORD32 layer_id, |
180 | | WORD32 lambda, |
181 | | WORD32 start_index, |
182 | | WORD32 is_hbd, |
183 | | UWORD32 u4_psy_strength, |
184 | | ihevce_cmn_opt_func_t *ps_cmn_utils_optimised_function_list); |
185 | | |
186 | | WORD32 ihevce_ctb_noise_detect( |
187 | | UWORD8 *pu1_l0_ctb, |
188 | | WORD32 l0_stride, |
189 | | UWORD8 *pu1_l1_ctb, |
190 | | WORD32 l1_stride, |
191 | | WORD32 had_block_size, |
192 | | WORD32 ctb_width, |
193 | | WORD32 ctb_height, |
194 | | ihevce_ctb_noise_params *ps_ctb_noise_params, |
195 | | WORD32 ctb_height_offset, |
196 | | WORD32 ctb_width_offset, |
197 | | WORD32 frame_height, |
198 | | WORD32 frame_width); |
199 | | |
200 | | void ihevce_had4_4x4_noise_detect( |
201 | | UWORD8 *pu1_src, |
202 | | WORD32 src_strd, |
203 | | UWORD8 *pu1_pred, |
204 | | WORD32 pred_strd, |
205 | | WORD16 *pi2_dst4x4, |
206 | | WORD16 *pi2_residue, |
207 | | WORD32 dst_strd, |
208 | | WORD32 scaling_for_pred); |
209 | | |
210 | | WORD32 ihevce_had_16x16_r_noise_detect( |
211 | | UWORD8 *pu1_src, |
212 | | WORD32 src_strd, |
213 | | UWORD8 *pu1_pred, |
214 | | WORD32 pred_strd, |
215 | | WORD16 *pi2_dst, |
216 | | WORD32 dst_strd, |
217 | | WORD32 pos_x_y_4x4, |
218 | | WORD32 num_4x4_in_row, |
219 | | WORD32 scaling_for_pred); |
220 | | |
221 | | UWORD32 ihevce_compute_8x8HAD_using_4x4_noise_detect( |
222 | | WORD16 *pi2_4x4_had, |
223 | | WORD32 had4_strd, |
224 | | WORD16 *pi2_dst, |
225 | | WORD32 dst_strd, |
226 | | WORD32 i4_frm_qstep, |
227 | | WORD32 *pi4_cbf); |
228 | | |
229 | | void ihevce_had_8x8_using_4_4x4_noise_detect( |
230 | | UWORD8 *pu1_src, |
231 | | WORD32 src_strd, |
232 | | UWORD8 *pu1_pred, |
233 | | WORD32 pred_strd, |
234 | | WORD16 *pi2_dst, |
235 | | WORD32 dst_strd, |
236 | | WORD32 pos_x_y_4x4, |
237 | | WORD32 num_4x4_in_row, |
238 | | WORD32 scaling_for_pred); |
239 | | |
240 | | unsigned long ihevce_calc_stim_injected_variance( |
241 | | ULWORD64 *pu8_sigmaX, |
242 | | ULWORD64 *pu8_sigmaXSquared, |
243 | | ULWORD64 *u8_var, |
244 | | WORD32 i4_inv_wpred_wt, |
245 | | WORD32 i4_inv_wt_shift_val, |
246 | | WORD32 i4_wpred_log_wdc, |
247 | | WORD32 i4_part_id); |
248 | | |
249 | | unsigned long ihevce_calc_variance_for_diff_weights( |
250 | | ULWORD64 *pu8_sigmaX, |
251 | | ULWORD64 *pu8_sigmaXSquared, |
252 | | ULWORD64 *u8_var, |
253 | | WORD32 *pi4_inv_wt, |
254 | | WORD32 *pi4_inv_wt_shift_val, |
255 | | pu_result_t *ps_result, |
256 | | WORD32 i4_wpred_log_wdc, |
257 | | PART_ID_T *pe_part_id, |
258 | | UWORD8 u1_cu_size, |
259 | | UWORD8 u1_num_parts, |
260 | | UWORD8 u1_is_for_src); |
261 | | |
262 | | #endif /* _IHEVCE_STASINO_HELPERS_H_ */ |