/****************************************************************************** * * 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; 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