/******************************************************************************
 *                                                                            *
 * 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 IXHEAACD_CONFIG_H
#define IXHEAACD_CONFIG_H

#define USAC_MAX_ELEMENTS (16)

#define USAC_MAX_CONFIG_EXTENSIONS (16)

#define ID_USAC_SCE 0
#define ID_USAC_CPE 1
#define ID_USAC_LFE 2
#define ID_USAC_EXT 3
#define ID_USAC_INVALID 0xFF

#define USAC_SBR_RATIO_NO_SBR 0
#define USAC_SBR_RATIO_INDEX_2_1 1
#define USAC_SBR_RATIO_INDEX_8_3 2
#define USAC_SBR_RATIO_INDEX_4_1 3

#define USAC_OUT_FRAMELENGTH_768 768
#define USAC_OUT_FRAMELENGTH_1024 1024
#define USAC_OUT_FRAMELENGTH_2048 2048
#define USAC_OUT_FRAMELENGTH_4096 4096

#define MAX_CORE_SBR_FRAME_LEN_IDX (4)

#define ID_EXT_ELE_FILL 0
#define ID_EXT_ELE_MPEGS 1
#define ID_EXT_ELE_SAOC 2
#define ID_EXT_ELE_AUDIOPREROLL 3
#define ID_EXT_ELE_UNI_DRC 4

#define ID_CONFIG_EXT_FILL 0
#define ID_CONFIG_EXT_LOUDNESS_INFO (2)

typedef UWORD8 UINT8;
typedef UWORD32 UINT32;

typedef struct {
  UINT32 harmonic_sbr;
  UINT32 bs_inter_tes;
  UINT32 bs_pvc;
  WORD16 dflt_start_freq;
  WORD16 dflt_stop_freq;
  WORD16 dflt_header_extra1;
  WORD16 dflt_header_extra2;
  WORD16 dflt_freq_scale;
  WORD16 dflt_alter_scale;
  WORD16 dflt_noise_bands;
  WORD16 dflt_limiter_bands;
  WORD16 dflt_limiter_gains;
  WORD16 dflt_interpol_freq;
  WORD16 dflt_smoothing_mode;
} ia_usac_dec_sbr_config_struct;

typedef struct {
  UINT32 bs_freq_res;
  UINT32 bs_fixed_gain_dmx;
  UINT32 bs_temp_shape_config;
  UINT32 bs_decorr_config;
  UINT32 bs_high_rate_mode;
  UINT32 bs_phase_coding;
  UINT32 bs_ott_bands_phase_present;
  UINT32 bs_ott_bands_phase;
  UINT32 bs_residual_bands;
  UINT32 bs_pseudo_lr;
  UINT32 bs_env_quant_mode;
} ia_usac_dec_mps_config_struct;

#define BS_OUTPUT_CHANNEL_POS_NA -1   /* n/a                                */
#define BS_OUTPUT_CHANNEL_POS_L 0     /* Left Front                          */
#define BS_OUTPUT_CHANNEL_POS_R 1     /* Right Front                         */
#define BS_OUTPUT_CHANNEL_POS_C 2     /* Center Front                        */
#define BS_OUTPUT_CHANNEL_POS_LFE 3   /* Low Frequency Enhancement           */
#define BS_OUTPUT_CHANNEL_POS_LS 4    /* Left Surround                       */
#define BS_OUTPUT_CHANNEL_POS_RS 5    /* Right Surround                      */
#define BS_OUTPUT_CHANNEL_POS_LC 6    /* Left Front Center                   */
#define BS_OUTPUT_CHANNEL_POS_RC 7    /* Right Front Center                  */
#define BS_OUTPUT_CHANNEL_POS_LSR 8   /* Rear Surround Left                  */
#define BS_OUTPUT_CHANNEL_POS_RSR 9   /* Rear Surround Right                 */
#define BS_OUTPUT_CHANNEL_POS_CS 10   /* Rear Center                         */
#define BS_OUTPUT_CHANNEL_POS_LSD 11  /* Left Surround Direct                */
#define BS_OUTPUT_CHANNEL_POS_RSD 12  /* Right Surround Direct               */
#define BS_OUTPUT_CHANNEL_POS_LSS 13  /* Left Side Surround                  */
#define BS_OUTPUT_CHANNEL_POS_RSS 14  /* Right Side Surround                 */
#define BS_OUTPUT_CHANNEL_POS_LW 15   /* Left Wide Front                     */
#define BS_OUTPUT_CHANNEL_POS_RW 16   /* Right Wide Front                    */
#define BS_OUTPUT_CHANNEL_POS_LV 17   /* Left Front Vertical Height          */
#define BS_OUTPUT_CHANNEL_POS_RV 18   /* Right Front Vertical Height         */
#define BS_OUTPUT_CHANNEL_POS_CV 19   /* Center Front Vertical Height        */
#define BS_OUTPUT_CHANNEL_POS_LVR 20  /* Left Surround Vertical Height Rear  */
#define BS_OUTPUT_CHANNEL_POS_RVR 21  /* Right Surround Vertical Height Rear */
#define BS_OUTPUT_CHANNEL_POS_CVR 22  /* Center Vertical Height Rear         */
#define BS_OUTPUT_CHANNEL_POS_LVSS 23 /* Left Vertical Height Side Surround */
#define BS_OUTPUT_CHANNEL_POS_RVSS                                             \
  24                                /* Right Vertical Height Side Surround \ \ \
                                       */
#define BS_OUTPUT_CHANNEL_POS_TS 25 /* Top Center Surround                 */
#define BS_OUTPUT_CHANNEL_POS_LFE2 26 /* Low Frequency Enhancement 2 */
#define BS_OUTPUT_CHANNEL_POS_LB 27   /* Left Front Vertical Bottom          */
#define BS_OUTPUT_CHANNEL_POS_RB 28   /* Right Front Vertical Bottom         */
#define BS_OUTPUT_CHANNEL_POS_CB 29   /* Center Front Vertical Bottom        */
#define BS_OUTPUT_CHANNEL_POS_LVS 30  /* Left Vertical Height Surround       */
#define BS_OUTPUT_CHANNEL_POS_RVS 31  /* Right Vertical Height Surround      */

#define BS_MAX_NUM_OUT_CHANNELS (255)

#define EXT_COUNT_MAX (2)
#define MAX_CHANNEL_COUNT (128)
#define SEQUENCE_COUNT_MAX (24)
#define PARAM_DRC_TYPE_FF_NODE_COUNT_MAX (9)
#define PARAM_DRC_INSTRUCTIONS_COUNT_MAX (8)
#define DOWNMIX_ID_COUNT_MAX (8)
#define DRC_SET_ID_COUNT_MAX (16)
#define EQ_SET_ID_COUNT_MAX (8)
#define LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX (4)
#define LOUD_EQ_INSTRUCTIONS_COUNT_MAX (8)
#define FILTER_ELEMENT_COUNT_MAX (16)
#define FILTER_BLOCK_COUNT_MAX (16)
#define REAL_ZERO_RADIUS_ONE_COUNT_MAX (14)
#define REAL_ZERO_COUNT_MAX (64)
#define COMPLEX_ZERO_COUNT_MAX (64)
#define REAL_POLE_COUNT_MAX (16)
#define COMPLEX_POLE_COUNT_MAX (16)
#define FIR_ORDER_MAX (128)
#define EQ_NODE_COUNT_MAX (33)
#define UNIQUE_SUBBAND_GAIN_COUNT_MAX (16)
#define EQ_SUBBAND_GAIN_COUNT_MAX (135)
#define EQ_CHANNEL_GROUP_COUNT_MAX (4)
#define EQ_FILTER_BLOCK_COUNT_MAX (4)
#define EQ_INSTRUCTIONS_COUNT_MAX (8)
#define DRC_COEFF_COUNT_MAX (8)
#define DOWNMIX_INSTRUCTION_COUNT_MAX (16)
#define DRC_INSTRUCTIONS_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
#define BAND_COUNT_MAX (8)

#define N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX (512 + 14)
#define GAIN_SET_COUNT_MAX SEQUENCE_COUNT_MAX
#define SPLIT_CHARACTERISTIC_NODE_COUNT_MAX (4)
#define SPLIT_CHARACTERISTIC_COUNT_MAX (8)
#define SHAPE_FILTER_COUNT_MAX (8)
#define CHANNEL_GROUP_COUNT_MAX SEQUENCE_COUNT_MAX
#define DRC_BAND_COUNT_MAX BAND_COUNT_MAX
#define SPEAKER_POS_COUNT_MAX (128)
#define DOWNMIX_COEFF_COUNT_MAX (32 * 32)

typedef struct {
  UINT32 tw_mdct;
  UINT32 noise_filling;
  UINT32 stereo_config_index;

  UINT32 usac_ext_eleme_def_len;
  UINT32 usac_ext_elem_pld_frag;

  ia_usac_dec_sbr_config_struct str_usac_sbr_config;
  ia_usac_dec_mps_config_struct str_usac_mps212_config;

} ia_usac_dec_element_config_struct;

typedef struct {
  UWORD32 num_elements;
  UWORD32 num_config_extensions;
  UWORD32 usac_element_type[USAC_MAX_ELEMENTS];
  ia_usac_dec_element_config_struct str_usac_element_config[USAC_MAX_ELEMENTS];

  WORD32 usac_cfg_ext_info_present[USAC_MAX_CONFIG_EXTENSIONS];
  WORD32 usac_ext_ele_payload_present[USAC_MAX_ELEMENTS];
  WORD32 usac_cfg_ext_info_len[USAC_MAX_CONFIG_EXTENSIONS];
  WORD32 usac_ext_ele_payload_len[USAC_MAX_ELEMENTS];
  WORD32 usac_ext_gain_payload_len;
  UWORD8 usac_cfg_ext_info_buf[USAC_MAX_CONFIG_EXTENSIONS][768];
  UWORD8 usac_ext_ele_payload_buf[USAC_MAX_ELEMENTS][768];
  UWORD8 usac_ext_gain_payload_buf[768];

  WORD32 preroll_flag;

} ia_usac_decoder_config_struct;

typedef struct {
  UINT32 usac_sampling_frequency_index;
  UINT32 usac_sampling_frequency;
  UINT32 core_sbr_framelength_index;
  UINT32 channel_configuration_index;

  UINT32 num_out_channels;
  UINT32 output_channel_pos[BS_MAX_NUM_OUT_CHANNELS];
  ia_usac_decoder_config_struct str_usac_dec_config;

} ia_usac_config_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 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_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 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;
  WORD32 loudness_after_eq;
  WORD32 loud_eq_gain_sequence_count;
  WORD32 gain_seq_idx[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
  WORD32 drc_characteristic_format_is_cicp[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
  WORD32 drc_characteristic[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
  WORD32 drc_characteristic_left_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
  WORD32 drc_characteristic_right_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
  WORD32 frequency_range_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
  FLOAT32 loud_eq_scaling[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
  FLOAT32 loud_eq_offset[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
} 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 {
  WORD32 drc_location;
  WORD32 drc_characteristic;
} ia_drc_coefficients_basic_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 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 size;
  WORD32 code;
  WORD32 value;
} ia_delta_time_code_table_entry_struct;
typedef struct {
  ia_delta_time_code_table_entry_struct
      delta_time_code_table[N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX];
} ia_tables_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;

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_hf_cut_params;
  WORD32 hf_boost_filter_present;
  ia_shape_filter_params_struct str_hf_boost_params;
} ia_shape_filter_block_params_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 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 ducking_scaling_flag;
  FLOAT32 ducking_scaling;
  FLOAT32 ducking_scaling_quantized;
} ia_ducking_modifiers_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 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 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;

VOID ixheaacd_conf_default(ia_usac_config_struct *pstr_usac_conf);

UWORD32 ixheaacd_sbr_ratio(UWORD32 core_sbr_frame_len_idx);

UWORD32 ixheaacd_sbr_params(UWORD32 core_sbr_frame_len_idx,
                            WORD32 *output_frame_length, WORD32 *block_size,
                            WORD32 *output_samples, WORD32 *sampling_freq,
                            UWORD32 *sample_freq_indx);

WORD32 ixheaacd_config(ia_bit_buf_struct *bit_buff,
                       ia_usac_config_struct *pstr_usac_conf, UINT32 *chan);

#endif /* IXHEAACD_CONFIG_H */
