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 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 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 } 130 WORD32 131 impd_drc_sel_proc_init_interface_params( 132 ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc, 133 ia_drc_interface_struct* pstr_drc_interface) { 134 WORD32 i, j; 135 136 if (pstr_drc_uni_sel_proc != NULL && pstr_drc_interface != NULL) { 137 if (pstr_drc_interface->system_interface_flag) { 138 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 139 .target_config_request_type != 140 pstr_drc_interface->system_interface.target_config_request_type) { 141 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 142 .target_config_request_type = 143 pstr_drc_interface->system_interface.target_config_request_type; 144 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 145 } 146 switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 147 .target_config_request_type) { 148 case 0: 149 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 150 .num_downmix_id_requests != 151 pstr_drc_interface->system_interface.num_downmix_id_requests) { 152 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 153 .num_downmix_id_requests = 154 pstr_drc_interface->system_interface.num_downmix_id_requests; 155 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 156 } 157 for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 158 .num_downmix_id_requests; 159 i++) { 160 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 161 .requested_dwnmix_id[i] != 162 pstr_drc_interface->system_interface.requested_dwnmix_id[i]) { 163 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 164 .requested_dwnmix_id[i] = 165 pstr_drc_interface->system_interface.requested_dwnmix_id[i]; 166 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 167 } 168 } 169 break; 170 case 1: 171 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 172 .requested_target_layout != 173 pstr_drc_interface->system_interface.requested_target_layout) { 174 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 175 .requested_target_layout = 176 pstr_drc_interface->system_interface.requested_target_layout; 177 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 178 } 179 break; 180 case 2: 181 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 182 .requested_target_ch_count != 183 pstr_drc_interface->system_interface.requested_target_ch_count) { 184 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 185 .requested_target_ch_count = 186 pstr_drc_interface->system_interface.requested_target_ch_count; 187 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 188 } 189 break; 190 } 191 } 192 if (pstr_drc_interface->loudness_norm_ctrl_interface_flag) { 193 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 194 .loudness_normalization_on != 195 pstr_drc_interface->loudness_norm_ctrl_interface 196 .loudness_normalization_on) { 197 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 198 .loudness_normalization_on = 199 pstr_drc_interface->loudness_norm_ctrl_interface 200 .loudness_normalization_on; 201 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 202 } 203 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 204 .loudness_normalization_on) { 205 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness != 206 pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness) { 207 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness = 208 pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness; 209 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 210 } 211 } 212 } 213 if (pstr_drc_interface->loudness_norm_parameter_interface_flag) { 214 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode != 215 pstr_drc_interface->loudness_norm_param_interface.album_mode) { 216 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode = 217 pstr_drc_interface->loudness_norm_param_interface.album_mode; 218 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 219 } 220 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter != 221 pstr_drc_interface->loudness_norm_param_interface.peak_limiter) { 222 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter = 223 pstr_drc_interface->loudness_norm_param_interface.peak_limiter; 224 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 225 } 226 if (pstr_drc_interface->loudness_norm_param_interface 227 .change_loudness_deviation_max) { 228 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 229 .loudness_deviation_max != 230 pstr_drc_interface->loudness_norm_param_interface 231 .loudness_deviation_max) { 232 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 233 .loudness_deviation_max = 234 pstr_drc_interface->loudness_norm_param_interface 235 .loudness_deviation_max; 236 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 237 } 238 } 239 if (pstr_drc_interface->loudness_norm_param_interface 240 .change_loudness_measur_method) { 241 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 242 .loudness_measurement_method != 243 pstr_drc_interface->loudness_norm_param_interface 244 .loudness_measurement_method) { 245 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 246 .loudness_measurement_method = 247 pstr_drc_interface->loudness_norm_param_interface 248 .loudness_measurement_method; 249 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 250 } 251 } 252 if (pstr_drc_interface->loudness_norm_param_interface 253 .change_loudness_measur_pre_proc) { 254 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 255 .loudness_measurement_pre_proc != 256 pstr_drc_interface->loudness_norm_param_interface 257 .loudness_measurement_pre_proc) { 258 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 259 .loudness_measurement_pre_proc = 260 pstr_drc_interface->loudness_norm_param_interface 261 .loudness_measurement_pre_proc; 262 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 263 } 264 } 265 if (pstr_drc_interface->loudness_norm_param_interface 266 .change_loudness_measur_system) { 267 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 268 .loudness_measurement_system != 269 pstr_drc_interface->loudness_norm_param_interface 270 .loudness_measurement_system) { 271 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 272 .loudness_measurement_system = 273 pstr_drc_interface->loudness_norm_param_interface 274 .loudness_measurement_system; 275 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 276 } 277 } 278 if (pstr_drc_interface->loudness_norm_param_interface 279 .change_device_cut_off_freq) { 280 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 281 .device_cut_off_frequency != 282 pstr_drc_interface->loudness_norm_param_interface 283 .device_cut_off_frequency) { 284 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 285 .device_cut_off_frequency = 286 pstr_drc_interface->loudness_norm_param_interface 287 .device_cut_off_frequency; 288 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 289 } 290 } 291 if (pstr_drc_interface->loudness_norm_param_interface 292 .change_loudness_norm_gain_db_max) { 293 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 294 .loudness_norm_gain_db_max != 295 pstr_drc_interface->loudness_norm_param_interface 296 .loudness_norm_gain_db_max) { 297 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 298 .loudness_norm_gain_db_max = 299 pstr_drc_interface->loudness_norm_param_interface 300 .loudness_norm_gain_db_max; 301 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 302 } 303 } 304 if (pstr_drc_interface->loudness_norm_param_interface 305 .change_loudness_norm_gain_modification_db) { 306 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 307 .loudness_norm_gain_modification_db != 308 pstr_drc_interface->loudness_norm_param_interface 309 .loudness_norm_gain_modification_db) { 310 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 311 .loudness_norm_gain_modification_db = 312 pstr_drc_interface->loudness_norm_param_interface 313 .loudness_norm_gain_modification_db; 314 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 315 } 316 } 317 if (pstr_drc_interface->loudness_norm_param_interface 318 .change_output_peak_level_max) { 319 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 320 .output_peak_level_max != 321 pstr_drc_interface->loudness_norm_param_interface 322 .output_peak_level_max) { 323 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max = 324 pstr_drc_interface->loudness_norm_param_interface 325 .output_peak_level_max; 326 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 327 } 328 } 329 } 330 if (pstr_drc_interface->drc_interface_flag) { 331 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 332 .dynamic_range_control_on != 333 pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on) { 334 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 335 .dynamic_range_control_on = 336 pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on; 337 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 338 if (!pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 339 .dynamic_range_control_on) { 340 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 341 .num_drc_feature_requests = 0; 342 } 343 } 344 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 345 .dynamic_range_control_on) { 346 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 347 .num_drc_feature_requests != 348 pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests) { 349 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 350 .num_drc_feature_requests = 351 pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests; 352 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 353 } 354 for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 355 .num_drc_feature_requests; 356 i++) { 357 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 358 .drc_feature_req_type[i] != 359 pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i]) { 360 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 361 .drc_feature_req_type[i] = 362 pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i]; 363 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 364 } 365 switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 366 .drc_feature_req_type[i]) { 367 case 0: 368 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 369 .requested_num_drc_effects[i] != 370 pstr_drc_interface->drc_ctrl_interface 371 .requested_num_drc_effects[i]) { 372 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 373 .requested_num_drc_effects[i] = 374 pstr_drc_interface->drc_ctrl_interface 375 .requested_num_drc_effects[i]; 376 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 377 } 378 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 379 .desired_num_drc_effects_of_requested[i] != 380 pstr_drc_interface->drc_ctrl_interface 381 .desired_num_drc_effects_of_requested[i]) { 382 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 383 .desired_num_drc_effects_of_requested[i] = 384 pstr_drc_interface->drc_ctrl_interface 385 .desired_num_drc_effects_of_requested[i]; 386 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 387 } 388 for (j = 0; j < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 389 .requested_num_drc_effects[i]; 390 j++) { 391 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 392 .requested_drc_effect_type[i][j] != 393 pstr_drc_interface->drc_ctrl_interface 394 .requested_drc_effect_type[i][j]) { 395 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 396 .requested_drc_effect_type[i][j] = 397 pstr_drc_interface->drc_ctrl_interface 398 .requested_drc_effect_type[i][j]; 399 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 400 } 401 } 402 break; 403 case 1: 404 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 405 .requested_dyn_range_measur_type[i] != 406 pstr_drc_interface->drc_ctrl_interface 407 .requested_dyn_rng_measurement_type[i]) { 408 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 409 .requested_dyn_range_measur_type[i] = 410 pstr_drc_interface->drc_ctrl_interface 411 .requested_dyn_rng_measurement_type[i]; 412 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 413 } 414 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 415 .requested_dyn_range_range_flag[i] != 416 pstr_drc_interface->drc_ctrl_interface 417 .requested_dyn_range_is_single_val_flag[i]) { 418 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 419 .requested_dyn_range_range_flag[i] = 420 pstr_drc_interface->drc_ctrl_interface 421 .requested_dyn_range_is_single_val_flag[i]; 422 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 423 } 424 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 425 .requested_dyn_range_range_flag[i] == 0) { 426 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 427 .requested_dyn_range_value[i] != 428 pstr_drc_interface->drc_ctrl_interface 429 .requested_dyn_range_value[i]) { 430 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 431 .requested_dyn_range_value[i] = 432 pstr_drc_interface->drc_ctrl_interface 433 .requested_dyn_range_value[i]; 434 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 435 } 436 } else { 437 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 438 .requested_dyn_range_min_val[i] != 439 pstr_drc_interface->drc_ctrl_interface 440 .requested_dyn_range_min_val[i]) { 441 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 442 .requested_dyn_range_min_val[i] = 443 pstr_drc_interface->drc_ctrl_interface 444 .requested_dyn_range_min_val[i]; 445 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 446 } 447 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 448 .requested_dyn_range_max_val[i] != 449 pstr_drc_interface->drc_ctrl_interface 450 .requested_dyn_range_max_val[i]) { 451 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 452 .requested_dyn_range_max_val[i] = 453 pstr_drc_interface->drc_ctrl_interface 454 .requested_dyn_range_max_val[i]; 455 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 456 } 457 } 458 break; 459 case 2: 460 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 461 .requested_drc_characteristic[i] != 462 pstr_drc_interface->drc_ctrl_interface 463 .requested_drc_characteristic[i]) { 464 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 465 .requested_drc_characteristic[i] = 466 pstr_drc_interface->drc_ctrl_interface 467 .requested_drc_characteristic[i]; 468 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 469 } 470 break; 471 } 472 } 473 } 474 } 475 if (pstr_drc_interface->drc_parameter_interface_flag) { 476 if (pstr_drc_interface->drc_parameter_interface.change_compress) { 477 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress != 478 pstr_drc_interface->drc_parameter_interface.compress) { 479 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress = 480 pstr_drc_interface->drc_parameter_interface.compress; 481 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 482 } 483 } 484 if (pstr_drc_interface->drc_parameter_interface.change_boost) { 485 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost != 486 pstr_drc_interface->drc_parameter_interface.boost) { 487 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost = 488 pstr_drc_interface->drc_parameter_interface.boost; 489 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 490 } 491 } 492 if (pstr_drc_interface->drc_parameter_interface 493 .change_drc_characteristic_target) { 494 if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 495 .drc_characteristic_target != 496 pstr_drc_interface->drc_parameter_interface 497 .drc_characteristic_target) { 498 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params 499 .drc_characteristic_target = 500 pstr_drc_interface->drc_parameter_interface 501 .drc_characteristic_target; 502 pstr_drc_uni_sel_proc->sel_proc_request_flag = 1; 503 } 504 } 505 } 506 if (pstr_drc_interface->drc_uni_interface_ext_flag) { 507 ia_drc_uni_interface_ext_struct* drc_uni_interface_ext = 508 &pstr_drc_interface->drc_uni_interface_ext; 509 if (drc_uni_interface_ext->loudness_eq_parameter_interface_flag) { 510 ia_loudness_eq_parameter_interface_struct* 511 loudness_eq_parameter_interface = 512 &drc_uni_interface_ext->loudness_eq_parameter_interface; 513 if (loudness_eq_parameter_interface->loudness_eq_request_flag) { 514 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request = 515 loudness_eq_parameter_interface->loudness_eq_request; 516 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.sensitivity = 517 loudness_eq_parameter_interface->sensitivity; 518 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.playback_gain = 519 loudness_eq_parameter_interface->playback_gain; 520 } 521 } 522 if (drc_uni_interface_ext->eq_ctrl_interface_flag) { 523 pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request = 524 drc_uni_interface_ext->eq_ctrl_interface.eq_set_purpose_request; 525 } 526 } 527 } 528 529 return 0; 530 } 531