xref: /aosp_15_r20/external/libxaac/test/encoder/impd_drc_user_config.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1 /******************************************************************************
2  *                                                                            *
3  * Copyright (C) 2023 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 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include "ixheaac_type_def.h"
25 #include "iusace_bitbuffer.h"
26 #include "impd_drc_common_enc.h"
27 #include "impd_drc_uni_drc.h"
28 #include "impd_drc_tables.h"
29 #include "impd_drc_api.h"
30 #include "impd_drc_uni_drc_eq.h"
31 #include "impd_drc_uni_drc_filter_bank.h"
32 #include "impd_drc_gain_enc.h"
33 #include "impd_drc_struct_def.h"
34 #include "impd_drc_enc.h"
35 #include "impd_drc_user_config.h"
36 
impd_drc_get_float_value(FILE * fp)37 static FLOAT32 impd_drc_get_float_value(FILE *fp) {
38   WORD32 i = 0;
39   FLOAT32 result = 0.0f;
40   CHAR8 line[1024];
41   pCHAR8 retval;
42   retval = fgets(line, sizeof(line), fp);
43   if (retval) {
44     pCHAR8 c = line;
45     while ((line[0] == '#' || line[0] == '\n') && (retval != NULL)) {
46       retval = fgets(line, sizeof(line), fp);
47     }
48     while (line[i] != ':') {
49       c++;
50       i++;
51     }
52     c++;
53     result = (FLOAT32)atof(c);
54   }
55   return result;
56 }
57 
impd_drc_get_integer_value(FILE * fp)58 static WORD32 impd_drc_get_integer_value(FILE *fp) {
59   WORD32 i = 0;
60   WORD32 result = 0;
61   CHAR8 line[1024];
62   pCHAR8 retval;
63   retval = fgets(line, sizeof(line), fp);
64   if (retval) {
65     pCHAR8 c = line;
66     while ((line[0] == '#' || line[0] == '\n') && (retval != NULL)) {
67       retval = fgets(line, sizeof(line), fp);
68     }
69     while (line[i] != ':') {
70       c++;
71       i++;
72     }
73     c++;
74     if (c[0] == '0' && c[1] == 'x') {
75       result = (WORD32)strtol(c, NULL, 16);
76     } else {
77       result = atoi(c);
78     }
79   }
80   return result;
81 }
82 
ixheaace_read_drc_config_params(FILE * fp,ia_drc_enc_params_struct * pstr_enc_params,ia_drc_uni_drc_config_struct * pstr_uni_drc_config,ia_drc_loudness_info_set_struct * pstr_enc_loudness_info_set,ia_drc_uni_drc_gain_ext_struct * pstr_enc_gain_extension,WORD32 in_ch)83 VOID ixheaace_read_drc_config_params(FILE *fp, ia_drc_enc_params_struct *pstr_enc_params,
84                                      ia_drc_uni_drc_config_struct *pstr_uni_drc_config,
85                                      ia_drc_loudness_info_set_struct *pstr_enc_loudness_info_set,
86                                      ia_drc_uni_drc_gain_ext_struct *pstr_enc_gain_extension,
87                                      WORD32 in_ch) {
88   WORD32 n, g, s, m, ch, p;
89   WORD32 gain_set_channels;
90 
91   pstr_enc_params->delay_mode = DELAY_MODE_REGULAR_DELAY;
92   pstr_uni_drc_config->sample_rate_present = 1;
93   pstr_uni_drc_config->str_drc_coefficients_uni_drc->drc_frame_size_present = 0;
94   pstr_uni_drc_config->loudness_info_set_present = 1;
95 
96   /***********  str_drc_instructions_uni_drc  *************/
97 
98   pstr_uni_drc_config->drc_instructions_uni_drc_count = impd_drc_get_integer_value(fp);
99   pstr_uni_drc_config->drc_instructions_uni_drc_count =
100       MIN(pstr_uni_drc_config->drc_instructions_uni_drc_count, MAX_DRC_INSTRUCTIONS_COUNT);
101   for (n = 0; n < pstr_uni_drc_config->drc_instructions_uni_drc_count; n++) {
102     ia_drc_instructions_uni_drc *pstr_drc_instructions_uni_drc =
103         &pstr_uni_drc_config->str_drc_instructions_uni_drc[n];
104     pstr_drc_instructions_uni_drc->drc_set_id = n + 1;
105     pstr_drc_instructions_uni_drc->downmix_id = impd_drc_get_integer_value(fp);
106     pstr_drc_instructions_uni_drc->additional_downmix_id_present = 0;
107     pstr_drc_instructions_uni_drc->additional_downmix_id_count = 0;
108     pstr_drc_instructions_uni_drc->drc_location = 1;
109     pstr_drc_instructions_uni_drc->depends_on_drc_set_present = 0;
110     pstr_drc_instructions_uni_drc->depends_on_drc_set = 0;
111     pstr_drc_instructions_uni_drc->no_independent_use = 0;
112     pstr_drc_instructions_uni_drc->drc_set_effect = impd_drc_get_integer_value(fp);
113     pstr_drc_instructions_uni_drc->drc_set_target_loudness_present = 0;
114     pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_upper = 0;
115     pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower_present = 0;
116     pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower = 0;
117 
118     gain_set_channels = impd_drc_get_integer_value(fp);
119     gain_set_channels = MIN(gain_set_channels, MAX_CHANNEL_COUNT);
120     for (ch = 0; ch < gain_set_channels; ch++) {
121       pstr_drc_instructions_uni_drc->gain_set_index[ch] = impd_drc_get_integer_value(fp);
122     }
123     for (; ch < MAX_CHANNEL_COUNT; ch++) {
124       if (gain_set_channels > 0) {
125         pstr_drc_instructions_uni_drc->gain_set_index[ch] =
126             pstr_drc_instructions_uni_drc->gain_set_index[gain_set_channels - 1];
127       } else {
128         pstr_drc_instructions_uni_drc->gain_set_index[ch] = 0;
129       }
130     }
131 
132     pstr_drc_instructions_uni_drc->num_drc_channel_groups = impd_drc_get_integer_value(fp);
133     pstr_drc_instructions_uni_drc->num_drc_channel_groups =
134         MIN(pstr_drc_instructions_uni_drc->num_drc_channel_groups, MAX_CHANNEL_GROUP_COUNT);
135     for (g = 0; g < pstr_drc_instructions_uni_drc->num_drc_channel_groups; g++) {
136       pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_scaling_present[0] = 0;
137       pstr_drc_instructions_uni_drc->str_gain_modifiers[g].attenuation_scaling[0] = 1.5f;
138       pstr_drc_instructions_uni_drc->str_gain_modifiers[g].amplification_scaling[0] = 1.5f;
139       pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset_present[0] = 0;
140       pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset[0] = 8.0f;
141     }
142 
143     pstr_drc_instructions_uni_drc->limiter_peak_target_present = 0;
144     pstr_drc_instructions_uni_drc->limiter_peak_target = 0.0f;
145     pstr_drc_instructions_uni_drc->drc_instructions_type = 0;
146     pstr_drc_instructions_uni_drc->mae_group_id = 0;
147     pstr_drc_instructions_uni_drc->mae_group_preset_id = 0;
148   }
149 
150   /***********  str_drc_coefficients_uni_drc  *************/
151 
152   pstr_uni_drc_config->drc_coefficients_uni_drc_count = impd_drc_get_integer_value(fp);
153   pstr_uni_drc_config->drc_coefficients_uni_drc_count =
154       MIN(pstr_uni_drc_config->drc_coefficients_uni_drc_count, MAX_DRC_COEFF_COUNT);
155   for (n = 0; n < pstr_uni_drc_config->drc_coefficients_uni_drc_count; n++) {
156     ia_drc_coefficients_uni_drc_struct *pstr_drc_coefficients_uni_drc =
157         &pstr_uni_drc_config->str_drc_coefficients_uni_drc[n];
158     pstr_drc_coefficients_uni_drc->drc_location = 1;
159     pstr_drc_coefficients_uni_drc->gain_set_count = impd_drc_get_integer_value(fp);
160     pstr_drc_coefficients_uni_drc->gain_set_count =
161         MIN(pstr_drc_coefficients_uni_drc->gain_set_count, GAIN_SET_COUNT_MAX);
162     for (s = 0; s < pstr_drc_coefficients_uni_drc->gain_set_count; s++) {
163       pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_coding_profile = 0;
164       pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_interpolation_type = 1;
165       pstr_drc_coefficients_uni_drc->str_gain_set_params[s].full_frame = 0;
166       pstr_drc_coefficients_uni_drc->str_gain_set_params[s].time_alignment = 0;
167       pstr_drc_coefficients_uni_drc->str_gain_set_params[s].time_delta_min_present = 0;
168       pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count =
169           impd_drc_get_integer_value(fp);
170       pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count =
171           MIN(pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count, MAX_BAND_COUNT);
172       if (pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count == 1) {
173         pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].nb_points =
174             impd_drc_get_integer_value(fp);
175         pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].nb_points =
176             MIN(pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].nb_points,
177                 MAX_GAIN_POINTS);
178         for (p = 0;
179              p < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].nb_points;
180              p++) {
181           pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].gain_points[p].x =
182               impd_drc_get_float_value(fp);
183           pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].gain_points[p].y =
184               impd_drc_get_float_value(fp);
185         }
186         pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].width =
187             impd_drc_get_float_value(fp);
188         pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].attack =
189             impd_drc_get_float_value(fp);
190         pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].decay =
191             impd_drc_get_float_value(fp);
192         pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].drc_characteristic =
193             0;
194         pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
195             .gain_params[0]
196             .crossover_freq_index = 0;
197       } else {
198         for (m = 0; m < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count; m++) {
199           pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].nb_points =
200               impd_drc_get_integer_value(fp);
201           pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].nb_points =
202               MIN(pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].nb_points,
203                   MAX_GAIN_POINTS);
204           for (p = 0;
205                p < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].nb_points;
206                p++) {
207             pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
208                 .gain_params[m]
209                 .gain_points[p]
210                 .x = impd_drc_get_float_value(fp);
211             pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
212                 .gain_params[m]
213                 .gain_points[p]
214                 .y = impd_drc_get_float_value(fp);
215           }
216           pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].width =
217               impd_drc_get_float_value(fp);
218           pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].attack =
219               impd_drc_get_float_value(fp);
220           pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].decay =
221               impd_drc_get_float_value(fp);
222           pstr_drc_coefficients_uni_drc->str_gain_set_params[s].drc_band_type = 0;
223           pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
224               .gain_params[m]
225               .start_sub_band_index = impd_drc_get_integer_value(fp);
226           pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
227               .gain_params[m]
228               .drc_characteristic = 0;
229           pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
230               .gain_params[m]
231               .crossover_freq_index = 0;
232         }
233       }
234     }
235   }
236   /***********  str_channel_layout  *************/
237 
238   pstr_uni_drc_config->str_channel_layout.layout_signaling_present = 0;
239   pstr_uni_drc_config->str_channel_layout.defined_layout = 0;
240   pstr_uni_drc_config->str_channel_layout.speaker_position[0] = 0;
241 
242   /***********  str_downmix_instructions  *************/
243 
244   pstr_uni_drc_config->downmix_instructions_count = 0;
245 
246   pstr_uni_drc_config->drc_description_basic_present = 0;
247 
248   pstr_uni_drc_config->uni_drc_config_ext_present = 1;
249   if (pstr_uni_drc_config->uni_drc_config_ext_present) {
250     pstr_uni_drc_config->str_uni_drc_config_ext.uni_drc_config_ext_type[0] = UNIDRC_CONF_EXT_V1;
251 
252     pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_present = 1;
253     if (pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_present) {
254 
255       /***********  str_downmix_instructions_v1  *************/
256       pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_count = impd_drc_get_integer_value(fp);
257 
258       pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_count =
259         MIN(pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_count, MAX_DOWNMIX_INSTRUCTION_COUNT);
260       for (n = 0; n < pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_count; n++)
261       {
262         ia_drc_downmix_instructions_struct *pstr_downmix_instructions_v1 =
263           &pstr_uni_drc_config->str_uni_drc_config_ext.str_downmix_instructions_v1[n];
264         pstr_downmix_instructions_v1->downmix_id = n + 1;
265         pstr_downmix_instructions_v1->target_ch_count = 1;
266         pstr_downmix_instructions_v1->target_layout = impd_drc_get_integer_value(fp);
267         pstr_downmix_instructions_v1->downmix_coefficients_present = 1;
268         if (pstr_downmix_instructions_v1->downmix_coefficients_present) {
269           FLOAT32 dwn_mix_coeff = 0.0f;
270           for (s = 0; s < pstr_downmix_instructions_v1->target_layout; s++) {
271             dwn_mix_coeff = impd_drc_get_float_value(fp);
272             for (ch = 0; ch < in_ch; ch++) {
273               pstr_downmix_instructions_v1->downmix_coeff[in_ch * s + ch] = dwn_mix_coeff;
274             }
275           }
276         }
277       }
278     }
279 
280     pstr_uni_drc_config->str_uni_drc_config_ext.drc_coeffs_and_instructions_uni_drc_v1_present = 1;
281     if (pstr_uni_drc_config->str_uni_drc_config_ext.drc_coeffs_and_instructions_uni_drc_v1_present) {
282 
283       /***********  str_drc_coefficients_uni_drc_v1  *************/
284       pstr_uni_drc_config->str_uni_drc_config_ext.drc_coefficients_uni_drc_v1_count = impd_drc_get_integer_value(fp);
285 
286       pstr_uni_drc_config->str_uni_drc_config_ext.drc_coefficients_uni_drc_v1_count =
287         MIN(pstr_uni_drc_config->str_uni_drc_config_ext.drc_coefficients_uni_drc_v1_count, MAX_DRC_COEFF_COUNT);
288       for (n = 0; n < pstr_uni_drc_config->str_uni_drc_config_ext.drc_coefficients_uni_drc_v1_count; n++) {
289         ia_drc_coefficients_uni_drc_struct *pstr_drc_coefficients_uni_drc_v1 =
290           &pstr_uni_drc_config->str_uni_drc_config_ext.str_drc_coefficients_uni_drc_v1[n];
291         pstr_drc_coefficients_uni_drc_v1->drc_location = 1;
292         pstr_drc_coefficients_uni_drc_v1->gain_set_count = impd_drc_get_integer_value(fp);
293         pstr_drc_coefficients_uni_drc_v1->gain_set_count =
294           MIN(pstr_drc_coefficients_uni_drc_v1->gain_set_count, GAIN_SET_COUNT_MAX);
295         for (s = 0; s < pstr_drc_coefficients_uni_drc_v1->gain_set_count; s++) {
296           pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_coding_profile = 0;
297           pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_interpolation_type = 1;
298           pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].full_frame = 0;
299           pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].time_alignment = 0;
300           pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].time_delta_min_present = 0;
301           pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count =
302             impd_drc_get_integer_value(fp);
303           pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count =
304             MIN(pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count, MAX_BAND_COUNT);
305           if (pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count == 1) {
306             pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].nb_points =
307               impd_drc_get_integer_value(fp);
308             pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].nb_points =
309               MIN(pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].nb_points,
310                 MAX_GAIN_POINTS);
311             for (p = 0;
312               p < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].nb_points;
313               p++) {
314               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].gain_points[p].x =
315                 impd_drc_get_float_value(fp);
316               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].gain_points[p].y =
317                 impd_drc_get_float_value(fp);
318             }
319             pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].width =
320               impd_drc_get_float_value(fp);
321             pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].attack =
322               impd_drc_get_float_value(fp);
323             pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].decay =
324               impd_drc_get_float_value(fp);
325             pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].drc_characteristic =
326               0;
327             pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
328               .gain_params[0]
329               .crossover_freq_index = 0;
330           }
331           else {
332             for (m = 0; m < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count; m++) {
333               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].nb_points =
334                 impd_drc_get_integer_value(fp);
335               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].nb_points =
336                 MIN(pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].nb_points,
337                   MAX_GAIN_POINTS);
338               for (p = 0;
339                 p < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].nb_points;
340                 p++) {
341                 pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
342                   .gain_params[m]
343                   .gain_points[p]
344                   .x = impd_drc_get_float_value(fp);
345                 pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
346                   .gain_params[m]
347                   .gain_points[p]
348                   .y = impd_drc_get_float_value(fp);
349               }
350               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].width =
351                 impd_drc_get_float_value(fp);
352               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].attack =
353                 impd_drc_get_float_value(fp);
354               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].decay =
355                 impd_drc_get_float_value(fp);
356               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].drc_band_type = 0;
357               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
358                 .gain_params[m]
359                 .start_sub_band_index = impd_drc_get_integer_value(fp);
360               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
361                 .gain_params[m]
362                 .drc_characteristic = 0;
363               pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
364                 .gain_params[m]
365                 .crossover_freq_index = 0;
366             }
367           }
368         }
369       }
370 
371       /***********  str_drc_instructions_uni_drc_v1  *************/
372       pstr_uni_drc_config->str_uni_drc_config_ext.drc_instructions_uni_drc_v1_count = impd_drc_get_integer_value(fp);
373       pstr_uni_drc_config->str_uni_drc_config_ext.drc_instructions_uni_drc_v1_count =
374         MIN(pstr_uni_drc_config->str_uni_drc_config_ext.drc_instructions_uni_drc_v1_count, MAX_DRC_INSTRUCTIONS_COUNT);
375       for (n = 0; n < pstr_uni_drc_config->str_uni_drc_config_ext.drc_instructions_uni_drc_v1_count; n++) {
376         ia_drc_instructions_uni_drc *pstr_drc_instructions_uni_drc =
377           &pstr_uni_drc_config->str_uni_drc_config_ext.str_drc_instructions_uni_drc_v1[n];
378         pstr_drc_instructions_uni_drc->drc_set_id = n + 1;
379         pstr_drc_instructions_uni_drc->downmix_id = impd_drc_get_integer_value(fp);
380         pstr_drc_instructions_uni_drc->additional_downmix_id_present = 0;
381         pstr_drc_instructions_uni_drc->additional_downmix_id_count = 0;
382         pstr_drc_instructions_uni_drc->drc_location = 1;
383         pstr_drc_instructions_uni_drc->depends_on_drc_set_present = 0;
384         pstr_drc_instructions_uni_drc->depends_on_drc_set = 0;
385         pstr_drc_instructions_uni_drc->no_independent_use = 0;
386         pstr_drc_instructions_uni_drc->drc_set_effect = impd_drc_get_integer_value(fp);
387         pstr_drc_instructions_uni_drc->drc_set_target_loudness_present = 0;
388         pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_upper = 0;
389         pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower_present = 0;
390         pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower = 0;
391 
392         gain_set_channels = impd_drc_get_integer_value(fp);
393         gain_set_channels = MIN(gain_set_channels, MAX_CHANNEL_COUNT);
394         for (ch = 0; ch < gain_set_channels; ch++) {
395           pstr_drc_instructions_uni_drc->gain_set_index[ch] = impd_drc_get_integer_value(fp);
396         }
397         for (; ch < MAX_CHANNEL_COUNT; ch++) {
398           if (gain_set_channels > 0) {
399             pstr_drc_instructions_uni_drc->gain_set_index[ch] =
400               pstr_drc_instructions_uni_drc->gain_set_index[gain_set_channels - 1];
401           }
402           else {
403             pstr_drc_instructions_uni_drc->gain_set_index[ch] = 0;
404           }
405         }
406 
407         pstr_drc_instructions_uni_drc->num_drc_channel_groups = impd_drc_get_integer_value(fp);
408         pstr_drc_instructions_uni_drc->num_drc_channel_groups =
409           MIN(pstr_drc_instructions_uni_drc->num_drc_channel_groups, MAX_CHANNEL_GROUP_COUNT);
410         for (g = 0; g < pstr_drc_instructions_uni_drc->num_drc_channel_groups; g++) {
411           pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_scaling_present[0] = 0;
412           pstr_drc_instructions_uni_drc->str_gain_modifiers[g].attenuation_scaling[0] = 1.5f;
413           pstr_drc_instructions_uni_drc->str_gain_modifiers[g].amplification_scaling[0] = 1.5f;
414           pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset_present[0] = 0;
415           pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset[0] = 8.0f;
416         }
417 
418         pstr_drc_instructions_uni_drc->limiter_peak_target_present = 0;
419         pstr_drc_instructions_uni_drc->limiter_peak_target = 0.0f;
420         pstr_drc_instructions_uni_drc->drc_instructions_type = 0;
421         pstr_drc_instructions_uni_drc->mae_group_id = 0;
422         pstr_drc_instructions_uni_drc->mae_group_preset_id = 0;
423       }
424     }
425   }
426   pstr_enc_loudness_info_set->loudness_info_set_ext_present = 0;
427   pstr_enc_gain_extension->uni_drc_gain_ext_present = 0;
428 }
429