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 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string.h>
23 #include "impd_type_def.h"
24 #include "impd_drc_extr_delta_coded_info.h"
25 #include "impd_drc_common.h"
26 #include "impd_drc_struct.h"
27 #include "impd_drc_interface.h"
28 #include "impd_drc_selection_process.h"
29
impd_drc_sel_proc_init_dflt(ia_drc_sel_pro_struct * pstr_drc_uni_sel_proc)30 WORD32 impd_drc_sel_proc_init_dflt(
31 ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc) {
32 if (pstr_drc_uni_sel_proc != NULL) {
33 pstr_drc_uni_sel_proc->first_frame = 0;
34
35 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count = -1;
36 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout = -1;
37 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type =
38 0;
39 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 0;
40
41 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode = 0;
42
43 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter = 0;
44
45 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_normalization_on =
46 0;
47 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness = -24.0f;
48
49 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_deviation_max =
50 LOUDNESS_DEVIATION_MAX_DEFAULT;
51
52 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_method =
53 USER_METHOD_DEFINITION_DEFAULT;
54 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_system =
55 USER_MEASUREMENT_SYSTEM_DEFAULT;
56 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
57 .loudness_measurement_pre_proc = USER_LOUDNESS_PREPROCESSING_DEFAULT;
58 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.device_cut_off_frequency =
59 500;
60 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_db_max =
61 LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT;
62 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
63 .loudness_norm_gain_modification_db = 0.0f;
64 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max = 0.0f;
65 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter == 1) {
66 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max =
67 6.0f;
68 }
69
70 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.dynamic_range_control_on = 1;
71 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_bands_supported = 4;
72 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_drc_feature_requests = 0;
73
74 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost = 1.f;
75 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress = 1.f;
76 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_characteristic_target =
77 0;
78
79 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request =
80 LOUD_EQ_REQUEST_OFF;
81 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request =
82 EQ_PURPOSE_EQ_OFF;
83 pstr_drc_uni_sel_proc->compl_level_supported_total =
84 COMPLEXITY_LEVEL_SUPPORTED_TOTAL;
85
86 pstr_drc_uni_sel_proc->drc_inst_index_sel = -1;
87 pstr_drc_uni_sel_proc->drc_coef_index_sel = -1;
88 pstr_drc_uni_sel_proc->downmix_inst_index_sel = -1;
89 pstr_drc_uni_sel_proc->drc_instructions_index[0] = -1;
90 pstr_drc_uni_sel_proc->drc_instructions_index[1] = -1;
91 pstr_drc_uni_sel_proc->drc_instructions_index[2] = -1;
92 pstr_drc_uni_sel_proc->drc_instructions_index[3] = -1;
93 pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_peak_level_db = 0;
94 pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
95 .loudness_normalization_gain_db = 0;
96 pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_loudness =
97 UNDEFINED_LOUDNESS_VALUE;
98 pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.num_sel_drc_sets = 0;
99 pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id = 0;
100 pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.base_channel_count = 0;
101 pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count = 0;
102 pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.downmix_matrix_present = 0;
103
104 pstr_drc_uni_sel_proc->eq_inst_index[0] = -1;
105 pstr_drc_uni_sel_proc->eq_inst_index[1] = -1;
106 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
107 } else {
108 return 1;
109 }
110
111 return 0;
112 }
113 WORD32
impd_drc_sel_proc_init_sel_proc_params(ia_drc_sel_pro_struct * pstr_drc_uni_sel_proc,ia_drc_sel_proc_params_struct * pstr_drc_sel_proc_params_struct)114 impd_drc_sel_proc_init_sel_proc_params(
115 ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
116 ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct) {
117 if (pstr_drc_uni_sel_proc != NULL &&
118 pstr_drc_sel_proc_params_struct != NULL) {
119 if (memcmp(&pstr_drc_uni_sel_proc->uni_drc_sel_proc_params,
120 pstr_drc_sel_proc_params_struct,
121 sizeof(ia_drc_sel_proc_params_struct))) {
122 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params =
123 *pstr_drc_sel_proc_params_struct;
124 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
125 }
126 }
127
128 return 0;
129 }
impd_drc_sel_proc_init_interface_params(ia_drc_sel_pro_struct * pstr_drc_uni_sel_proc,ia_drc_interface_struct * pstr_drc_interface)130 VOID impd_drc_sel_proc_init_interface_params(
131 ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
132 ia_drc_interface_struct* pstr_drc_interface) {
133 WORD32 i, j;
134
135 if (pstr_drc_uni_sel_proc != NULL && pstr_drc_interface != NULL) {
136 if (pstr_drc_interface->system_interface_flag) {
137 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
138 .target_config_request_type !=
139 pstr_drc_interface->system_interface.target_config_request_type) {
140 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
141 .target_config_request_type =
142 pstr_drc_interface->system_interface.target_config_request_type;
143 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
144 }
145 switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
146 .target_config_request_type) {
147 case 0:
148 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
149 .num_downmix_id_requests !=
150 pstr_drc_interface->system_interface.num_downmix_id_requests) {
151 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
152 .num_downmix_id_requests =
153 pstr_drc_interface->system_interface.num_downmix_id_requests;
154 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
155 }
156 for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
157 .num_downmix_id_requests;
158 i++) {
159 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
160 .requested_dwnmix_id[i] !=
161 pstr_drc_interface->system_interface.requested_dwnmix_id[i]) {
162 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
163 .requested_dwnmix_id[i] =
164 pstr_drc_interface->system_interface.requested_dwnmix_id[i];
165 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
166 }
167 }
168 break;
169 case 1:
170 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
171 .requested_target_layout !=
172 pstr_drc_interface->system_interface.requested_target_layout) {
173 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
174 .requested_target_layout =
175 pstr_drc_interface->system_interface.requested_target_layout;
176 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
177 }
178 break;
179 case 2:
180 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
181 .requested_target_ch_count !=
182 pstr_drc_interface->system_interface.requested_target_ch_count) {
183 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
184 .requested_target_ch_count =
185 pstr_drc_interface->system_interface.requested_target_ch_count;
186 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
187 }
188 break;
189 }
190 }
191 if (pstr_drc_interface->loudness_norm_ctrl_interface_flag) {
192 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
193 .loudness_normalization_on !=
194 pstr_drc_interface->loudness_norm_ctrl_interface
195 .loudness_normalization_on) {
196 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
197 .loudness_normalization_on =
198 pstr_drc_interface->loudness_norm_ctrl_interface
199 .loudness_normalization_on;
200 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
201 }
202 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
203 .loudness_normalization_on) {
204 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness !=
205 pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness) {
206 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness =
207 pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness;
208 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
209 }
210 }
211 }
212 if (pstr_drc_interface->loudness_norm_parameter_interface_flag) {
213 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode !=
214 pstr_drc_interface->loudness_norm_param_interface.album_mode) {
215 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode =
216 pstr_drc_interface->loudness_norm_param_interface.album_mode;
217 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
218 }
219 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter !=
220 pstr_drc_interface->loudness_norm_param_interface.peak_limiter) {
221 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter =
222 pstr_drc_interface->loudness_norm_param_interface.peak_limiter;
223 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
224 }
225 if (pstr_drc_interface->loudness_norm_param_interface
226 .change_loudness_deviation_max) {
227 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
228 .loudness_deviation_max !=
229 pstr_drc_interface->loudness_norm_param_interface
230 .loudness_deviation_max) {
231 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
232 .loudness_deviation_max =
233 pstr_drc_interface->loudness_norm_param_interface
234 .loudness_deviation_max;
235 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
236 }
237 }
238 if (pstr_drc_interface->loudness_norm_param_interface
239 .change_loudness_measur_method) {
240 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
241 .loudness_measurement_method !=
242 pstr_drc_interface->loudness_norm_param_interface
243 .loudness_measurement_method) {
244 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
245 .loudness_measurement_method =
246 pstr_drc_interface->loudness_norm_param_interface
247 .loudness_measurement_method;
248 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
249 }
250 }
251 if (pstr_drc_interface->loudness_norm_param_interface
252 .change_loudness_measur_pre_proc) {
253 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
254 .loudness_measurement_pre_proc !=
255 pstr_drc_interface->loudness_norm_param_interface
256 .loudness_measurement_pre_proc) {
257 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
258 .loudness_measurement_pre_proc =
259 pstr_drc_interface->loudness_norm_param_interface
260 .loudness_measurement_pre_proc;
261 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
262 }
263 }
264 if (pstr_drc_interface->loudness_norm_param_interface
265 .change_loudness_measur_system) {
266 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
267 .loudness_measurement_system !=
268 pstr_drc_interface->loudness_norm_param_interface
269 .loudness_measurement_system) {
270 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
271 .loudness_measurement_system =
272 pstr_drc_interface->loudness_norm_param_interface
273 .loudness_measurement_system;
274 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
275 }
276 }
277 if (pstr_drc_interface->loudness_norm_param_interface
278 .change_device_cut_off_freq) {
279 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
280 .device_cut_off_frequency !=
281 pstr_drc_interface->loudness_norm_param_interface
282 .device_cut_off_frequency) {
283 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
284 .device_cut_off_frequency =
285 pstr_drc_interface->loudness_norm_param_interface
286 .device_cut_off_frequency;
287 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
288 }
289 }
290 if (pstr_drc_interface->loudness_norm_param_interface
291 .change_loudness_norm_gain_db_max) {
292 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
293 .loudness_norm_gain_db_max !=
294 pstr_drc_interface->loudness_norm_param_interface
295 .loudness_norm_gain_db_max) {
296 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
297 .loudness_norm_gain_db_max =
298 pstr_drc_interface->loudness_norm_param_interface
299 .loudness_norm_gain_db_max;
300 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
301 }
302 }
303 if (pstr_drc_interface->loudness_norm_param_interface
304 .change_loudness_norm_gain_modification_db) {
305 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
306 .loudness_norm_gain_modification_db !=
307 pstr_drc_interface->loudness_norm_param_interface
308 .loudness_norm_gain_modification_db) {
309 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
310 .loudness_norm_gain_modification_db =
311 pstr_drc_interface->loudness_norm_param_interface
312 .loudness_norm_gain_modification_db;
313 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
314 }
315 }
316 if (pstr_drc_interface->loudness_norm_param_interface
317 .change_output_peak_level_max) {
318 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
319 .output_peak_level_max !=
320 pstr_drc_interface->loudness_norm_param_interface
321 .output_peak_level_max) {
322 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max =
323 pstr_drc_interface->loudness_norm_param_interface
324 .output_peak_level_max;
325 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
326 }
327 }
328 }
329 if (pstr_drc_interface->drc_interface_flag) {
330 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
331 .dynamic_range_control_on !=
332 pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on) {
333 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
334 .dynamic_range_control_on =
335 pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on;
336 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
337 if (!pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
338 .dynamic_range_control_on) {
339 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
340 .num_drc_feature_requests = 0;
341 }
342 }
343 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
344 .dynamic_range_control_on) {
345 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
346 .num_drc_feature_requests !=
347 pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests) {
348 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
349 .num_drc_feature_requests =
350 pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests;
351 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
352 }
353 for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
354 .num_drc_feature_requests;
355 i++) {
356 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
357 .drc_feature_req_type[i] !=
358 pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i]) {
359 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
360 .drc_feature_req_type[i] =
361 pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i];
362 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
363 }
364 switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
365 .drc_feature_req_type[i]) {
366 case 0:
367 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
368 .requested_num_drc_effects[i] !=
369 pstr_drc_interface->drc_ctrl_interface
370 .requested_num_drc_effects[i]) {
371 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
372 .requested_num_drc_effects[i] =
373 pstr_drc_interface->drc_ctrl_interface
374 .requested_num_drc_effects[i];
375 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
376 }
377 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
378 .desired_num_drc_effects_of_requested[i] !=
379 pstr_drc_interface->drc_ctrl_interface
380 .desired_num_drc_effects_of_requested[i]) {
381 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
382 .desired_num_drc_effects_of_requested[i] =
383 pstr_drc_interface->drc_ctrl_interface
384 .desired_num_drc_effects_of_requested[i];
385 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
386 }
387 for (j = 0; j < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
388 .requested_num_drc_effects[i];
389 j++) {
390 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
391 .requested_drc_effect_type[i][j] !=
392 pstr_drc_interface->drc_ctrl_interface
393 .requested_drc_effect_type[i][j]) {
394 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
395 .requested_drc_effect_type[i][j] =
396 pstr_drc_interface->drc_ctrl_interface
397 .requested_drc_effect_type[i][j];
398 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
399 }
400 }
401 break;
402 case 1:
403 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
404 .requested_dyn_range_measur_type[i] !=
405 pstr_drc_interface->drc_ctrl_interface
406 .requested_dyn_rng_measurement_type[i]) {
407 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
408 .requested_dyn_range_measur_type[i] =
409 pstr_drc_interface->drc_ctrl_interface
410 .requested_dyn_rng_measurement_type[i];
411 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
412 }
413 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
414 .requested_dyn_range_range_flag[i] !=
415 pstr_drc_interface->drc_ctrl_interface
416 .requested_dyn_range_is_single_val_flag[i]) {
417 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
418 .requested_dyn_range_range_flag[i] =
419 pstr_drc_interface->drc_ctrl_interface
420 .requested_dyn_range_is_single_val_flag[i];
421 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
422 }
423 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
424 .requested_dyn_range_range_flag[i] == 0) {
425 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
426 .requested_dyn_range_value[i] !=
427 pstr_drc_interface->drc_ctrl_interface
428 .requested_dyn_range_value[i]) {
429 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
430 .requested_dyn_range_value[i] =
431 pstr_drc_interface->drc_ctrl_interface
432 .requested_dyn_range_value[i];
433 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
434 }
435 } else {
436 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
437 .requested_dyn_range_min_val[i] !=
438 pstr_drc_interface->drc_ctrl_interface
439 .requested_dyn_range_min_val[i]) {
440 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
441 .requested_dyn_range_min_val[i] =
442 pstr_drc_interface->drc_ctrl_interface
443 .requested_dyn_range_min_val[i];
444 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
445 }
446 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
447 .requested_dyn_range_max_val[i] !=
448 pstr_drc_interface->drc_ctrl_interface
449 .requested_dyn_range_max_val[i]) {
450 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
451 .requested_dyn_range_max_val[i] =
452 pstr_drc_interface->drc_ctrl_interface
453 .requested_dyn_range_max_val[i];
454 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
455 }
456 }
457 break;
458 case 2:
459 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
460 .requested_drc_characteristic[i] !=
461 pstr_drc_interface->drc_ctrl_interface
462 .requested_drc_characteristic[i]) {
463 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
464 .requested_drc_characteristic[i] =
465 pstr_drc_interface->drc_ctrl_interface
466 .requested_drc_characteristic[i];
467 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
468 }
469 break;
470 }
471 }
472 }
473 }
474 if (pstr_drc_interface->drc_parameter_interface_flag) {
475 if (pstr_drc_interface->drc_parameter_interface.change_compress) {
476 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress !=
477 pstr_drc_interface->drc_parameter_interface.compress) {
478 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress =
479 pstr_drc_interface->drc_parameter_interface.compress;
480 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
481 }
482 }
483 if (pstr_drc_interface->drc_parameter_interface.change_boost) {
484 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost !=
485 pstr_drc_interface->drc_parameter_interface.boost) {
486 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost =
487 pstr_drc_interface->drc_parameter_interface.boost;
488 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
489 }
490 }
491 if (pstr_drc_interface->drc_parameter_interface
492 .change_drc_characteristic_target) {
493 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
494 .drc_characteristic_target !=
495 pstr_drc_interface->drc_parameter_interface
496 .drc_characteristic_target) {
497 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
498 .drc_characteristic_target =
499 pstr_drc_interface->drc_parameter_interface
500 .drc_characteristic_target;
501 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
502 }
503 }
504 }
505 if (pstr_drc_interface->drc_uni_interface_ext_flag) {
506 ia_drc_uni_interface_ext_struct* drc_uni_interface_ext =
507 &pstr_drc_interface->drc_uni_interface_ext;
508 if (drc_uni_interface_ext->loudness_eq_parameter_interface_flag) {
509 ia_loudness_eq_parameter_interface_struct*
510 loudness_eq_parameter_interface =
511 &drc_uni_interface_ext->loudness_eq_parameter_interface;
512 if (loudness_eq_parameter_interface->loudness_eq_request_flag) {
513 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request =
514 loudness_eq_parameter_interface->loudness_eq_request;
515 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.sensitivity =
516 loudness_eq_parameter_interface->sensitivity;
517 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.playback_gain =
518 loudness_eq_parameter_interface->playback_gain;
519 }
520 }
521 if (drc_uni_interface_ext->eq_ctrl_interface_flag) {
522 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request =
523 drc_uni_interface_ext->eq_ctrl_interface.eq_set_purpose_request;
524 }
525 }
526 }
527
528 return;
529 }
530