aboutsummaryrefslogtreecommitdiff
path: root/decoder/drc_src/impd_drc_selection_process_init.c
blob: 4a1ae6324d6aeccfb69ae457ebbd74762ee5d6c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
/******************************************************************************
 *
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "impd_type_def.h"
#include "impd_drc_extr_delta_coded_info.h"
#include "impd_drc_common.h"
#include "impd_drc_struct.h"
#include "impd_drc_interface.h"
#include "impd_drc_selection_process.h"

WORD32 impd_drc_sel_proc_init_dflt(
    ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc) {
  if (pstr_drc_uni_sel_proc != NULL) {
    pstr_drc_uni_sel_proc->first_frame = 0;

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count = -1;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout = -1;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type =
        0;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 0;

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode = 0;

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter = 0;

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_normalization_on =
        0;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness = -24.0f;

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_deviation_max =
        LOUDNESS_DEVIATION_MAX_DEFAULT;

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_method =
        USER_METHOD_DEFINITION_DEFAULT;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_system =
        USER_MEASUREMENT_SYSTEM_DEFAULT;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
        .loudness_measurement_pre_proc = USER_LOUDNESS_PREPROCESSING_DEFAULT;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.device_cut_off_frequency =
        500;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_db_max =
        LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
        .loudness_norm_gain_modification_db = 0.0f;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max = 0.0f;
    if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter == 1) {
      pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max =
          6.0f;
    }

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.dynamic_range_control_on = 1;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_bands_supported = 4;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_drc_feature_requests = 0;

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost = 1.f;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress = 1.f;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_characteristic_target =
        0;

    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request =
        LOUD_EQ_REQUEST_OFF;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request =
        EQ_PURPOSE_EQ_OFF;
    pstr_drc_uni_sel_proc->compl_level_supported_total =
        COMPLEXITY_LEVEL_SUPPORTED_TOTAL;

    pstr_drc_uni_sel_proc->drc_inst_index_sel = -1;
    pstr_drc_uni_sel_proc->drc_coef_index_sel = -1;
    pstr_drc_uni_sel_proc->downmix_inst_index_sel = -1;
    pstr_drc_uni_sel_proc->drc_instructions_index[0] = -1;
    pstr_drc_uni_sel_proc->drc_instructions_index[1] = -1;
    pstr_drc_uni_sel_proc->drc_instructions_index[2] = -1;
    pstr_drc_uni_sel_proc->drc_instructions_index[3] = -1;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_peak_level_db = 0;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
        .loudness_normalization_gain_db = 0;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_loudness =
        UNDEFINED_LOUDNESS_VALUE;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.num_sel_drc_sets = 0;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id = 0;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.base_channel_count = 0;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count = 0;
    pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.downmix_matrix_present = 0;

    pstr_drc_uni_sel_proc->eq_inst_index[0] = -1;
    pstr_drc_uni_sel_proc->eq_inst_index[1] = -1;
    pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
  } else {
    return 1;
  }

  return 0;
}
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) {
  if (pstr_drc_uni_sel_proc != NULL &&
      pstr_drc_sel_proc_params_struct != NULL) {
    if (memcmp(&pstr_drc_uni_sel_proc->uni_drc_sel_proc_params,
               pstr_drc_sel_proc_params_struct,
               sizeof(ia_drc_sel_proc_params_struct))) {
      pstr_drc_uni_sel_proc->uni_drc_sel_proc_params =
          *pstr_drc_sel_proc_params_struct;
      pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
    }
  }

  return 0;
}
VOID impd_drc_sel_proc_init_interface_params(
    ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
    ia_drc_interface_struct* pstr_drc_interface) {
  WORD32 i, j;

  if (pstr_drc_uni_sel_proc != NULL && pstr_drc_interface != NULL) {
    if (pstr_drc_interface->system_interface_flag) {
      if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .target_config_request_type !=
          pstr_drc_interface->system_interface.target_config_request_type) {
        pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
            .target_config_request_type =
            pstr_drc_interface->system_interface.target_config_request_type;
        pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
      }
      switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                  .target_config_request_type) {
        case 0:
          if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                  .num_downmix_id_requests !=
              pstr_drc_interface->system_interface.num_downmix_id_requests) {
            pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .num_downmix_id_requests =
                pstr_drc_interface->system_interface.num_downmix_id_requests;
            pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
          }
          for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                              .num_downmix_id_requests;
               i++) {
            if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                    .requested_dwnmix_id[i] !=
                pstr_drc_interface->system_interface.requested_dwnmix_id[i]) {
              pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                  .requested_dwnmix_id[i] =
                  pstr_drc_interface->system_interface.requested_dwnmix_id[i];
              pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
            }
          }
          break;
        case 1:
          if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                  .requested_target_layout !=
              pstr_drc_interface->system_interface.requested_target_layout) {
            pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .requested_target_layout =
                pstr_drc_interface->system_interface.requested_target_layout;
            pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
          }
          break;
        case 2:
          if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                  .requested_target_ch_count !=
              pstr_drc_interface->system_interface.requested_target_ch_count) {
            pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .requested_target_ch_count =
                pstr_drc_interface->system_interface.requested_target_ch_count;
            pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
          }
          break;
      }
    }
    if (pstr_drc_interface->loudness_norm_ctrl_interface_flag) {
      if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .loudness_normalization_on !=
          pstr_drc_interface->loudness_norm_ctrl_interface
              .loudness_normalization_on) {
        pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
            .loudness_normalization_on =
            pstr_drc_interface->loudness_norm_ctrl_interface
                .loudness_normalization_on;
        pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
      }
      if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .loudness_normalization_on) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness !=
            pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness =
              pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
    }
    if (pstr_drc_interface->loudness_norm_parameter_interface_flag) {
      if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode !=
          pstr_drc_interface->loudness_norm_param_interface.album_mode) {
        pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode =
            pstr_drc_interface->loudness_norm_param_interface.album_mode;
        pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
      }
      if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter !=
          pstr_drc_interface->loudness_norm_param_interface.peak_limiter) {
        pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter =
            pstr_drc_interface->loudness_norm_param_interface.peak_limiter;
        pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
      }
      if (pstr_drc_interface->loudness_norm_param_interface
              .change_loudness_deviation_max) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .loudness_deviation_max !=
            pstr_drc_interface->loudness_norm_param_interface
                .loudness_deviation_max) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .loudness_deviation_max =
              pstr_drc_interface->loudness_norm_param_interface
                  .loudness_deviation_max;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->loudness_norm_param_interface
              .change_loudness_measur_method) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .loudness_measurement_method !=
            pstr_drc_interface->loudness_norm_param_interface
                .loudness_measurement_method) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .loudness_measurement_method =
              pstr_drc_interface->loudness_norm_param_interface
                  .loudness_measurement_method;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->loudness_norm_param_interface
              .change_loudness_measur_pre_proc) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .loudness_measurement_pre_proc !=
            pstr_drc_interface->loudness_norm_param_interface
                .loudness_measurement_pre_proc) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .loudness_measurement_pre_proc =
              pstr_drc_interface->loudness_norm_param_interface
                  .loudness_measurement_pre_proc;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->loudness_norm_param_interface
              .change_loudness_measur_system) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .loudness_measurement_system !=
            pstr_drc_interface->loudness_norm_param_interface
                .loudness_measurement_system) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .loudness_measurement_system =
              pstr_drc_interface->loudness_norm_param_interface
                  .loudness_measurement_system;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->loudness_norm_param_interface
              .change_device_cut_off_freq) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .device_cut_off_frequency !=
            pstr_drc_interface->loudness_norm_param_interface
                .device_cut_off_frequency) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .device_cut_off_frequency =
              pstr_drc_interface->loudness_norm_param_interface
                  .device_cut_off_frequency;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->loudness_norm_param_interface
              .change_loudness_norm_gain_db_max) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .loudness_norm_gain_db_max !=
            pstr_drc_interface->loudness_norm_param_interface
                .loudness_norm_gain_db_max) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .loudness_norm_gain_db_max =
              pstr_drc_interface->loudness_norm_param_interface
                  .loudness_norm_gain_db_max;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->loudness_norm_param_interface
              .change_loudness_norm_gain_modification_db) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .loudness_norm_gain_modification_db !=
            pstr_drc_interface->loudness_norm_param_interface
                .loudness_norm_gain_modification_db) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .loudness_norm_gain_modification_db =
              pstr_drc_interface->loudness_norm_param_interface
                  .loudness_norm_gain_modification_db;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->loudness_norm_param_interface
              .change_output_peak_level_max) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .output_peak_level_max !=
            pstr_drc_interface->loudness_norm_param_interface
                .output_peak_level_max) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max =
              pstr_drc_interface->loudness_norm_param_interface
                  .output_peak_level_max;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
    }
    if (pstr_drc_interface->drc_interface_flag) {
      if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .dynamic_range_control_on !=
          pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on) {
        pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
            .dynamic_range_control_on =
            pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on;
        pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        if (!pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                 .dynamic_range_control_on) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .num_drc_feature_requests = 0;
        }
      }
      if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .dynamic_range_control_on) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .num_drc_feature_requests !=
            pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .num_drc_feature_requests =
              pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
        for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                            .num_drc_feature_requests;
             i++) {
          if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                  .drc_feature_req_type[i] !=
              pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i]) {
            pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .drc_feature_req_type[i] =
                pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i];
            pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
          }
          switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .drc_feature_req_type[i]) {
            case 0:
              if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_num_drc_effects[i] !=
                  pstr_drc_interface->drc_ctrl_interface
                      .requested_num_drc_effects[i]) {
                pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                    .requested_num_drc_effects[i] =
                    pstr_drc_interface->drc_ctrl_interface
                        .requested_num_drc_effects[i];
                pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
              }
              if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .desired_num_drc_effects_of_requested[i] !=
                  pstr_drc_interface->drc_ctrl_interface
                      .desired_num_drc_effects_of_requested[i]) {
                pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                    .desired_num_drc_effects_of_requested[i] =
                    pstr_drc_interface->drc_ctrl_interface
                        .desired_num_drc_effects_of_requested[i];
                pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
              }
              for (j = 0; j < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                                  .requested_num_drc_effects[i];
                   j++) {
                if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                        .requested_drc_effect_type[i][j] !=
                    pstr_drc_interface->drc_ctrl_interface
                        .requested_drc_effect_type[i][j]) {
                  pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_drc_effect_type[i][j] =
                      pstr_drc_interface->drc_ctrl_interface
                          .requested_drc_effect_type[i][j];
                  pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
                }
              }
              break;
            case 1:
              if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_dyn_range_measur_type[i] !=
                  pstr_drc_interface->drc_ctrl_interface
                      .requested_dyn_rng_measurement_type[i]) {
                pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                    .requested_dyn_range_measur_type[i] =
                    pstr_drc_interface->drc_ctrl_interface
                        .requested_dyn_rng_measurement_type[i];
                pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
              }
              if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_dyn_range_range_flag[i] !=
                  pstr_drc_interface->drc_ctrl_interface
                      .requested_dyn_range_is_single_val_flag[i]) {
                pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                    .requested_dyn_range_range_flag[i] =
                    pstr_drc_interface->drc_ctrl_interface
                        .requested_dyn_range_is_single_val_flag[i];
                pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
              }
              if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_dyn_range_range_flag[i] == 0) {
                if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                        .requested_dyn_range_value[i] !=
                    pstr_drc_interface->drc_ctrl_interface
                        .requested_dyn_range_value[i]) {
                  pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_dyn_range_value[i] =
                      pstr_drc_interface->drc_ctrl_interface
                          .requested_dyn_range_value[i];
                  pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
                }
              } else {
                if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                        .requested_dyn_range_min_val[i] !=
                    pstr_drc_interface->drc_ctrl_interface
                        .requested_dyn_range_min_val[i]) {
                  pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_dyn_range_min_val[i] =
                      pstr_drc_interface->drc_ctrl_interface
                          .requested_dyn_range_min_val[i];
                  pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
                }
                if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                        .requested_dyn_range_max_val[i] !=
                    pstr_drc_interface->drc_ctrl_interface
                        .requested_dyn_range_max_val[i]) {
                  pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_dyn_range_max_val[i] =
                      pstr_drc_interface->drc_ctrl_interface
                          .requested_dyn_range_max_val[i];
                  pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
                }
              }
              break;
            case 2:
              if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                      .requested_drc_characteristic[i] !=
                  pstr_drc_interface->drc_ctrl_interface
                      .requested_drc_characteristic[i]) {
                pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                    .requested_drc_characteristic[i] =
                    pstr_drc_interface->drc_ctrl_interface
                        .requested_drc_characteristic[i];
                pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
              }
              break;
          }
        }
      }
    }
    if (pstr_drc_interface->drc_parameter_interface_flag) {
      if (pstr_drc_interface->drc_parameter_interface.change_compress) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress !=
            pstr_drc_interface->drc_parameter_interface.compress) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress =
              pstr_drc_interface->drc_parameter_interface.compress;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->drc_parameter_interface.change_boost) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost !=
            pstr_drc_interface->drc_parameter_interface.boost) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost =
              pstr_drc_interface->drc_parameter_interface.boost;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
      if (pstr_drc_interface->drc_parameter_interface
              .change_drc_characteristic_target) {
        if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
                .drc_characteristic_target !=
            pstr_drc_interface->drc_parameter_interface
                .drc_characteristic_target) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
              .drc_characteristic_target =
              pstr_drc_interface->drc_parameter_interface
                  .drc_characteristic_target;
          pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
        }
      }
    }
    if (pstr_drc_interface->drc_uni_interface_ext_flag) {
      ia_drc_uni_interface_ext_struct* drc_uni_interface_ext =
          &pstr_drc_interface->drc_uni_interface_ext;
      if (drc_uni_interface_ext->loudness_eq_parameter_interface_flag) {
        ia_loudness_eq_parameter_interface_struct*
            loudness_eq_parameter_interface =
                &drc_uni_interface_ext->loudness_eq_parameter_interface;
        if (loudness_eq_parameter_interface->loudness_eq_request_flag) {
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request =
              loudness_eq_parameter_interface->loudness_eq_request;
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.sensitivity =
              loudness_eq_parameter_interface->sensitivity;
          pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.playback_gain =
              loudness_eq_parameter_interface->playback_gain;
        }
      }
      if (drc_uni_interface_ext->eq_ctrl_interface_flag) {
        pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request =
            drc_uni_interface_ext->eq_ctrl_interface.eq_set_purpose_request;
      }
    }
  }

  return;
}