aboutsummaryrefslogtreecommitdiff
path: root/decoder/drc_src/impd_drc_struct.h
blob: 5aa7e301da69a46ad0304cf8bb1e06732717bb42 (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
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
/******************************************************************************
 *
 * 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
*/
#ifndef IMPD_DRC_STURCT_H
#define IMPD_DRC_STURCT_H

#ifdef __cplusplus
extern "C" {
#endif

#define METHOD_DEFINITION_UNKNOWN_OTHER 0
#define METHOD_DEFINITION_PROGRAM_LOUDNESS 1
#define METHOD_DEFINITION_ANCHOR_LOUDNESS 2
#define METHOD_DEFINITION_MAX_OF_LOUDNESS_RANGE 3
#define METHOD_DEFINITION_MOMENTARY_LOUDNESS_MAX 4
#define METHOD_DEFINITION_SHORT_TERM_LOUDNESS_MAX 5
#define METHOD_DEFINITION_LOUDNESS_RANGE 6
#define METHOD_DEFINITION_MIXING_LEVEL 7
#define METHOD_DEFINITION_ROOM_TYPE 8
#define METHOD_DEFINITION_SHORT_TERM_LOUDNESS 9

#define MEASUREMENT_SYSTEM_UNKNOWN_OTHER 0
#define MEASUREMENT_SYSTEM_EBU_R_128 1
#define MEASUREMENT_SYSTEM_BS_1770_4 2
#define MEASUREMENT_SYSTEM_BS_1770_3 MEASUREMENT_SYSTEM_BS_1770_4
#define MEASUREMENT_SYSTEM_BS_1770_4_PRE_PROCESSING 3
#define MEASUREMENT_SYSTEM_BS_1770_3_PRE_PROCESSING \
  MEASUREMENT_SYSTEM_BS_1770_4_PRE_PROCESSING
#define MEASUREMENT_SYSTEM_USER 4
#define MEASUREMENT_SYSTEM_EXPERT_PANEL 5
#define MEASUREMENT_SYSTEM_BS_1771_1 6
#define MEASUREMENT_SYSTEM_RESERVED_A 7
#define MEASUREMENT_SYSTEM_RESERVED_B 8
#define MEASUREMENT_SYSTEM_RESERVED_C 9
#define MEASUREMENT_SYSTEM_RESERVED_D 10
#define MEASUREMENT_SYSTEM_RESERVED_E 11

#define RELIABILITY_UKNOWN 0
#define RELIABILITY_UNVERIFIED 1
#define RELIABILITY_CEILING 2
#define RELIABILITY_ACCURATE 3

#define EFFECT_BIT_COUNT 12

#define EFFECT_BIT_NONE (-1)
#define EFFECT_BIT_NIGHT 0x0001
#define EFFECT_BIT_NOISY 0x0002
#define EFFECT_BIT_LIMITED 0x0004
#define EFFECT_BIT_LOWLEVEL 0x0008
#define EFFECT_BIT_DIALOG 0x0010
#define EFFECT_BIT_GENERAL_COMPR 0x0020
#define EFFECT_BIT_EXPAND 0x0040
#define EFFECT_BIT_ARTISTIC 0x0080
#define EFFECT_BIT_CLIPPING 0x0100
#define EFFECT_BIT_FADE 0x0200
#define EFFECT_BIT_DUCK_OTHER 0x0400
#define EFFECT_BIT_DUCK_SELF 0x0800

#define GAIN_CODING_PROFILE_REGULAR 0
#define GAIN_CODING_PROFILE_FADING 1
#define GAIN_CODING_PROFILE_CLIPPING 2
#define GAIN_CODING_PROFILE_CONSTANT 3
#define GAIN_CODING_PROFILE_DUCKING GAIN_CODING_PROFILE_CLIPPING

#define GAIN_INTERPOLATION_TYPE_SPLINE 0
#define GAIN_INTERPOLATION_TYPE_LINEAR 1

#define USER_METHOD_DEFINITION_DEFAULT 0
#define USER_METHOD_DEFINITION_PROGRAM_LOUDNESS 1
#define USER_METHOD_DEFINITION_ANCHOR_LOUDNESS 2

#define USER_MEASUREMENT_SYSTEM_DEFAULT 0
#define USER_MEASUREMENT_SYSTEM_BS_1770_4 1
#define USER_MEASUREMENT_SYSTEM_BS_1770_3 USER_MEASUREMENT_SYSTEM_BS_1770_4
#define USER_MEASUREMENT_SYSTEM_USER 2
#define USER_MEASUREMENT_SYSTEM_EXPERT_PANEL 3
#define USER_MEASUREMENT_SYSTEM_RESERVED_A 4
#define USER_MEASUREMENT_SYSTEM_RESERVED_B 5
#define USER_MEASUREMENT_SYSTEM_RESERVED_C 6
#define USER_MEASUREMENT_SYSTEM_RESERVED_D 7
#define USER_MEASUREMENT_SYSTEM_RESERVED_E 8

#define USER_LOUDNESS_PREPROCESSING_DEFAULT 0
#define USER_LOUDNESS_PREPROCESSING_OFF 1
#define USER_LOUDNESS_PREPROCESSING_HIGHPASS 2

#define LOUDNESS_DEVIATION_MAX_DEFAULT 63
#define LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT 1000

#define SHORT_TERM_LOUDNESS_TO_AVG 0
#define MOMENTARY_LOUDNESS_TO_AVG 1
#define TOP_OF_LOUDNESS_RANGE_TO_AVG 2

#define DRC_COMPLEXITY_LEVEL_MAX 0xF
#define EQ_COMPLEXITY_LEVEL_MAX 0xF
#define COMPLEXITY_LEVEL_SUPPORTED_TOTAL 20.0f

#define COMPLEXITY_W_SUBBAND_EQ 2.5f
#define COMPLEXITY_W_FIR 0.4f
#define COMPLEXITY_W_IIR 5.0f
#define COMPLEXITY_W_MOD_TIME 1.0f
#define COMPLEXITY_W_MOD_SUBBAND 2.0f
#define COMPLEXITY_W_LAP 2.0f
#define COMPLEXITY_W_SHAPE 6.0f
#define COMPLEXITY_W_SPLINE 5.0f
#define COMPLEXITY_W_LINEAR 2.5f
#define COMPLEXITY_W_PARAM_DRC_FILT 5.0f
#define COMPLEXITY_W_PARAM_DRC_SUBBAND 5.0f
#define COMPLEXITY_W_PARAM_LIM_FILT 4.5f
#define COMPLEXITY_W_PARAM_DRC_ATTACK 136.0f

#define LEFT_SIDE 0
#define RIGHT_SIDE 1

#define CHARACTERISTIC_SIGMOID 0
#define CHARACTERISTIC_NODES 1
#define CHARACTERISTIC_PASS_THRU 2

#define GAINFORMAT_QMF32 0x1
#define GAINFORMAT_QMFHYBRID39 0x2
#define GAINFORMAT_QMF64 0x3
#define GAINFORMAT_QMFHYBRID71 0x4
#define GAINFORMAT_QMF128 0x5
#define GAINFORMAT_QMFHYBRID135 0x6
#define GAINFORMAT_UNIFORM 0x7

#define DRC_INPUT_LOUDNESS_TARGET (-31.0f)

#define SHAPE_FILTER_TYPE_OFF 0
#define SHAPE_FILTER_TYPE_LF_CUT 1
#define SHAPE_FILTER_TYPE_LF_BOOST 2
#define SHAPE_FILTER_TYPE_HF_CUT 3
#define SHAPE_FILTER_TYPE_HF_BOOST 4

#define SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE 1583.8931924611f

typedef struct {
  WORD32 type;
  FLOAT32 gain_offset;
  FLOAT32 y1_bound;
  FLOAT32 warped_gain_max;
  FLOAT32 factor;
  FLOAT32 coeff_sum;
  FLOAT32 partial_coeff_sum;
  FLOAT32 g_norm;
  FLOAT32 a1;
  FLOAT32 a2;
  FLOAT32 b1;
  FLOAT32 b2;
  FLOAT32 audio_in_state_1[MAX_CHANNEL_COUNT];
  FLOAT32 audio_in_state_2[MAX_CHANNEL_COUNT];
  FLOAT32 audio_out_state_1[MAX_CHANNEL_COUNT];
  FLOAT32 audio_out_state_2[MAX_CHANNEL_COUNT];
} ia_shape_filter_struct;

typedef struct {
  WORD32 shape_flter_block_flag;
  FLOAT32 drc_gain_last;
  ia_shape_filter_struct shape_filter[4];
} shape_filter_block;

typedef struct {
  WORD32 level_estim_k_weighting_type;
  WORD32 level_estim_integration_time_present;
  WORD32 level_estim_integration_time;
  WORD32 drc_curve_definition_type;
  WORD32 drc_characteristic;
  WORD32 node_count;
  WORD32 node_level[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
  WORD32 node_gain[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
  WORD32 drc_gain_smooth_parameters_present;
  WORD32 gain_smooth_attack_time_slow;
  WORD32 gain_smooth_release_time_slow;
  WORD32 gain_smooth_time_fast_present;
  WORD32 gain_smooth_attack_time_fast;
  WORD32 gain_smooth_release_time_fast;
  WORD32 gain_smooth_threshold_present;
  WORD32 gain_smooth_attack_threshold;
  WORD32 gain_smooth_rel_threshold;
  WORD32 gain_smooth_hold_off_count_present;
  WORD32 gain_smooth_hold_off;

  WORD32 disable_paramteric_drc;
} ia_parametric_drc_type_feed_forward_struct;

typedef struct {
  WORD32 parametric_lim_threshold_present;
  FLOAT32 parametric_lim_threshold;
  WORD32 parametric_lim_attack;
  WORD32 parametric_lim_release_present;
  WORD32 parametric_lim_release;
  WORD32 drc_characteristic;

  WORD32 disable_paramteric_drc;
} ia_parametric_drc_lim_struct;

typedef struct {
  WORD32 parametric_drc_id;
  WORD32 parametric_drc_look_ahead_flag;
  WORD32 parametric_drc_look_ahead;
  WORD32 parametric_drc_preset_id_present;
  WORD32 parametric_drc_preset_id;
  WORD32 parametric_drc_type;
  WORD32 len_bit_size;
  ia_parametric_drc_type_feed_forward_struct
      str_parametric_drc_type_feed_forward;
  ia_parametric_drc_lim_struct parametric_drc_lim;

  WORD32 drc_characteristic;
  WORD32 disable_paramteric_drc;
} ia_parametric_drc_instructions_struct;

typedef struct {
  WORD32 parametric_drc_id;
  WORD32 side_chain_config_type;
  WORD32 downmix_id;
  WORD32 level_estim_channel_weight_format;
  FLOAT32 level_estim_ch_weight[MAX_CHANNEL_COUNT];
  WORD32 drc_input_loudness_present;
  FLOAT32 drc_input_loudness;

  WORD32 ch_count_from_dwnmix_id;
} ia_parametric_drc_gain_set_params_struct;

typedef struct {
  WORD32 drc_location;
  WORD32 parametric_drc_frame_size_format;
  WORD32 parametric_drc_frame_size;
  WORD32 parametric_drc_delay_max_present;
  WORD32 parametric_drc_delay_max;
  WORD32 reset_parametric_drc;
  WORD32 parametric_drc_gain_set_count;
  ia_parametric_drc_gain_set_params_struct
      str_parametric_drc_gain_set_params[SEQUENCE_COUNT_MAX];
} ia_drc_coeff_parametric_drc_struct;

typedef struct {
  WORD32 base_channel_count;
  WORD32 layout_signaling_present;
  WORD32 defined_layout;
  WORD32 speaker_position[SPEAKER_POS_COUNT_MAX];
} ia_channel_layout_struct;

typedef struct {
  WORD32 downmix_id;
  WORD32 target_channel_count;
  WORD32 target_layout;
  WORD32 downmix_coefficients_present;
  FLOAT32 downmix_coefficient[DOWNMIX_COEFF_COUNT_MAX];
} ia_downmix_instructions_struct;

typedef struct {
  WORD32 gain_seq_idx;
  WORD32 drc_characteristic;
  WORD32 drc_characteristic_present;
  WORD32 drc_characteristic_format_is_cicp;
  WORD32 drc_characteristic_left_index;
  WORD32 drc_characteristic_right_index;
  WORD32 crossover_freq_idx;
  WORD32 start_subband_index;
} ia_gain_params_struct;

typedef struct {
  WORD32 ducking_scaling_flag;
  FLOAT32 ducking_scaling;
  FLOAT32 ducking_scaling_quantized;
} ia_ducking_modifiers_struct;

typedef struct {
  WORD32 target_characteristic_left_present[DRC_BAND_COUNT_MAX];
  WORD32 target_characteristic_left_index[DRC_BAND_COUNT_MAX];
  WORD32 target_characteristic_right_present[DRC_BAND_COUNT_MAX];
  WORD32 target_characteristic_right_index[DRC_BAND_COUNT_MAX];
  WORD32 shape_filter_flag;
  WORD32 shape_filter_idx;
  WORD32 gain_scaling_flag[BAND_COUNT_MAX];
  FLOAT32 attn_scaling[BAND_COUNT_MAX];
  FLOAT32 ampl_scaling[BAND_COUNT_MAX];
  WORD32 gain_offset_flag[BAND_COUNT_MAX];
  FLOAT32 gain_offset[BAND_COUNT_MAX];
} ia_gain_modifiers_struct;

typedef struct {
  WORD32 gain_coding_profile;
  WORD32 gain_interpolation_type;
  WORD32 full_frame;
  WORD32 time_alignment;
  WORD32 time_delt_min_flag;
  WORD32 time_delt_min_val;
  WORD32 band_count;
  WORD32 drc_band_type;
  ia_gain_params_struct gain_params[BAND_COUNT_MAX];

  WORD32 num_gain_max_values;
  ia_tables_struct str_tables;
} ia_gain_set_params_struct;

#define SPLIT_CHARACTERISTIC_NODE_COUNT_MAX 4
typedef struct {
  WORD32 characteristic_format;
  FLOAT32 in_out_ratio;
  FLOAT32 gain;
  FLOAT32 exp;
  WORD32 flip_sign;
  WORD32 characteristic_node_count;
  FLOAT32 node_level[SPLIT_CHARACTERISTIC_NODE_COUNT_MAX + 1];
  FLOAT32 node_gain[SPLIT_CHARACTERISTIC_NODE_COUNT_MAX + 1];
} ia_split_drc_characteristic_struct;

typedef struct {
  WORD32 corner_freq_index;
  WORD32 filter_strength_index;
} ia_shape_filter_params_struct;

typedef struct {
  WORD32 lf_cut_filter_present;
  ia_shape_filter_params_struct str_lf_cut_params;
  WORD32 lf_boost_filter_present;
  ia_shape_filter_params_struct str_lf_boost_params;
  WORD32 hf_cut_filter_present;
  ia_shape_filter_params_struct str_hfCutParams;
  WORD32 hf_boost_filter_present;
  ia_shape_filter_params_struct str_hf_boost_params;
} ia_shape_filter_block_params_struct;

typedef struct {
  WORD32 drc_location;
  WORD32 drc_characteristic;
} ia_drc_coefficients_basic_struct;

typedef struct {
  WORD32 version;
  WORD32 drc_location;
  WORD32 drc_frame_size_present;
  WORD32 drc_frame_size;
  WORD32 gain_set_count;
  ia_gain_set_params_struct gain_set_params[GAIN_SET_COUNT_MAX];
  WORD32 drc_characteristic_left_present;
  WORD32 characteristic_left_count;
  ia_split_drc_characteristic_struct
      str_split_characteristic_left[SPLIT_CHARACTERISTIC_COUNT_MAX];
  WORD32 drc_characteristic_right_present;
  WORD32 characteristic_right_count;
  ia_split_drc_characteristic_struct
      str_split_characteristic_right[SPLIT_CHARACTERISTIC_COUNT_MAX];
  WORD32 shape_filters_present;
  WORD32 shape_num_filter;
  ia_shape_filter_block_params_struct
      str_shape_filter_block_params[SHAPE_FILTER_COUNT_MAX + 1];
  WORD32 gain_sequence_count;
  WORD32 gain_set_params_index_for_gain_sequence[SEQUENCE_COUNT_MAX];
  WORD32 gain_set_count_plus;

} ia_uni_drc_coeffs_struct;

typedef struct {
  WORD32 drc_set_id;
  WORD32 drc_location;
  WORD32 dwnmix_id_count;
  WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
  WORD32 drc_set_effect;
  WORD32 limiter_peak_target_present;
  FLOAT32 limiter_peak_target;
  WORD32 drc_set_target_loudness_present;
  WORD32 drc_set_target_loudness_value_upper;
  WORD32 drc_set_target_loudness_value_lower_present;
  WORD32 drc_set_target_loudness_value_lower;
} ia_drc_instructions_basic_struct;

typedef struct {
  WORD32 drc_set_id;
  WORD32 drc_set_complexity_level;
  WORD32 requires_eq;
  WORD32 drc_apply_to_dwnmix;
  WORD32 drc_location;
  WORD32 dwnmix_id_count;
  WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
  WORD32 depends_on_drc_set_present;
  WORD32 depends_on_drc_set;
  WORD32 no_independent_use;
  WORD32 drc_set_effect;
  WORD32 gain_set_index[MAX_CHANNEL_COUNT];
  ia_gain_modifiers_struct
      str_gain_modifiers_of_ch_group[CHANNEL_GROUP_COUNT_MAX];
  ia_ducking_modifiers_struct
      str_ducking_modifiers_for_channel[MAX_CHANNEL_COUNT];
  WORD32 limiter_peak_target_present;
  FLOAT32 limiter_peak_target;
  WORD32 drc_set_target_loudness_present;
  WORD32 drc_set_target_loudness_value_upper;
  WORD32 drc_set_target_loudness_value_lower_present;
  WORD32 drc_set_target_loudness_value_lower;

  WORD32 audio_num_chan;
  WORD32 num_drc_ch_groups;
  WORD32 gain_set_index_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
  WORD32 band_count_of_ch_group[CHANNEL_GROUP_COUNT_MAX];
  WORD32 gain_interpolation_type_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
  WORD32 time_delta_min_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
  WORD32 time_alignment_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
  ia_ducking_modifiers_struct
      str_ducking_modifiers_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
  WORD32 channel_group_of_ch[MAX_CHANNEL_COUNT];
  WORD32 num_chan_per_ch_group[CHANNEL_GROUP_COUNT_MAX];
  WORD32 gain_element_count;
  WORD32 multiband_audio_sig_count;
  WORD32 ch_group_parametric_drc_flag[CHANNEL_GROUP_COUNT_MAX];
  WORD32 gain_set_idx_of_ch_group_parametric_drc[CHANNEL_GROUP_COUNT_MAX];
  WORD32 parametric_drc_look_ahead_samples[CHANNEL_GROUP_COUNT_MAX];
  WORD32 parametric_drc_look_ahead_samples_max;
} ia_drc_instructions_struct;

typedef struct {
  WORD32 method_def;
  FLOAT32 method_val;
  WORD32 measurement_system;
  WORD32 reliability; /* Parsed but unused */
} ia_loudness_measure_struct;

typedef struct {
  WORD32 drc_set_id;
  WORD32 eq_set_id;
  WORD32 downmix_id;
  WORD32 sample_peak_level_present;
  FLOAT32 sample_peak_level;
  WORD32 true_peak_level_present;
  FLOAT32 true_peak_level;
  WORD32 true_peak_level_measurement_system; /* Parsed but unused */
  WORD32 true_peak_level_reliability;        /* Parsed but unused */
  WORD32 measurement_count;
  WORD32 anchor_loudness_present;
  WORD32 expert_loudness_present;
  ia_loudness_measure_struct loudness_measure[MEASUREMENT_COUNT_MAX];
} ia_loudness_info_struct;

typedef struct {
  WORD32 loud_eq_set_id;
  WORD32 drc_location;
  WORD32 dwnmix_id_count;
  WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
  WORD32 drc_set_id_count;
  WORD32 drc_set_id[DRC_SET_ID_COUNT_MAX];
  WORD32 eq_set_id_count;
  WORD32 eq_set_id[EQ_SET_ID_COUNT_MAX];
  WORD32 loudness_after_drc;                            /* Parsed but unused */
  WORD32 loudness_after_eq;                             /* Parsed but unused */
  WORD32 loud_eq_gain_sequence_count;                   /* Parsed but unused */
  WORD32 gain_seq_idx[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
  WORD32 drc_characteristic_format_is_cicp
      [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
  WORD32 drc_characteristic[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but
                                                                 unused */
  WORD32 drc_characteristic_left_index
      [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
  WORD32 drc_characteristic_right_index
      [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
  WORD32 frequency_range_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but
                                                                    unused */
  FLOAT32
  loud_eq_scaling[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
  FLOAT32
  loud_eq_offset[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
} ia_loud_eq_instructions_struct;

typedef struct {
  WORD32 filt_ele_idx;
  WORD32 filt_ele_gain_flag;
  FLOAT32 filt_ele_gain;
} ia_filt_ele_struct;

typedef struct {
  WORD32 filter_element_count;
  ia_filt_ele_struct str_filter_element[FILTER_ELEMENT_COUNT_MAX];
} ia_filt_block_struct;

typedef struct {
  WORD32 eq_filter_format;
  WORD32 bs_real_zero_radius_one_count;
  WORD32 real_zero_count;
  WORD32 generic_zero_count;
  WORD32 real_pole_count;
  WORD32 cmplx_pole_count;
  WORD32 zero_sign[REAL_ZERO_RADIUS_ONE_COUNT_MAX];
  FLOAT32 real_zero_radius[REAL_ZERO_COUNT_MAX];
  FLOAT32 generic_zero_radius[COMPLEX_ZERO_COUNT_MAX];
  FLOAT32 generic_zero_angle[COMPLEX_ZERO_COUNT_MAX];
  FLOAT32 real_pole_radius[REAL_POLE_COUNT_MAX];
  FLOAT32 complex_pole_radius[COMPLEX_POLE_COUNT_MAX];
  FLOAT32 complex_pole_angle[COMPLEX_POLE_COUNT_MAX];
  WORD32 fir_filt_order;
  WORD32 fir_symmetry;
  FLOAT32 fir_coeff[FIR_ORDER_MAX / 2];
} ia_unique_td_filt_element;

typedef struct {
  WORD32 num_eq_nodes;
  FLOAT32 eq_slope[EQ_NODE_COUNT_MAX];
  WORD32 eq_freq_delta[EQ_NODE_COUNT_MAX];
  FLOAT32 eq_gain_initial;
  FLOAT32 eq_gain_delta[EQ_NODE_COUNT_MAX];
} ia_eq_subband_gain_spline_struct;

typedef struct {
  FLOAT32 eq_subband_gain[EQ_SUBBAND_GAIN_COUNT_MAX];
} ia_eq_subband_gain_vector;

typedef struct {
  WORD32 eq_delay_max_present;
  WORD32 eq_delay_max;
  WORD32 unique_filter_block_count;
  ia_filt_block_struct str_filter_block[FILTER_BLOCK_COUNT_MAX];
  WORD32 unique_td_filter_element_count;
  ia_unique_td_filt_element unique_td_filt_ele[FILTER_ELEMENT_COUNT_MAX];
  WORD32 unique_eq_subband_gains_count;
  WORD32 eq_subband_gain_representation;
  WORD32 eq_subband_gain_format;
  WORD32 eq_subband_gain_count;
  ia_eq_subband_gain_spline_struct
      str_eq_subband_gain_spline[UNIQUE_SUBBAND_GAIN_COUNT_MAX];
  ia_eq_subband_gain_vector
      str_eq_subband_gain_vector[UNIQUE_SUBBAND_GAIN_COUNT_MAX];
} ia_eq_coeff_struct;

typedef struct {
  WORD32 filter_block_count;
  WORD32 filter_block_index[EQ_FILTER_BLOCK_COUNT_MAX];
} ia_filter_block_refs_struct;

typedef struct {
  WORD32 eq_cascade_gain_present[EQ_CHANNEL_GROUP_COUNT_MAX];
  FLOAT32 eq_cascade_gain[EQ_CHANNEL_GROUP_COUNT_MAX];
  ia_filter_block_refs_struct str_filter_block_refs[EQ_CHANNEL_GROUP_COUNT_MAX];
  WORD32 eq_phase_alignment_present;
  WORD32 eq_phase_alignment[EQ_CHANNEL_GROUP_COUNT_MAX]
                           [EQ_CHANNEL_GROUP_COUNT_MAX];
} ia_td_filter_cascade_struct;

typedef struct {
  WORD32 eq_set_id;
  WORD32 eq_set_complexity_level;
  WORD32 dwnmix_id_count;
  WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
  WORD32 eq_apply_to_downmix;
  WORD32 drc_set_id_count;
  WORD32 drc_set_id[DRC_SET_ID_COUNT_MAX];
  WORD32 eq_set_purpose;
  WORD32 depends_on_eq_set_present;
  WORD32 depends_on_eq_set;
  WORD32 no_independent_eq_use;
  WORD32 eq_channel_count;
  WORD32 eq_ch_group_count;
  WORD32 eq_ch_group_of_channel[MAX_CHANNEL_COUNT];
  WORD32 td_filter_cascade_present;
  ia_td_filter_cascade_struct str_td_filter_cascade;
  WORD32 subband_gains_present;
  WORD32 subband_gains_index[EQ_CHANNEL_GROUP_COUNT_MAX];
  WORD32 eq_transition_duration_present;
  WORD32 eq_transition_duration;
} ia_eq_instructions_struct;

typedef struct {
  WORD32 drc_config_ext_type[EXT_COUNT_MAX];
  WORD32 ext_bit_size[EXT_COUNT_MAX - 1];

  WORD32 parametric_drc_present;
  ia_drc_coeff_parametric_drc_struct str_drc_coeff_param_drc;
  WORD32 parametric_drc_instructions_count;
  ia_parametric_drc_instructions_struct
      str_parametric_drc_instructions[PARAM_DRC_INSTRUCTIONS_COUNT_MAX];
  WORD32 drc_extension_v1_present;
  WORD32 loud_eq_instructions_flag;
  WORD32 loud_eq_instructions_count;
  ia_loud_eq_instructions_struct
      loud_eq_instructions[LOUD_EQ_INSTRUCTIONS_COUNT_MAX];
  WORD32 eq_flag;
  ia_eq_coeff_struct str_eq_coeff;
  WORD32 eq_instructions_count;
  ia_eq_instructions_struct str_eq_instructions[EQ_INSTRUCTIONS_COUNT_MAX];
} ia_drc_config_ext;

typedef struct ia_drc_config {
  WORD32 sample_rate_present;
  WORD32 sampling_rate;
  WORD32 dwnmix_instructions_count;
  WORD32 drc_coefficients_drc_count;
  WORD32 drc_instructions_uni_drc_count;
  WORD32 drc_instructions_count_plus;
  WORD32 drc_description_basic_present;
  WORD32 drc_coefficients_basic_count;
  WORD32 drc_instructions_basic_count;
  WORD32 drc_config_ext_present;
  WORD32 apply_drc;
  ia_drc_config_ext str_drc_config_ext;
  ia_drc_coefficients_basic_struct
      str_drc_coefficients_basic[DRC_COEFF_COUNT_MAX];
  ia_drc_instructions_basic_struct
      str_drc_instructions_basic[DRC_INSTRUCTIONS_COUNT_MAX];
  ia_uni_drc_coeffs_struct
      str_p_loc_drc_coefficients_uni_drc[DRC_COEFF_COUNT_MAX];
  ia_drc_instructions_struct
      str_drc_instruction_str[DRC_INSTRUCTIONS_COUNT_MAX];
  ia_channel_layout_struct channel_layout;
  ia_downmix_instructions_struct
      dwnmix_instructions[DOWNMIX_INSTRUCTION_COUNT_MAX];
} ia_drc_config;

typedef struct {
  WORD32 loudness_info_set_ext_type[EXT_COUNT_MAX];
  WORD32 ext_bit_size[EXT_COUNT_MAX - 1];
} ia_loudness_info_set_ext_struct;

typedef struct ia_drc_loudness_info_set_struct {
  WORD32 loudness_info_album_count;
  WORD32 loudness_info_count;
  WORD32 loudness_info_set_ext_present;
  ia_loudness_info_struct str_loudness_info_album[LOUDNESS_INFO_COUNT_MAX];
  ia_loudness_info_struct loudness_info[LOUDNESS_INFO_COUNT_MAX];
  ia_loudness_info_set_ext_struct str_loudness_info_set_ext;
} ia_drc_loudness_info_set_struct;

typedef struct {
  FLOAT32 loc_db_gain;
  FLOAT32 slope;
  WORD32 time;
} ia_node_struct;

typedef struct {
  WORD32 drc_gain_coding_mode;
  WORD32 num_nodes;
  ia_node_struct str_node[NODE_COUNT_MAX];
} ia_spline_nodes_struct;

typedef struct {
  ia_spline_nodes_struct str_spline_nodes[1];
} ia_drc_gain_sequence_struct;

typedef struct {
  WORD32 uni_drc_gain_ext_type[EXT_COUNT_MAX];
  WORD32 ext_bit_size[EXT_COUNT_MAX - 1];
} ia_uni_drc_gain_ext_struct;

typedef struct ia_drc_gain_struct {
  WORD32 num_drc_gain_sequences;
  ia_drc_gain_sequence_struct drc_gain_sequence[SEQUENCE_COUNT_MAX];
  WORD32 uni_drc_gain_ext_flag;
  ia_uni_drc_gain_ext_struct uni_drc_gain_ext;
} ia_drc_gain_struct;

typedef struct {
  WORD32 delta_tmin_default;
  WORD32 drc_frame_size;
  WORD32 num_gain_values_max_default;
  WORD32 delay_mode;
  WORD32 lfe_channel_map_count;
  WORD32 lfe_channel_map[MAX_CHANNEL_COUNT];
} ia_drc_params_bs_dec_struct;

typedef struct ia_drc_bits_dec_struct {
  ia_tables_struct tables_default;
  ia_drc_params_bs_dec_struct ia_drc_params_struct;

} ia_drc_bits_dec_struct;

#ifdef __cplusplus
}
#endif
#endif