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