diff options
author | Xin Li <delphij@google.com> | 2020-09-01 20:03:58 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-09-01 20:03:58 +0000 |
commit | 386b47b4b1c2247a03c8ff2bf0ed5d5a59b55cb0 (patch) | |
tree | 53061986cbd3d9f031b31dc97935dd9fe1ae5e90 /decoder/drc_src | |
parent | 924a4628e020fe6553ce2a041cde5a7a1e7ebf69 (diff) | |
parent | 0312fc42cbd168783641a3605e6da363d2062a2f (diff) | |
download | libxaac-386b47b4b1c2247a03c8ff2bf0ed5d5a59b55cb0.tar.gz |
Merge "Merge Android R (rvc-dev-plus-aosp-without-vendor@6692709)" into stage-aosp-mastertemp_sam_168057903
Diffstat (limited to 'decoder/drc_src')
33 files changed, 979 insertions, 4023 deletions
diff --git a/decoder/drc_src/impd_drc_api.c b/decoder/drc_src/impd_drc_api.c index 4fea3de..f7443e1 100644 --- a/decoder/drc_src/impd_drc_api.c +++ b/decoder/drc_src/impd_drc_api.c @@ -56,8 +56,6 @@ IA_ERRORCODE impd_drc_mem_api(ia_drc_api_struct *p_obj_drc, WORD32 i_cmd, IA_ERRORCODE impd_drc_fill_mem_tables(ia_drc_api_struct *p_obj_drc); -VOID impd_drc_set_default_config_params(ia_drc_config_struct *ptr_config); - IA_ERRORCODE impd_drc_process_frame(ia_drc_api_struct *p_obj_drc); IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc); IA_ERRORCODE impd_drc_set_default_config(ia_drc_api_struct *p_obj_drc); @@ -83,10 +81,10 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc); sizeof(ia_drc_sel_proc_output_struct) + \ sizeof(ia_drc_peak_limiter_struct) + sizeof(ia_drc_peak_limiter_struct) + \ sizeof(ia_drc_qmf_filt_struct) + ANALY_BUF_SIZE + SYNTH_BUF_SIZE + \ - PEAK_LIM_BUF_SIZE + MAX_BS_BUF_SIZE + /*DRC Config Bitstream*/ \ - MAX_DRC_CONFG_BUF_SIZE + /*DRC loudness info Bitstream*/ \ - MAX_LOUD_INFO_BUF_SIZE + /*DRC interface Bitstream*/ \ - MAX_INTERFACE_BUF_SIZE + \ + PEAK_LIM_BUF_SIZE + MAX_DRC_BS_BUF_SIZE + \ + MAX_DRC_CONFG_BUF_SIZE + /*DRC Config Bitstream*/ \ + MAX_LOUD_INFO_BUF_SIZE + /*DRC loudness info Bitstream*/ \ + MAX_INTERFACE_BUF_SIZE + /*DRC interface Bitstream*/ \ NUM_GAIN_DEC_INSTANCES * \ (SEL_DRC_COUNT * sizeof(ia_interp_buf_struct) * MAX_GAIN_ELE_COUNT + \ sizeof(ia_eq_set_struct) + /*non_interleaved_audio*/ \ @@ -151,7 +149,7 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx, case IA_API_CMD_INIT: { switch (i_idx) { case IA_CMD_TYPE_INIT_SET_BUFF_PTR: { - p_obj_drc->p_state->persistant_ptr = + p_obj_drc->p_state->persistent_ptr = (UWORD8 *)p_obj_drc->pp_mem[IA_DRC_PERSIST_IDX] + sizeof(ia_drc_state_struct); impd_drc_set_struct_pointer(p_obj_drc); @@ -207,11 +205,16 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx, } case IA_CMD_TYPE_INIT_CPY_BSF_BUFF: { memcpy(p_obj_drc->str_bit_handler.it_bit_buf + - p_obj_drc->str_bit_handler.num_bytes_bs, + p_obj_drc->str_bit_handler.num_bytes_offset_bs, p_obj_drc->pp_mem[2], p_obj_drc->str_bit_handler.num_byts_cur); p_obj_drc->str_bit_handler.num_bytes_bs = p_obj_drc->str_bit_handler.num_bytes_bs + p_obj_drc->str_bit_handler.num_byts_cur; + p_obj_drc->str_bit_handler.num_bytes_offset_bs = + p_obj_drc->str_bit_handler.num_bytes_bs; + p_obj_drc->str_bit_handler.num_total_bytes = + p_obj_drc->str_bit_handler.num_bytes_bs; + break; } case IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF: { @@ -268,60 +271,6 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx, } case IA_API_CMD_SET_CONFIG_PARAM: { switch (i_idx) { - case IA_DRC_DEC_CONFIG_PARAM_DEC_TYPE: { - if (*pus_value == 1) { - p_obj_drc->str_config.dec_type = DEC_TYPE_TD_QMF64; - p_obj_drc->str_config.sub_band_domain_mode = - SUBBAND_DOMAIN_MODE_QMF64; - p_obj_drc->str_config.sub_band_down_sampling_factor = - AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64; - p_obj_drc->str_config.sub_band_count = - AUDIO_CODEC_SUBBAND_COUNT_QMF64; - } else if (*pus_value == 2) { - p_obj_drc->str_config.dec_type = DEC_TYPE_QMF64; - p_obj_drc->str_config.sub_band_domain_mode = - SUBBAND_DOMAIN_MODE_QMF64; - p_obj_drc->str_config.sub_band_down_sampling_factor = - AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64; - p_obj_drc->str_config.sub_band_count = - AUDIO_CODEC_SUBBAND_COUNT_QMF64; - } else if (*pus_value == 3) { - p_obj_drc->str_config.dec_type = DEC_TYPE_STFT256; - p_obj_drc->str_config.sub_band_domain_mode = - SUBBAND_DOMAIN_MODE_STFT256; - p_obj_drc->str_config.sub_band_down_sampling_factor = - AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256; - p_obj_drc->str_config.sub_band_count = - AUDIO_CODEC_SUBBAND_COUNT_STFT256; - } else { - p_obj_drc->str_config.dec_type = DEC_TYPE_TD; - p_obj_drc->str_config.sub_band_domain_mode = - SUBBAND_DOMAIN_MODE_OFF; - } - - if (*pus_value < 0 || *pus_value > 3) { - return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DECODE_TYPE; - } - break; - } - case IA_DRC_DEC_CONFIG_PARAM_CTRL_PARAM: { - if (*pus_value < 1 || *pus_value > 39) { - return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_CTRL_PARAM_IDX; - } - p_obj_drc->str_config.control_parameter_index = *pus_value; - break; - } - case IA_DRC_DEC_CONFIG_PARAM_PEAK_LIMITER: { - if (*pus_value < 0 || *pus_value > 1) { - return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PEAK_LIM_FLAG; - } - p_obj_drc->str_config.peak_limiter = *pus_value; - break; - } - - case IA_DRC_DEC_CONFIG_PARAM_VER_MODE: { - break; - } case IA_DRC_DEC_CONFIG_PARAM_SAMP_FREQ: { if (*pus_value < 8000 || *pus_value > 96000) { return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_SAMP_FREQ; @@ -338,8 +287,13 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx, } case IA_DRC_DEC_CONFIG_PARAM_PCM_WDSZ: { - if ((*pus_value != 16) && (*pus_value != 32)) { - return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PCM_SIZE; + switch (*pus_value) { + case 16: + case 24: + case 32: + break; + default: + return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PCM_SIZE; } p_obj_drc->str_config.pcm_size = *pus_value; @@ -348,54 +302,9 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx, } case IA_DRC_DEC_CONFIG_PARAM_BITS_FORMAT: { - if ((*pus_value != 1) && (*pus_value != 0)) { - return -1; - } - p_obj_drc->str_config.bitstream_file_format = *pus_value; - break; } case IA_DRC_DEC_CONFIG_PARAM_INT_PRESENT: { - if ((*pus_value != 1) && (*pus_value != 0)) { - return -1; - } - p_obj_drc->str_config.interface_bitstream_present = *pus_value; - - break; - } - case IA_DRC_DEC_CONFIG_PARAM_DELAY_MODE: { - if ((*pus_value != 1) && (*pus_value != 0)) { - return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DELAY_MODE; - } - p_obj_drc->str_config.delay_mode = *pus_value; - - break; - } - case IA_DRC_DEC_CONFIG_PARAM_GAIN_DELAY: { - if ((*pus_value > MAX_SIGNAL_DELAY) || (*pus_value < 0)) { - return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_GAIN_DELAY; - } - - p_obj_drc->str_config.gain_delay_samples = *pus_value; - - break; - } - - /*Sujith: introduce error*/ - case IA_DRC_DEC_CONFIG_PARAM_AUDIO_DELAY: { - break; - } - case IA_DRC_DEC_CONFIG_PARAM_CON_DELAY_MODE: { - if (*pus_value < 0 || *pus_value > 1) { - return IA_DRC_DEC_CONFIG_PARAM_CON_DELAY_MODE; - } - p_obj_drc->str_config.constant_delay_on = *pus_value; - - break; - } - case IA_DRC_DEC_CONFIG_PARAM_ABSO_DELAY_OFF: { - p_obj_drc->str_config.absorb_delay_on = *pus_value; - break; } case IA_DRC_DEC_CONFIG_PARAM_FRAME_SIZE: { @@ -408,7 +317,6 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx, break; } case IA_DRC_DEC_CONFIG_GAIN_STREAM_FLAG: { - p_obj_drc->str_bit_handler.gain_stream_flag = *pus_value; break; } @@ -460,12 +368,17 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx, } else if (p_obj_drc->str_config.dec_type == DEC_TYPE_TD) { error_code = impd_process_time_domain(p_obj_drc); } else if (p_obj_drc->str_config.dec_type == DEC_TYPE_QMF64) { - error_code = impd_init_process_audio_main_qmf(p_obj_drc); + error_code = IA_FATAL_ERROR; } else if (p_obj_drc->str_config.dec_type == DEC_TYPE_STFT256) { - error_code = impd_init_process_audio_main_stft(p_obj_drc); + error_code = IA_FATAL_ERROR; } else if (p_obj_drc->str_config.dec_type == DEC_TYPE_TD_QMF64) { - error_code = impd_init_process_audio_main_td_qmf(p_obj_drc); + error_code = IA_FATAL_ERROR; } + p_obj_drc->str_bit_handler.byte_index_bs = + p_obj_drc->str_bit_handler.num_total_bytes - + p_obj_drc->str_bit_handler.num_bytes_bs; + p_obj_drc->str_bit_handler.num_bytes_offset_bs = 0; + break; } case IA_CMD_TYPE_DONE_QUERY: { @@ -499,22 +412,6 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx, p_obj_drc->p_state->ui_exe_done = 1; break; } - case IA_API_CMD_INPUT_OVER_BS: { - p_obj_drc->str_bit_handler.cpy_over = 1; - break; - } - case IA_API_CMD_INPUT_OVER_IC_BS: { - p_obj_drc->str_bit_handler.cpy_over_ic = 1; - break; - } - case IA_API_CMD_INPUT_OVER_IL_BS: { - p_obj_drc->str_bit_handler.cpy_over_il = 1; - break; - } - case IA_API_CMD_INPUT_OVER_IN_BS: { - p_obj_drc->str_bit_handler.cpy_over_in = 1; - break; - } case IA_API_CMD_SET_INPUT_BYTES_BS: { p_obj_drc->str_bit_handler.num_byts_cur = *pus_value; break; diff --git a/decoder/drc_src/impd_drc_api_struct_def.h b/decoder/drc_src/impd_drc_api_struct_def.h index a48cd68..6c2734a 100644 --- a/decoder/drc_src/impd_drc_api_struct_def.h +++ b/decoder/drc_src/impd_drc_api_struct_def.h @@ -71,6 +71,8 @@ typedef struct bits_handler { WORD32 num_bits_read_bs; WORD32 num_bytes_read_bs; WORD32 num_bytes_bs; + WORD32 num_bytes_offset_bs; + WORD32 num_total_bytes; WORD32 num_bits_offset_bs; WORD32 byte_index_bs; WORD32 num_byts_cur; @@ -112,7 +114,7 @@ typedef struct ia_drc_state_struct { UWORD32 ui_ir_used; WORD32 delay_in_output; WORD32 delay_adjust_samples; - pVOID persistant_ptr; + pVOID persistent_ptr; } ia_drc_state_struct; typedef struct IA_PSM_API_Struct { diff --git a/decoder/drc_src/impd_drc_bitbuffer.c b/decoder/drc_src/impd_drc_bitbuffer.c index 3750f11..e623bc8 100644 --- a/decoder/drc_src/impd_drc_bitbuffer.c +++ b/decoder/drc_src/impd_drc_bitbuffer.c @@ -121,6 +121,9 @@ WORD32 impd_init_drc_bitstream_dec(ia_drc_bits_dec_struct* p_drc_bs_dec_struct, ia_drc_params_bs_dec_struct* ia_drc_params_struct = &p_drc_bs_dec_struct->ia_drc_params_struct; ia_drc_params_struct->drc_frame_size = frame_size; + if (sample_rate < MIN_DRC_SAMP_FREQ) { + return -1; + } ia_drc_params_struct->delta_tmin_default = impd_get_delta_tmin(sample_rate); ia_drc_params_struct->num_gain_values_max_default = ia_drc_params_struct->drc_frame_size / @@ -131,9 +134,6 @@ WORD32 impd_init_drc_bitstream_dec(ia_drc_bits_dec_struct* p_drc_bs_dec_struct, (ia_drc_params_struct->drc_frame_size < 0.001f * sample_rate)) { return -1; } - if (sample_rate < 1000) { - return -1; - } if (ia_drc_params_struct->delta_tmin_default > ia_drc_params_struct->drc_frame_size) { @@ -165,51 +165,6 @@ WORD32 impd_init_drc_bitstream_dec(ia_drc_bits_dec_struct* p_drc_bs_dec_struct, return err_code; } -WORD32 impd_process_drc_bitstream_dec( - ia_drc_bits_dec_struct* p_drc_bs_dec_struct, ia_bit_buf_struct* it_bit_buff, - ia_drc_config* pstr_drc_config, - ia_drc_loudness_info_set_struct* pstr_loudness_info, - UWORD8* bitstream_config, WORD32 num_bytes, WORD32 num_bits_offset, - WORD32* num_bits_read) { - WORD32 err_code = 0; - - WORD32 loudness_info_set_present, drc_config_present, dummy; - - if (bitstream_config == NULL) { - *num_bits_read = 0; - } else { - it_bit_buff = - impd_create_init_bit_buf(it_bit_buff, bitstream_config, num_bytes); - - dummy = impd_read_bits_buf(it_bit_buff, num_bits_offset); - if (it_bit_buff->error) return it_bit_buff->error; - - loudness_info_set_present = impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - - if (loudness_info_set_present) { - drc_config_present = impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - - if (drc_config_present) { - err_code = impd_parse_drc_config( - it_bit_buff, &p_drc_bs_dec_struct->ia_drc_params_struct, - pstr_drc_config); - - if (err_code) return (err_code); - } - - err_code = impd_parse_loudness_info_set(it_bit_buff, pstr_loudness_info); - - if (err_code) return (err_code); - } - - *num_bits_read = it_bit_buff->size - it_bit_buff->cnt_bits; - } - - return err_code; -} - WORD32 impd_process_drc_bitstream_dec_config( ia_drc_bits_dec_struct* p_drc_bs_dec_struct, ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config, UWORD8* bitstream_config, diff --git a/decoder/drc_src/impd_drc_bitstream_dec_api.h b/decoder/drc_src/impd_drc_bitstream_dec_api.h index 25773d5..eb1e5ba 100644 --- a/decoder/drc_src/impd_drc_bitstream_dec_api.h +++ b/decoder/drc_src/impd_drc_bitstream_dec_api.h @@ -25,13 +25,6 @@ WORD32 impd_init_drc_bitstream_dec( WORD32 frame_size, WORD32 delay_mode, WORD32 lfe_channel_map_count, WORD32* lfe_channel_map); -WORD32 impd_process_drc_bitstream_dec( - ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct, - ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config, - ia_drc_loudness_info_set_struct* pstr_loudness_info, - UWORD8* bitstream_config, WORD32 num_bytes, WORD32 num_bits_offset, - WORD32* num_bits_read); - WORD32 impd_process_drc_bitstream_dec_config( ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct, ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config, diff --git a/decoder/drc_src/impd_drc_common.h b/decoder/drc_src/impd_drc_common.h index 2afe708..3dbbd2c 100644 --- a/decoder/drc_src/impd_drc_common.h +++ b/decoder/drc_src/impd_drc_common.h @@ -53,6 +53,8 @@ extern "C" { #define NUM_ELE_IN_CPLX_NUM 2 #define MAX_BS_BUF_SIZE 768 +#define MAX_NUM_DRC_PAYROLL 3 +#define MAX_DRC_BS_BUF_SIZE (MAX_BS_BUF_SIZE * MAX_NUM_DRC_PAYROLL) #define MAX_DRC_CONFG_BUF_SIZE MAX_BS_BUF_SIZE #define MAX_LOUD_INFO_BUF_SIZE MAX_BS_BUF_SIZE #define MAX_INTERFACE_BUF_SIZE MAX_BS_BUF_SIZE @@ -213,6 +215,8 @@ extern "C" { #define SLOPE_FACTOR_DB_TO_LINEAR 0.1151f +#define MIN_DRC_SAMP_FREQ 1000 + #ifndef min #define min(a, b) ((a) < (b) ? (a) : (b)) #endif diff --git a/decoder/drc_src/impd_drc_dynamic_payload.c b/decoder/drc_src/impd_drc_dynamic_payload.c index dca5466..a8a15a9 100644 --- a/decoder/drc_src/impd_drc_dynamic_payload.c +++ b/decoder/drc_src/impd_drc_dynamic_payload.c @@ -272,8 +272,10 @@ WORD32 impd_dec_times(ia_bit_buf_struct* it_bit_buff, e++; } } - str_node[k].time = time_offs + time_delta * delta_tmin; - time_offs = str_node[k].time; + time_offs += time_delta * delta_tmin; + if (time_offs >= (2 * AUDIO_CODEC_FRAME_SIZE_MAX - drc_frame_size)) + return UNEXPECTED_ERROR; + str_node[k].time = time_offs; } } return (0); @@ -295,9 +297,13 @@ WORD32 impd_drc_uni_gain_read(ia_bit_buf_struct* it_bit_buff, for (seq = 0; seq < gain_sequence_count; seq++) { WORD32 index = drc_config->str_p_loc_drc_coefficients_uni_drc[0] .gain_set_params_index_for_gain_sequence[seq]; - ia_gain_set_params_struct* gain_set_params = - &(drc_config->str_p_loc_drc_coefficients_uni_drc - ->gain_set_params[index]); + ia_gain_set_params_struct str_gain_set_params = {0}; + ia_gain_set_params_struct* gain_set_params = &str_gain_set_params; + + if (index != -1) { + gain_set_params = &(drc_config->str_p_loc_drc_coefficients_uni_drc + ->gain_set_params[index]); + } if (gain_set_params->gain_coding_profile == GAIN_CODING_PROFILE_CONSTANT) { str_spline_nodes = @@ -394,6 +400,9 @@ WORD32 impd_parse_spline_nodes(ia_bit_buf_struct* it_bit_buff, } if (it_bit_buff->ptr_bit_buf_base == NULL) { + if ((str_spline_nodes->num_nodes < 1) || + (str_spline_nodes->num_nodes > NODE_COUNT_MAX)) + return UNEXPECTED_ERROR; FLOAT32 prev_db_gain = str_spline_nodes->str_node[str_spline_nodes->num_nodes - 1].loc_db_gain; str_spline_nodes->drc_gain_coding_mode = 0; @@ -413,6 +422,9 @@ WORD32 impd_parse_spline_nodes(ia_bit_buf_struct* it_bit_buff, } else { str_spline_nodes->drc_gain_coding_mode = impd_read_bits_buf(it_bit_buff, 1); if (it_bit_buff->error == PROC_COMPLETE) { + if ((str_spline_nodes->num_nodes < 1) || + (str_spline_nodes->num_nodes > NODE_COUNT_MAX)) + return UNEXPECTED_ERROR; str_spline_nodes->drc_gain_coding_mode = 0; str_spline_nodes->str_node[0].slope = 0.0; str_spline_nodes->str_node[0].time = @@ -509,9 +521,12 @@ WORD32 impd_parse_drc_gain_sequence( } } for (k = 0; k < num_nodes_node_reservoir; k++) { - drc_gain_sequence->str_spline_nodes[i].str_node[k].time = - prev_frame_time_buf[k] - - 2 * pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size; + WORD32 tmp = prev_frame_time_buf[k] - + 2 * pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size; + if (tmp >= (2 * AUDIO_CODEC_FRAME_SIZE_MAX - + pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size)) + return UNEXPECTED_ERROR; + drc_gain_sequence->str_spline_nodes[i].str_node[k].time = tmp; } for (m = 0; m < num_nodes_cur; m++, k++) { drc_gain_sequence->str_spline_nodes[i].str_node[k].time = @@ -574,6 +589,11 @@ WORD32 impd_parse_drc_ext_v1(ia_bit_buf_struct* it_bit_buff, drc_instructions_uni_drc_v1_count = impd_read_bits_buf(it_bit_buff, 6); if (it_bit_buff->error) return it_bit_buff->error; + if (drc_config->drc_instructions_uni_drc_count + + drc_instructions_uni_drc_v1_count > + DRC_INSTRUCTIONS_COUNT_MAX) + return (UNEXPECTED_ERROR); + for (i = 0; i < drc_instructions_uni_drc_v1_count; i++) { err = impd_parse_drc_instructions_uni_drc( it_bit_buff, version, drc_config, @@ -591,9 +611,6 @@ WORD32 impd_parse_drc_ext_v1(ia_bit_buf_struct* it_bit_buff, if (str_drc_config_ext->loud_eq_instructions_flag == 1) { str_drc_config_ext->loud_eq_instructions_count = impd_read_bits_buf(it_bit_buff, 4); - if (str_drc_config_ext->loud_eq_instructions_count > - LOUD_EQ_INSTRUCTIONS_COUNT_MAX) - return UNEXPECTED_ERROR; if (it_bit_buff->error) return it_bit_buff->error; if (str_drc_config_ext->loud_eq_instructions_count > @@ -1072,7 +1089,7 @@ WORD32 impd_parser_td_filter_cascade( WORD32 impd_parse_eq_instructions( ia_bit_buf_struct* it_bit_buff, ia_drc_config* drc_config, ia_eq_instructions_struct* str_eq_instructions) { - WORD32 i, k, channel_count, temp; + WORD32 i, channel_count, temp; WORD32 dmix_id_present, additional_dmix_id_present, additional_dmix_id_cnt = 0; WORD32 additional_drc_set_id_present, additional_drc_set_id_cnt; @@ -1182,22 +1199,20 @@ WORD32 impd_parse_eq_instructions( str_eq_instructions->eq_ch_group_count = 0; for (i = 0; i < channel_count; i++) { - WORD32 new_group = 1; - str_eq_instructions->eq_ch_group_of_channel[i] = - impd_read_bits_buf(it_bit_buff, 7); + WORD32 tmp = impd_read_bits_buf(it_bit_buff, 7); if (it_bit_buff->error) return it_bit_buff->error; - - for (k = 0; k < i; k++) { - if (str_eq_instructions->eq_ch_group_of_channel[i] == - str_eq_instructions->eq_ch_group_of_channel[k]) { - new_group = 0; - break; - } - } - - if (new_group == 1) { - str_eq_instructions->eq_ch_group_count += 1; - } + if (tmp >= EQ_CHANNEL_GROUP_COUNT_MAX) return UNEXPECTED_ERROR; + str_eq_instructions->eq_ch_group_of_channel[i] = tmp; + } + { + WORD32 total; + WORD32 groups_used[EQ_CHANNEL_GROUP_COUNT_MAX] = {0}; + for (i = 0; i < channel_count; i++) + groups_used[str_eq_instructions->eq_ch_group_of_channel[i]] = 1; + total = 0; + for (i = 0; i < EQ_CHANNEL_GROUP_COUNT_MAX; i++) + if (groups_used[i]) total++; + str_eq_instructions->eq_ch_group_count = total; } if (str_eq_instructions->eq_ch_group_count > EQ_CHANNEL_GROUP_COUNT_MAX) @@ -1208,9 +1223,10 @@ WORD32 impd_parse_eq_instructions( if (it_bit_buff->error) return it_bit_buff->error; if (str_eq_instructions->td_filter_cascade_present) { - impd_parser_td_filter_cascade( + WORD32 err = impd_parser_td_filter_cascade( it_bit_buff, str_eq_instructions, &(str_eq_instructions->str_td_filter_cascade)); + if (err) return err; } str_eq_instructions->subband_gains_present = @@ -1219,9 +1235,10 @@ WORD32 impd_parse_eq_instructions( if (str_eq_instructions->subband_gains_present) { for (i = 0; i < str_eq_instructions->eq_ch_group_count; i++) { - str_eq_instructions->subband_gains_index[i] = - impd_read_bits_buf(it_bit_buff, 6); + WORD32 tmp = impd_read_bits_buf(it_bit_buff, 6); if (it_bit_buff->error) return it_bit_buff->error; + if (tmp >= UNIQUE_SUBBAND_GAIN_COUNT_MAX) return UNEXPECTED_ERROR; + str_eq_instructions->subband_gains_index[i] = tmp; } } diff --git a/decoder/drc_src/impd_drc_eq.c b/decoder/drc_src/impd_drc_eq.c index c9983db..c72895f 100644 --- a/decoder/drc_src/impd_drc_eq.c +++ b/decoder/drc_src/impd_drc_eq.c @@ -1254,26 +1254,6 @@ VOID impd_pole_zero_filt_process(ia_pole_zero_filt_struct* pstr_pole_zero_filt, return; } -VOID impd_subband_filter_process(ia_subband_filt_struct* pstr_subband_filt, - FLOAT32* ptr_audio_real_buff, - FLOAT32* ptr_audio_imag_buff) { - WORD32 i, j; - WORD32 eq_frame_size_subband = pstr_subband_filt->eq_frame_size_subband; - WORD32 coeff_count = pstr_subband_filt->coeff_count; - - FLOAT32* ptr_subband_coeff = pstr_subband_filt->subband_coeff; - - for (i = 0; i < eq_frame_size_subband; i++) { - for (j = 0; j < coeff_count; j++) { - ptr_audio_real_buff[j] *= ptr_subband_coeff[j]; - ptr_audio_imag_buff[j] *= ptr_subband_coeff[j]; - } - ptr_audio_real_buff += coeff_count; - ptr_audio_imag_buff += coeff_count; - } - return; -} - VOID impd_phase_align_filt_process( ia_ph_alignment_filt_struct* ph_alignment_filt, WORD32 channel, FLOAT32* ptr_audio_out) { @@ -1365,23 +1345,3 @@ WORD32 impd_process_eq_set_time_domain(ia_eq_set_struct* pstr_eq_set, return 0; } -WORD32 impd_process_eq_set_subband_domain(ia_eq_set_struct* pstr_eq_set, - WORD32 channel, - FLOAT32* ptr_audio_real_buff, - FLOAT32* ptr_audio_imag_buff) { - WORD32 g; - - if (pstr_eq_set != NULL) { - g = pstr_eq_set->eq_ch_group_of_channel[channel]; - if (g >= 0) { - if (pstr_eq_set->domain == 0) { - return (-1); - } else { - impd_subband_filter_process(&pstr_eq_set->subband_filt[g], - &ptr_audio_real_buff[0], - &ptr_audio_imag_buff[0]); - } - } - } - return (0); -} diff --git a/decoder/drc_src/impd_drc_eq.h b/decoder/drc_src/impd_drc_eq.h index d45e7ed..70c8050 100644 --- a/decoder/drc_src/impd_drc_eq.h +++ b/decoder/drc_src/impd_drc_eq.h @@ -178,11 +178,6 @@ impd_process_eq_set_td(ia_eq_set_struct* eq_set, WORD32 channel, WORD32 impd_process_eq_set_time_domain(ia_eq_set_struct* eq_set, WORD32 channel, FLOAT32* audio_in, FLOAT32* audio_out, WORD32 frame_size); -WORD32 -impd_process_eq_set_subband_domain(ia_eq_set_struct* eq_set, WORD32 channel, - FLOAT32* subbandSampleIn, - FLOAT32* subbandSampleOut); - #ifdef __cplusplus } #endif diff --git a/decoder/drc_src/impd_drc_extr_delta_coded_info.c b/decoder/drc_src/impd_drc_extr_delta_coded_info.c index a1ca0b7..485e629 100644 --- a/decoder/drc_src/impd_drc_extr_delta_coded_info.c +++ b/decoder/drc_src/impd_drc_extr_delta_coded_info.c @@ -87,9 +87,6 @@ WORD32 impd_get_delta_tmin(const WORD32 sampling_rate) { WORD32 lowerBound = (WORD32)(0.5f + 0.0005f * sampling_rate); WORD32 result = 1; - if (sampling_rate < 1000) { - return (UNEXPECTED_ERROR); - } while (result <= lowerBound) result = result << 1; return result; } diff --git a/decoder/drc_src/impd_drc_fiilter_bank.c b/decoder/drc_src/impd_drc_fiilter_bank.c deleted file mode 100644 index f6637b6..0000000 --- a/decoder/drc_src/impd_drc_fiilter_bank.c +++ /dev/null @@ -1,431 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2015 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 -*/ -#include <stdio.h> -#include <stdlib.h> -#include <math.h> - -#include "impd_type_def.h" -#include "impd_drc_uni_tables.h" -#include "impd_drc_uni_common.h" -#include "impd_drc_struct.h" -#include "impd_drc_filter_bank.h" -#include "impd_drc_rom.h" - -VOID impd_compute_filt_coeff(WORD32 crossover_freq_idx, - ia_iir_filter_struct* pstr_lp_filt_coeff, - ia_iir_filter_struct* pstr_hp_filt_coeff, - ia_iir_filter_struct* pstr_ap_filt_coeff, - WORD32 filter_type) { - FLOAT32 gamma = normal_cross_freq[crossover_freq_idx].gamma; - FLOAT32 delta = normal_cross_freq[crossover_freq_idx].delta; - - if (filter_type == 0 || filter_type == 2) { - pstr_lp_filt_coeff->a0 = 1.0f; - pstr_lp_filt_coeff->a1 = 2.0f * (gamma - delta); - pstr_lp_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f; - pstr_lp_filt_coeff->b0 = gamma; - pstr_lp_filt_coeff->b1 = 2.0f * gamma; - pstr_lp_filt_coeff->b2 = gamma; - - pstr_hp_filt_coeff->a0 = 1.0f; - pstr_hp_filt_coeff->a1 = pstr_lp_filt_coeff->a1; - pstr_hp_filt_coeff->a2 = pstr_lp_filt_coeff->a2; - pstr_hp_filt_coeff->b0 = delta; - pstr_hp_filt_coeff->b1 = -2.0f * delta; - pstr_hp_filt_coeff->b2 = delta; - } - - if (filter_type == 1 || filter_type == 2) { - pstr_ap_filt_coeff->a0 = 1.0f; - pstr_ap_filt_coeff->a1 = 2.0f * (gamma - delta); - ; - pstr_ap_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f; - ; - pstr_ap_filt_coeff->b0 = pstr_ap_filt_coeff->a2; - pstr_ap_filt_coeff->b1 = pstr_ap_filt_coeff->a1; - pstr_ap_filt_coeff->b2 = pstr_ap_filt_coeff->a0; - } - - return; -} - -WORD32 impd_initialize_filt_bank(WORD32 num_sub_bands, - ia_gain_params_struct* gain_params, - ia_drc_filter_bank_struct* drc_filter_bank) { - ia_two_band_filt_struct* str_two_band_bank; - ia_three_band_filt_struct* str_three_band_bank; - ia_four_band_filt_struct* str_four_band_bank; - drc_filter_bank->complexity = 0; - drc_filter_bank->num_bands = num_sub_bands; - - if (num_sub_bands == 1) { - return 0; - } else if (num_sub_bands == 2) { - str_two_band_bank = &drc_filter_bank->str_two_band_bank; - impd_compute_filt_coeff(gain_params[1].crossover_freq_idx, - &(str_two_band_bank->low_pass), - &(str_two_band_bank->high_pass), NULL, 0); - } else if (num_sub_bands == 3) { - str_three_band_bank = &drc_filter_bank->str_three_band_bank; - - impd_compute_filt_coeff(gain_params[1].crossover_freq_idx, - &(str_three_band_bank->str_low_pass_stage_2), - &(str_three_band_bank->str_high_pass_stage_2), - &(str_three_band_bank->str_all_pass_stage_2), 2); - impd_compute_filt_coeff(gain_params[2].crossover_freq_idx, - &(str_three_band_bank->str_low_pass_stage_1), - &(str_three_band_bank->str_high_pass_stage_1), NULL, - 0); - } - - else if (num_sub_bands == 4) { - str_four_band_bank = &drc_filter_bank->str_four_band_bank; - - impd_compute_filt_coeff(gain_params[1].crossover_freq_idx, - &(str_four_band_bank->str_low_pass_stage_3_low), - &(str_four_band_bank->str_high_pass_stage_3_low), - &(str_four_band_bank->str_all_pass_stage_2_high), - 2); - impd_compute_filt_coeff(gain_params[2].crossover_freq_idx, - &(str_four_band_bank->str_low_pass_stage_1), - &(str_four_band_bank->str_high_pass_stage_1), NULL, - 0); - impd_compute_filt_coeff(gain_params[3].crossover_freq_idx, - &(str_four_band_bank->str_low_pass_stage_3_high), - &(str_four_band_bank->str_high_pass_stage_3_high), - &(str_four_band_bank->str_all_pass_stage_2_low), 2); - } else { - return -1; - } - - return 0; -} - -WORD32 impd_init_all_filter_banks( - ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc, - ia_drc_instructions_struct* str_drc_instruction_str, - ia_filter_banks_struct* ia_filter_banks_struct) { - WORD32 err_code = 0; - WORD32 b, g, i, k, m, s, crossover_freq_idx, num_ch_in_groups, - num_ph_align_ch_groups; - WORD32 match_found = 0, num_filter; - WORD32 cascade_cross_idx[CHANNEL_GROUP_COUNT_MAX + 1] - [CHANNEL_GROUP_COUNT_MAX * 3]; - WORD32 count[CHANNEL_GROUP_COUNT_MAX + 1]; - - num_ch_in_groups = 0; - num_ph_align_ch_groups = str_drc_instruction_str->num_drc_ch_groups; - - for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) { - num_ch_in_groups += str_drc_instruction_str->num_chan_per_ch_group[g]; - } - - if (num_ch_in_groups < str_drc_instruction_str->audio_num_chan) { - num_ph_align_ch_groups++; - } - - ia_filter_banks_struct->nfilter_banks = - str_drc_instruction_str->num_drc_ch_groups; - ia_filter_banks_struct->num_ph_align_ch_groups = num_ph_align_ch_groups; - - if (str_p_loc_drc_coefficients_uni_drc == NULL) { - ia_filter_banks_struct->str_drc_filter_bank->num_bands = 1; - } else { - for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) { - err_code = impd_initialize_filt_bank( - str_p_loc_drc_coefficients_uni_drc - ->gain_set_params[str_drc_instruction_str - ->gain_set_index_for_channel_group[g]] - .band_count, - str_p_loc_drc_coefficients_uni_drc - ->gain_set_params[str_drc_instruction_str - ->gain_set_index_for_channel_group[g]] - .gain_params, - &(ia_filter_banks_struct->str_drc_filter_bank[g])); - if (err_code != 0) return (err_code); - } - } - - for (g = 0; g < CHANNEL_GROUP_COUNT_MAX + 1; g++) { - count[g] = 0; - } - for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) { - for (b = 1; - b < str_p_loc_drc_coefficients_uni_drc - ->gain_set_params[str_drc_instruction_str - ->gain_set_index_for_channel_group[g]] - .band_count; - b++) { - crossover_freq_idx = - str_p_loc_drc_coefficients_uni_drc - ->gain_set_params[str_drc_instruction_str - ->gain_set_index_for_channel_group[g]] - .gain_params[b] - .crossover_freq_idx; - for (k = 0; k < num_ph_align_ch_groups; k++) { - if (k != g) { - cascade_cross_idx[k][count[k]] = crossover_freq_idx; - count[k]++; - if (count[k] > CHANNEL_GROUP_COUNT_MAX * 3) { - return -1; - } - } - } - } - } - - i = 0; - while (i < count[0]) { - crossover_freq_idx = cascade_cross_idx[0][i]; - match_found = 0; - for (g = 1; g < num_ph_align_ch_groups; g++) { - match_found = 0; - for (k = 0; k < count[g]; k++) { - if (cascade_cross_idx[g][k] == crossover_freq_idx) { - match_found = 1; - break; - } - } - if (match_found == 0) break; - } - if (match_found == 1) { - for (g = 0; g < num_ph_align_ch_groups; g++) { - for (m = 0; m < count[g]; m++) { - if (cascade_cross_idx[g][m] == crossover_freq_idx) { - for (s = m + 1; s < count[g]; s++) { - cascade_cross_idx[g][s - 1] = cascade_cross_idx[g][s]; - } - count[g]--; - break; - } - } - } - i = 0; - } else { - i++; - } - } - - for (g = 0; g < num_ph_align_ch_groups; g++) { - num_filter = count[g]; - if (num_filter > 0) { - for (i = 0; i < num_filter; i++) { - impd_compute_filt_coeff( - cascade_cross_idx[g][i], NULL, NULL, - &(ia_filter_banks_struct->str_drc_filter_bank[g] - .str_all_pass_cascade.str_all_pass_cascade_filter[i] - .str_all_pass_stage), - 1); - } - ia_filter_banks_struct->str_drc_filter_bank[g] - .str_all_pass_cascade.num_filter = num_filter; - } - - if (err_code != 0) return (err_code); - } - - return 0; -} - -VOID impd_iir_second_order_filter_all_pass(ia_iir_filter_struct* filter, - WORD32 chan_idx, WORD32 frame_len, - FLOAT32* input, FLOAT32* output) { - WORD32 i; - FLOAT32 tmp; - FLOAT32 a1 = filter->a1; - FLOAT32 a2 = filter->a2; - FLOAT32 b0 = filter->b0; - FLOAT32 b1 = filter->b1; - FLOAT32 b2 = filter->b2; - - FLOAT32 st1 = filter->x_p[chan_idx * 2]; - FLOAT32 st2 = filter->y_p[chan_idx * 2]; - - for (i = 0; i < frame_len; i++) { - tmp = input[i]; - output[i] = b0 * tmp + st1; - st1 = b1 * tmp - a1 * output[i] + st2; - st2 = b2 * tmp - a2 * output[i]; - } - filter->x_p[chan_idx * 2] = st1; - filter->y_p[chan_idx * 2] = st2; - - return; -} - -VOID impd_apply_low_high_filter(ia_iir_filter_struct* pstr_lp_filt_coeff, - ia_iir_filter_struct* pstr_hp_filt_coeff, - WORD32 chan_idx, WORD32 frame_len, - FLOAT32* input, FLOAT32* output[]) { - WORD32 i; - FLOAT32 tmp, tmp1; - FLOAT32 a1_l = pstr_lp_filt_coeff->a1; - FLOAT32 a2_l = pstr_lp_filt_coeff->a2; - FLOAT32 b0_l = pstr_lp_filt_coeff->b0; - FLOAT32 b1_l = pstr_lp_filt_coeff->b1; - FLOAT32 b2_l = pstr_lp_filt_coeff->b2; - - FLOAT32 st1_l = pstr_lp_filt_coeff->x_p[chan_idx * 2 + 0]; - FLOAT32 st2_l = pstr_lp_filt_coeff->x_p[chan_idx * 2 + 1]; - FLOAT32 st3_l = pstr_lp_filt_coeff->y_p[chan_idx * 2 + 0]; - FLOAT32 st4_l = pstr_lp_filt_coeff->y_p[chan_idx * 2 + 1]; - - FLOAT32 a1_h = pstr_hp_filt_coeff->a1; - FLOAT32 a2_h = pstr_hp_filt_coeff->a2; - FLOAT32 b0_h = pstr_hp_filt_coeff->b0; - FLOAT32 b1_h = pstr_hp_filt_coeff->b1; - FLOAT32 b2_h = pstr_hp_filt_coeff->b2; - - FLOAT32 st1_h = pstr_hp_filt_coeff->x_p[chan_idx * 2 + 0]; - FLOAT32 st2_h = pstr_hp_filt_coeff->x_p[chan_idx * 2 + 1]; - FLOAT32 st3_h = pstr_hp_filt_coeff->y_p[chan_idx * 2 + 0]; - FLOAT32 st4_h = pstr_hp_filt_coeff->y_p[chan_idx * 2 + 1]; - - FLOAT32* output_low = output[0]; - FLOAT32* output_high = output[1]; - - for (i = 0; i < frame_len; i++) { - tmp1 = input[i]; - tmp = b0_l * tmp1 + st1_l; - st1_l = b1_l * tmp1 - a1_l * tmp + st2_l; - st2_l = b2_l * tmp1 - a2_l * tmp; - - output_low[i] = b0_l * tmp + st3_l; - st3_l = b1_l * tmp - a1_l * output_low[i] + st4_l; - st4_l = b2_l * tmp - a2_l * output_low[i]; - - tmp = b0_h * tmp1 + st1_h; - st1_h = b1_h * tmp1 - a1_h * tmp + st2_h; - st2_h = b2_h * tmp1 - a2_h * tmp; - - output_high[i] = b0_h * tmp + st3_h; - st3_h = b1_h * tmp - a1_h * output_high[i] + st4_h; - st4_h = b2_h * tmp - a2_h * output_high[i]; - } - pstr_lp_filt_coeff->x_p[chan_idx * 2 + 0] = st1_l; - pstr_lp_filt_coeff->x_p[chan_idx * 2 + 1] = st2_l; - pstr_lp_filt_coeff->y_p[chan_idx * 2 + 0] = st3_l; - pstr_lp_filt_coeff->y_p[chan_idx * 2 + 1] = st4_l; - - pstr_hp_filt_coeff->x_p[chan_idx * 2 + 0] = st1_h; - pstr_hp_filt_coeff->x_p[chan_idx * 2 + 1] = st2_h; - pstr_hp_filt_coeff->y_p[chan_idx * 2 + 0] = st3_h; - pstr_hp_filt_coeff->y_p[chan_idx * 2 + 1] = st4_h; - - return; -} -VOID impd_two_band_filter_process(ia_two_band_filt_struct* str_two_band_bank, - WORD32 chan_idx, WORD32 frame_len, - FLOAT32* input, FLOAT32* output[]) { - ia_iir_filter_struct* pstr_lp_filt_coeff = &str_two_band_bank->low_pass; - ia_iir_filter_struct* pstr_hp_filt_coeff = &str_two_band_bank->high_pass; - - impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, chan_idx, - frame_len, input, output); - return; -} - -VOID impd_three_band_filter_process( - ia_three_band_filt_struct* str_three_band_bank, WORD32 c, WORD32 size, - FLOAT32* input, FLOAT32* output[]) { - WORD32 err_code = 0; - ia_iir_filter_struct* all_pass_filter; - ia_iir_filter_struct* pstr_lp_filt_coeff = - &str_three_band_bank->str_low_pass_stage_1; - ia_iir_filter_struct* pstr_hp_filt_coeff = - &str_three_band_bank->str_high_pass_stage_1; - FLOAT32* output1[2]; - output1[0] = output[0]; - output1[1] = output[1]; - - impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, c, size, - input, output1); - - all_pass_filter = &str_three_band_bank->str_all_pass_stage_2; - - impd_iir_second_order_filter_all_pass(all_pass_filter, c, size, output1[1], - output[2]); - pstr_lp_filt_coeff = &str_three_band_bank->str_low_pass_stage_2; - pstr_hp_filt_coeff = &str_three_band_bank->str_high_pass_stage_2; - - impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, c, size, - output1[0], output1); - - return; -} - -VOID impd_four_band_filter_process(ia_four_band_filt_struct* str_four_band_bank, - WORD32 cha_idx, WORD32 win_size, - FLOAT32* input, FLOAT32* output[]) { - WORD32 err_code = 0; - ia_iir_filter_struct* all_pass_filter; - ia_iir_filter_struct* pstr_lp_filt_coeff = - &str_four_band_bank->str_low_pass_stage_1; - ia_iir_filter_struct* pstr_hp_filt_coeff = - &str_four_band_bank->str_high_pass_stage_1; - FLOAT32* output1[2]; - FLOAT32* output2[2]; - output1[0] = output[0]; - output1[1] = output[1]; - output2[0] = output[2]; - output2[1] = output[3]; - - impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx, - win_size, input, output1); - - all_pass_filter = &str_four_band_bank->str_all_pass_stage_2_low; - - impd_iir_second_order_filter_all_pass(all_pass_filter, cha_idx, win_size, - output1[0], output1[0]); - - all_pass_filter = &str_four_band_bank->str_all_pass_stage_2_high; - - impd_iir_second_order_filter_all_pass(all_pass_filter, cha_idx, win_size, - output1[1], output2[0]); - - pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_low; - pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_low; - - impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx, - win_size, output1[0], output1); - - pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_high; - pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_high; - - impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx, - win_size, output2[0], output2); - - return; -} - -VOID impd_all_pass_cascade_process( - ia_all_pass_cascade_struct* str_all_pass_cascade, WORD32 ch_idx, - WORD32 win_size, FLOAT32* input) { - WORD32 i; - - for (i = 0; i < str_all_pass_cascade->num_filter; i++) { - impd_iir_second_order_filter_all_pass( - &(str_all_pass_cascade->str_all_pass_cascade_filter[i] - .str_all_pass_stage), - ch_idx, win_size, input, input); - } - - return; -}
\ No newline at end of file diff --git a/decoder/drc_src/impd_drc_gain_dec.c b/decoder/drc_src/impd_drc_gain_dec.c index accce93..f3486fe 100644 --- a/decoder/drc_src/impd_drc_gain_dec.c +++ b/decoder/drc_src/impd_drc_gain_dec.c @@ -34,7 +34,7 @@ #include "impd_drc_eq.h" #include "impd_drc_gain_decoder.h" -extern ia_cicp_sigmoid_characteristic_param_struct +extern const ia_cicp_sigmoid_characteristic_param_struct pstr_cicp_sigmoid_characteristic_param[]; WORD32 impd_gain_db_to_lin(ia_interp_params_struct* interp_params_str, @@ -433,15 +433,15 @@ WORD32 impd_interpolate_drc_gain(ia_interp_params_struct* interp_params_str, return (UNEXPECTED_ERROR); } + err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain0, slope0, + &gain_t1, &slope_t1); + if (err) return (err); + err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain1, slope1, + &gain_t2, &slope_t2); + if (err) return (err); + if (interp_params_str->gain_interpolation_type == GAIN_INTERPOLATION_TYPE_SPLINE) { - err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain0, slope0, - &gain_t1, &slope_t1); - if (err) return (err); - err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain1, slope1, - &gain_t2, &slope_t2); - if (err) return (err); - slope_t1 = slope_t1 / (FLOAT32)interp_params_str->delta_tmin; slope_t2 = slope_t2 / (FLOAT32)interp_params_str->delta_tmin; if ((FLOAT32)fabs((FLOAT64)slope_t1) > (FLOAT32)fabs((FLOAT64)slope_t2)) { @@ -522,14 +522,9 @@ WORD32 impd_interpolate_drc_gain(ia_interp_params_struct* interp_params_str, } } } else { - err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain1, slope1, - &gain_t2, &slope_t2); - if (err) return (err); - - a = 0; - b = gain_t2; - - result[0] = gain_t2; + a = (gain_t2 - gain_t1) / (FLOAT32)gain_step_tdomain; + b = gain_t1; + result[0] = gain_t1; result[gain_step_tdomain] = gain_t2; for (n = 1; n < gain_step_tdomain; n++) { FLOAT32 t = (FLOAT32)n; diff --git a/decoder/drc_src/impd_drc_gain_decoder.c b/decoder/drc_src/impd_drc_gain_decoder.c index 829f576..c9d29ea 100644 --- a/decoder/drc_src/impd_drc_gain_decoder.c +++ b/decoder/drc_src/impd_drc_gain_decoder.c @@ -380,76 +380,6 @@ IA_ERRORCODE impd_drc_process_time_domain( return err_code; } -IA_ERRORCODE impd_drc_process_freq_domain( - ia_drc_gain_dec_struct* p_drc_gain_dec_structs, - ia_drc_config* pstr_drc_config, ia_drc_gain_struct* pstr_drc_gain, - FLOAT32* audio_real_buff[], FLOAT32* audio_imag_buff[], - FLOAT32 loudness_normalization_gain_db, FLOAT32 boost, FLOAT32 compress, - WORD32 drc_characteristic_target) { - WORD32 sel_drc_index; - IA_ERRORCODE err_code = 0; - ia_drc_instructions_struct* str_drc_instruction_str = - pstr_drc_config->str_drc_instruction_str; - - if (p_drc_gain_dec_structs->eq_set) { - WORD32 ch; - - for (ch = 0; ch < p_drc_gain_dec_structs->eq_set->audio_num_chan; ch++) { - err_code = impd_process_eq_set_subband_domain( - p_drc_gain_dec_structs->eq_set, ch, audio_real_buff[ch], - audio_imag_buff[ch]); - if (err_code != IA_NO_ERROR) return (err_code); - } - } - err_code = impd_store_audio_io_buffer_freq( - audio_real_buff, audio_imag_buff, - &p_drc_gain_dec_structs->audio_in_out_buf); - if (err_code != IA_NO_ERROR) return (err_code); - - if (pstr_drc_config->apply_drc) { - for (sel_drc_index = 0; - sel_drc_index < - p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter; - sel_drc_index++) { - err_code = impd_get_drc_gain( - p_drc_gain_dec_structs, pstr_drc_config, pstr_drc_gain, compress, - boost, drc_characteristic_target, loudness_normalization_gain_db, - sel_drc_index, &p_drc_gain_dec_structs->drc_gain_buffers); - if (err_code != IA_NO_ERROR) return (err_code); - } - - if (p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter == 0) { - err_code = impd_retrieve_audio_buffer_freq( - audio_real_buff, audio_imag_buff, - &p_drc_gain_dec_structs->audio_in_out_buf); - if (err_code != IA_NO_ERROR) return (err_code); - } else { - for (sel_drc_index = 0; - sel_drc_index < - p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter; - sel_drc_index++) { - err_code = impd_apply_gains_subband( - str_drc_instruction_str, - p_drc_gain_dec_structs->ia_drc_params_struct - .sel_drc_array[sel_drc_index] - .drc_instructions_index, - &p_drc_gain_dec_structs->ia_drc_params_struct, - &(p_drc_gain_dec_structs->drc_gain_buffers - .pstr_gain_buf[sel_drc_index]), - &p_drc_gain_dec_structs->str_overlap_params, - p_drc_gain_dec_structs->audio_in_out_buf.audio_buffer_delayed_real, - p_drc_gain_dec_structs->audio_in_out_buf.audio_buffer_delayed_imag, - audio_real_buff, audio_imag_buff); - if (err_code != IA_NO_ERROR) return (err_code); - } - } - } - - err_code = - impd_advance_audio_buff_freq(&p_drc_gain_dec_structs->audio_in_out_buf); - - return err_code; -} VOID impd_get_parametric_drc_delay( ia_drc_gain_dec_struct* p_drc_gain_dec_structs, diff --git a/decoder/drc_src/impd_drc_host_params.c b/decoder/drc_src/impd_drc_host_params.c deleted file mode 100644 index 0cfe0df..0000000 --- a/decoder/drc_src/impd_drc_host_params.c +++ /dev/null @@ -1,197 +0,0 @@ -/****************************************************************************** - * - * 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 -*/ -#include <stdio.h> -#include "impd_type_def.h" -#include "impd_drc_extr_delta_coded_info.h" -#include "impd_drc_common.h" -#include "impd_drc_struct.h" -#include "impd_drc_interface.h" -#include "impd_drc_selection_process.h" -#include "impd_drc_filter_bank.h" -#include "impd_drc_rom.h" - -WORD32 impd_set_default_params_selection_process( - ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params) { - pstr_drc_sel_proc_params->base_channel_count = -1; - pstr_drc_sel_proc_params->base_layout = -1; - pstr_drc_sel_proc_params->target_config_request_type = 0; - pstr_drc_sel_proc_params->num_downmix_id_requests = 0; - - pstr_drc_sel_proc_params->album_mode = 0; - - pstr_drc_sel_proc_params->peak_limiter = 1; - - pstr_drc_sel_proc_params->loudness_normalization_on = 0; - pstr_drc_sel_proc_params->target_loudness = -24.0f; - - pstr_drc_sel_proc_params->loudness_deviation_max = - LOUDNESS_DEVIATION_MAX_DEFAULT; - - pstr_drc_sel_proc_params->loudness_measurement_method = - USER_METHOD_DEFINITION_DEFAULT; - pstr_drc_sel_proc_params->loudness_measurement_system = - USER_MEASUREMENT_SYSTEM_DEFAULT; - pstr_drc_sel_proc_params->loudness_measurement_pre_proc = - USER_LOUDNESS_PREPROCESSING_DEFAULT; - pstr_drc_sel_proc_params->device_cut_off_frequency = 500; - pstr_drc_sel_proc_params->loudness_norm_gain_db_max = - LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT; - pstr_drc_sel_proc_params->loudness_norm_gain_modification_db = 0.0f; - pstr_drc_sel_proc_params->output_peak_level_max = 0.0f; - if (pstr_drc_sel_proc_params->peak_limiter == 1) { - pstr_drc_sel_proc_params->output_peak_level_max = 6.0f; - } - - pstr_drc_sel_proc_params->dynamic_range_control_on = 1; - pstr_drc_sel_proc_params->num_bands_supported = 4; - pstr_drc_sel_proc_params->num_drc_feature_requests = 0; - - pstr_drc_sel_proc_params->boost = 1.f; - pstr_drc_sel_proc_params->compress = 1.f; - pstr_drc_sel_proc_params->drc_characteristic_target = 0; - - return 0; -} -WORD32 impd_set_custom_params( - const WORD32 param_set_idx, - ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params) { - WORD32 i, k; - - const ia_loc_sys_interface_struct* system_interface = - &(loc_sys_interface[param_set_idx - 1]); - - const ia_loc_loudness_norm_ctrl_interface_struct* - loudness_norm_ctrl_interface = - &(loc_loudness_norm_ctrl_interface[param_set_idx - 1]); - const ia_loc_loudness_norm_param_interface_struct* - loudness_norm_param_interface = - &(loc_loudness_norm_param_interface[param_set_idx - 1]); - - const ia_loc_drc_interface_struct* drc_ctrl_interface = - &(loc_dyn_range_ctrl_interface[param_set_idx - 1]); - const ia_loc_requested_drc_effect_struct* requested_drc_effect_type = - &(loc_requested_drc_effect_type_str[param_set_idx - 1]); - const ia_loc_drc_parameter_interface_struct* drc_parameter_interface = - &(loc_drc_parameter_interface[param_set_idx - 1]); - - pstr_drc_sel_proc_params->target_config_request_type = - system_interface->target_config_request_type; - switch (system_interface->target_config_request_type) { - case 1: - pstr_drc_sel_proc_params->requested_target_layout = - system_interface->requested_target_layout; - break; - case 2: - pstr_drc_sel_proc_params->requested_target_ch_count = - system_interface->requested_target_ch_count; - break; - case 0: - default: - pstr_drc_sel_proc_params->num_downmix_id_requests = - system_interface->num_downmix_id_requests; - for (i = 0; i < system_interface->num_downmix_id_requests; i++) { - pstr_drc_sel_proc_params->requested_dwnmix_id[i] = - system_interface->requested_dwnmix_id[i]; - } - break; - } - - pstr_drc_sel_proc_params->loudness_normalization_on = - loudness_norm_ctrl_interface->loudness_normalization_on; - pstr_drc_sel_proc_params->target_loudness = - loudness_norm_ctrl_interface->target_loudness; - - pstr_drc_sel_proc_params->album_mode = - loudness_norm_param_interface->album_mode; - pstr_drc_sel_proc_params->peak_limiter = - loudness_norm_param_interface->peak_limiter; - pstr_drc_sel_proc_params->loudness_deviation_max = - loudness_norm_param_interface->loudness_deviation_max; - pstr_drc_sel_proc_params->loudness_measurement_method = - loudness_norm_param_interface->loudness_measurement_method; - pstr_drc_sel_proc_params->loudness_measurement_system = - loudness_norm_param_interface->loudness_measurement_system; - pstr_drc_sel_proc_params->loudness_measurement_pre_proc = - loudness_norm_param_interface->loudness_measurement_pre_proc; - pstr_drc_sel_proc_params->device_cut_off_frequency = - loudness_norm_param_interface->device_cut_off_frequency; - pstr_drc_sel_proc_params->loudness_norm_gain_db_max = - loudness_norm_param_interface->loudness_norm_gain_db_max; - pstr_drc_sel_proc_params->loudness_norm_gain_modification_db = - loudness_norm_param_interface->loudness_norm_gain_modification_db; - pstr_drc_sel_proc_params->output_peak_level_max = - loudness_norm_param_interface->output_peak_level_max; - - pstr_drc_sel_proc_params->dynamic_range_control_on = - drc_ctrl_interface->dynamic_range_control_on; - pstr_drc_sel_proc_params->num_drc_feature_requests = - drc_ctrl_interface->num_drc_feature_requests; - for (i = 0; i < drc_ctrl_interface->num_drc_feature_requests; i++) { - pstr_drc_sel_proc_params->drc_feature_req_type[i] = - drc_ctrl_interface->drc_feature_req_type[i]; - switch (drc_ctrl_interface->drc_feature_req_type[i]) { - case MATCH_EFFECT_TYPE: - pstr_drc_sel_proc_params->requested_num_drc_effects[i] = - requested_drc_effect_type->requested_num_drc_effects; - pstr_drc_sel_proc_params->desired_num_drc_effects_of_requested[i] = - requested_drc_effect_type->desired_num_drc_effects_of_requested; - for (k = 0; k < requested_drc_effect_type->requested_num_drc_effects; - k++) { - pstr_drc_sel_proc_params->requested_drc_effect_type[i][k] = - requested_drc_effect_type->requested_drc_effect_type[k]; - } - break; - case MATCH_DYNAMIC_RANGE: - pstr_drc_sel_proc_params->requested_dyn_range_measur_type[i] = - drc_ctrl_interface->requested_dyn_rng_measurement_type; - pstr_drc_sel_proc_params->requested_dyn_range_range_flag[i] = - drc_ctrl_interface->requested_dyn_range_is_single_val_flag; - pstr_drc_sel_proc_params->requested_dyn_range_value[i] = - drc_ctrl_interface->requested_dyn_range_value; - pstr_drc_sel_proc_params->requested_dyn_range_min_val[i] = - drc_ctrl_interface->requested_dyn_range_min_val; - pstr_drc_sel_proc_params->requested_dyn_range_max_val[i] = - drc_ctrl_interface->requested_dyn_range_max_val; - break; - case MATCH_DRC_CHARACTERISTIC: - pstr_drc_sel_proc_params->requested_drc_characteristic[i] = - drc_ctrl_interface->requested_drc_characteristic; - break; - default: - return (UNEXPECTED_ERROR); - } - } - - pstr_drc_sel_proc_params->boost = drc_parameter_interface->boost; - pstr_drc_sel_proc_params->compress = drc_parameter_interface->compress; - pstr_drc_sel_proc_params->drc_characteristic_target = - drc_parameter_interface->drc_characteristic_target; - - return (0); -} -WORD32 impd_eval_custom_params_selection_process( - ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params) { - pstr_drc_sel_proc_params->loudness_norm_gain_db_max = - max(0.0f, pstr_drc_sel_proc_params->loudness_norm_gain_db_max); - pstr_drc_sel_proc_params->loudness_deviation_max = - max(0, pstr_drc_sel_proc_params->loudness_deviation_max); - - return (0); -} diff --git a/decoder/drc_src/impd_drc_host_params.h b/decoder/drc_src/impd_drc_host_params.h deleted file mode 100644 index 9c71245..0000000 --- a/decoder/drc_src/impd_drc_host_params.h +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** - * - * 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_HOST_PARAMS_H -#define IMPD_DRC_HOST_PARAMS_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -WORD32 impd_set_default_params_selection_process( - ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params); - -WORD32 impd_set_custom_params( - const WORD32 param_set_idx, - ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params); - -WORD32 impd_eval_custom_params_selection_process( - ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/decoder/drc_src/impd_drc_init.c b/decoder/drc_src/impd_drc_init.c index b4711c8..3e0d622 100644 --- a/decoder/drc_src/impd_drc_init.c +++ b/decoder/drc_src/impd_drc_init.c @@ -41,7 +41,6 @@ #include "impd_drc_selection_process.h" #include "impd_drc_api_struct_def.h" #include "impd_drc_peak_limiter.h" -#include "impd_drc_host_params.h" #define PARAMETRIC_DRC_DELAY_MAX_DEFAULT 4096 #define EQ_DELAY_MAX_DEFAULT 256 @@ -90,7 +89,7 @@ static WORD32 impd_match_downmix(WORD32 downmix_id, WORD32 dec_downmix_id) { IA_ERRORCODE impd_drc_set_default_config(ia_drc_api_struct *p_obj_drc) { memset(p_obj_drc, 0, sizeof(*p_obj_drc)); - p_obj_drc->str_config.bitstream_file_format = 0; + p_obj_drc->str_config.bitstream_file_format = 1; p_obj_drc->str_config.dec_type = 0; p_obj_drc->str_config.sub_band_domain_mode = 0; p_obj_drc->str_config.sub_band_count = 0; @@ -102,10 +101,11 @@ IA_ERRORCODE impd_drc_set_default_config(ia_drc_api_struct *p_obj_drc) { p_obj_drc->str_config.control_parameter_index = -1; p_obj_drc->str_config.peak_limiter = 0; p_obj_drc->str_config.delay_mode = 0; - p_obj_drc->str_config.interface_bitstream_present = 0; + p_obj_drc->str_config.interface_bitstream_present = 1; p_obj_drc->str_config.gain_delay_samples = 0; p_obj_drc->str_config.absorb_delay_on = 1; p_obj_drc->str_config.subband_domain_io_flag = 0; + p_obj_drc->str_bit_handler.gain_stream_flag = 1; p_obj_drc->str_config.constant_delay_on = 0; p_obj_drc->str_config.audio_delay_samples = 0; p_obj_drc->str_config.effect_type = 0; @@ -274,79 +274,85 @@ IA_ERRORCODE impd_drc_set_default_bitstream_config( } IA_ERRORCODE impd_drc_set_struct_pointer(ia_drc_api_struct *p_obj_drc) { - SIZE_T persistant_ptr = (SIZE_T)p_obj_drc->p_state->persistant_ptr; + SIZE_T persistent_ptr = (SIZE_T)p_obj_drc->p_state->persistent_ptr; + SIZE_T persistent_size_consumed = 0; p_obj_drc->str_payload.pstr_bitstream_dec = - (ia_drc_bits_dec_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_bits_dec_struct); + (ia_drc_bits_dec_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_bits_dec_struct); p_obj_drc->str_payload.pstr_gain_dec[0] = - (ia_drc_gain_dec_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_gain_dec_struct); + (ia_drc_gain_dec_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_gain_dec_struct); p_obj_drc->str_payload.pstr_gain_dec[1] = - (ia_drc_gain_dec_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_gain_dec_struct); + (ia_drc_gain_dec_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_gain_dec_struct); p_obj_drc->str_payload.pstr_loudness_info = - (ia_drc_loudness_info_set_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_loudness_info_set_struct); + (ia_drc_loudness_info_set_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_loudness_info_set_struct); - p_obj_drc->str_payload.pstr_drc_gain = (ia_drc_gain_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_gain_struct); + p_obj_drc->str_payload.pstr_drc_gain = (ia_drc_gain_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_gain_struct); p_obj_drc->str_payload.pstr_drc_interface = - (ia_drc_interface_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_interface_struct); + (ia_drc_interface_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_interface_struct); - p_obj_drc->str_payload.pstr_drc_config = (ia_drc_config *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_config); + p_obj_drc->str_payload.pstr_drc_config = (ia_drc_config *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_config); p_obj_drc->str_payload.pstr_selection_proc = - (ia_drc_sel_pro_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_sel_pro_struct); + (ia_drc_sel_pro_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_sel_pro_struct); - p_obj_drc->str_bit_handler.it_bit_buf = (UWORD8 *)persistant_ptr; - persistant_ptr = persistant_ptr + MAX_BS_BUF_SIZE; + p_obj_drc->str_bit_handler.it_bit_buf = (UWORD8 *)persistent_ptr; + persistent_ptr = persistent_ptr + MAX_DRC_BS_BUF_SIZE; p_obj_drc->str_payload.pstr_drc_sel_proc_params = - (ia_drc_sel_proc_params_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_sel_proc_params_struct); + (ia_drc_sel_proc_params_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_sel_proc_params_struct); p_obj_drc->str_payload.pstr_drc_sel_proc_output = - (ia_drc_sel_proc_output_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_sel_proc_output_struct); + (ia_drc_sel_proc_output_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_sel_proc_output_struct); - p_obj_drc->str_bit_handler.bitstream_drc_config = (UWORD8 *)persistant_ptr; - persistant_ptr = persistant_ptr + MAX_BS_BUF_SIZE; + p_obj_drc->str_bit_handler.bitstream_drc_config = (UWORD8 *)persistent_ptr; + persistent_ptr = persistent_ptr + MAX_BS_BUF_SIZE; - p_obj_drc->str_bit_handler.bitstream_loudness_info = (UWORD8 *)persistant_ptr; - persistant_ptr = persistant_ptr + MAX_BS_BUF_SIZE; + p_obj_drc->str_bit_handler.bitstream_loudness_info = (UWORD8 *)persistent_ptr; + persistent_ptr = persistent_ptr + MAX_BS_BUF_SIZE; p_obj_drc->str_bit_handler.bitstream_unidrc_interface = - (UWORD8 *)persistant_ptr; - persistant_ptr = persistant_ptr + MAX_BS_BUF_SIZE; + (UWORD8 *)persistent_ptr; + persistent_ptr = persistent_ptr + MAX_BS_BUF_SIZE; p_obj_drc->str_payload.pstr_peak_limiter = - (ia_drc_peak_limiter_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_peak_limiter_struct); + (ia_drc_peak_limiter_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_peak_limiter_struct); p_obj_drc->str_payload.pstr_peak_limiter->buffer = (FLOAT32 *)((SIZE_T)p_obj_drc->str_payload.pstr_peak_limiter + sizeof(ia_drc_peak_limiter_struct)); - persistant_ptr = persistant_ptr + PEAK_LIM_BUF_SIZE; + persistent_ptr = persistent_ptr + PEAK_LIM_BUF_SIZE; p_obj_drc->str_payload.pstr_qmf_filter = - (ia_drc_qmf_filt_struct *)persistant_ptr; - persistant_ptr = persistant_ptr + sizeof(ia_drc_qmf_filt_struct); + (ia_drc_qmf_filt_struct *)persistent_ptr; + persistent_ptr = persistent_ptr + sizeof(ia_drc_qmf_filt_struct); - p_obj_drc->str_payload.pstr_qmf_filter->ana_buff = (FLOAT64 *)persistant_ptr; - persistant_ptr = persistant_ptr + ANALY_BUF_SIZE; + p_obj_drc->str_payload.pstr_qmf_filter->ana_buff = (FLOAT64 *)persistent_ptr; + persistent_ptr = persistent_ptr + ANALY_BUF_SIZE; - p_obj_drc->str_payload.pstr_qmf_filter->syn_buff = (FLOAT64 *)persistant_ptr; - persistant_ptr = persistant_ptr + SYNTH_BUF_SIZE; + p_obj_drc->str_payload.pstr_qmf_filter->syn_buff = (FLOAT64 *)persistent_ptr; + persistent_ptr = persistent_ptr + SYNTH_BUF_SIZE; + persistent_size_consumed = + (UWORD32)persistent_ptr - (UWORD32)p_obj_drc->p_state->persistent_ptr; + if (p_obj_drc->p_mem_info[IA_MEMTYPE_PERSIST].ui_size < + persistent_size_consumed) + return IA_FATAL_ERROR; - p_obj_drc->p_state->persistant_ptr = (pVOID)persistant_ptr; + p_obj_drc->p_state->persistent_ptr = (pVOID)persistent_ptr; return IA_NO_ERROR; } @@ -373,7 +379,7 @@ IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc) { IA_ERRORCODE err_code = IA_NO_ERROR; WORD32 i, j; - pVOID persistant_ptr = p_obj_drc->p_state->persistant_ptr; + pVOID persistent_ptr = p_obj_drc->p_state->persistent_ptr; struct ia_bit_buf_struct *it_bit_buff; @@ -401,99 +407,52 @@ IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc) { p_obj_drc->str_payload.pstr_gain_dec[i]); } - if (p_obj_drc->str_config.interface_bitstream_present) { - err_code = impd_drc_dec_interface_add_effect_type( - p_obj_drc->str_payload.pstr_drc_interface, - p_obj_drc->str_config.effect_type, - p_obj_drc->str_config.target_loudness, - p_obj_drc->str_config.loud_norm_flag); - - if (err_code != IA_NO_ERROR) return err_code; - - err_code = impd_drc_uni_selction_proc_init( - p_obj_drc->str_payload.pstr_selection_proc, 0, - p_obj_drc->str_payload.pstr_drc_interface, - p_obj_drc->str_config.sub_band_domain_mode); - if (err_code != IA_NO_ERROR) return err_code; - - if (p_obj_drc->str_payload.pstr_drc_interface - ->loudness_norm_parameter_interface_flag && - p_obj_drc->str_payload.pstr_drc_interface->loudness_norm_param_interface - .peak_limiter) { - p_obj_drc->str_config.peak_limiter = 1; - } - } else { - err_code = impd_set_default_params_selection_process( - p_obj_drc->str_payload.pstr_drc_sel_proc_params); - if (err_code != IA_NO_ERROR) return err_code; - err_code = - impd_set_custom_params(p_obj_drc->str_config.control_parameter_index, - p_obj_drc->str_payload.pstr_drc_sel_proc_params); - if (err_code != IA_NO_ERROR) return err_code; - err_code = impd_eval_custom_params_selection_process( - p_obj_drc->str_payload.pstr_drc_sel_proc_params); - if (err_code != IA_NO_ERROR) return err_code; - err_code = impd_drc_uni_selction_proc_init( - p_obj_drc->str_payload.pstr_selection_proc, - p_obj_drc->str_payload.pstr_drc_sel_proc_params, 0, - p_obj_drc->str_config.sub_band_domain_mode); - if (err_code != IA_NO_ERROR) return err_code; - - if (p_obj_drc->str_payload.pstr_drc_sel_proc_params->peak_limiter) { - p_obj_drc->str_config.peak_limiter = 1; - } + err_code = impd_drc_dec_interface_add_effect_type( + p_obj_drc->str_payload.pstr_drc_interface, + p_obj_drc->str_config.effect_type, p_obj_drc->str_config.target_loudness, + p_obj_drc->str_config.loud_norm_flag); + + if (err_code != IA_NO_ERROR) return err_code; + + err_code = impd_drc_uni_selction_proc_init( + p_obj_drc->str_payload.pstr_selection_proc, 0, + p_obj_drc->str_payload.pstr_drc_interface, + p_obj_drc->str_config.sub_band_domain_mode); + if (err_code != IA_NO_ERROR) return err_code; + + if (p_obj_drc->str_payload.pstr_drc_interface + ->loudness_norm_parameter_interface_flag && + p_obj_drc->str_payload.pstr_drc_interface->loudness_norm_param_interface + .peak_limiter) { + p_obj_drc->str_config.peak_limiter = 1; } + p_obj_drc->str_payload.pstr_loudness_info->loudness_info_album_count = 0; p_obj_drc->str_payload.pstr_loudness_info->loudness_info_count = 0; p_obj_drc->str_payload.pstr_loudness_info->loudness_info_set_ext_present = 0; p_obj_drc->p_state->ui_exe_done = 0; - if (p_obj_drc->str_config.bitstream_file_format == - BITSTREAM_FILE_FORMAT_SPLIT) { - err_code = impd_process_drc_bitstream_dec_config( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - &p_obj_drc->str_bit_handler.bitstream_drc_config[0], - p_obj_drc->str_bit_handler.num_bytes_bs_drc_config); - - if (err_code == 1) { - memset(p_obj_drc->str_payload.pstr_drc_config, 0, sizeof(ia_drc_config)); - err_code = impd_drc_set_default_bitstream_config( - p_obj_drc->str_payload.pstr_drc_config); - p_obj_drc->str_payload.pstr_drc_config->channel_layout - .base_channel_count = p_obj_drc->str_config.num_ch_in; - } - - if (err_code != IA_NO_ERROR) return err_code; - err_code = impd_process_drc_bitstream_dec_loudness_info_set( - p_obj_drc->pstr_bit_buf, p_obj_drc->str_payload.pstr_loudness_info, - &p_obj_drc->str_bit_handler.bitstream_loudness_info[0], - p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info); - if (err_code != IA_NO_ERROR) return err_code; - - } else { - err_code = impd_process_drc_bitstream_dec( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_loudness_info, - &p_obj_drc->str_bit_handler - .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs], - p_obj_drc->str_bit_handler.num_bytes_bs, - p_obj_drc->str_bit_handler.num_bits_offset_bs, - &p_obj_drc->str_bit_handler.num_bits_read_bs); - - if (err_code > PROC_COMPLETE) return -1; - - p_obj_drc->str_bit_handler.num_bytes_read_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3); - p_obj_drc->str_bit_handler.num_bits_offset_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); - p_obj_drc->str_bit_handler.byte_index_bs += - p_obj_drc->str_bit_handler.num_bytes_read_bs; - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; + err_code = impd_process_drc_bitstream_dec_config( + p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, + p_obj_drc->str_payload.pstr_drc_config, + &p_obj_drc->str_bit_handler.bitstream_drc_config[0], + p_obj_drc->str_bit_handler.num_bytes_bs_drc_config); + + if (err_code == 1) { + memset(p_obj_drc->str_payload.pstr_drc_config, 0, sizeof(ia_drc_config)); + err_code = impd_drc_set_default_bitstream_config( + p_obj_drc->str_payload.pstr_drc_config); + p_obj_drc->str_payload.pstr_drc_config->channel_layout.base_channel_count = + p_obj_drc->str_config.num_ch_in; } + if (err_code != IA_NO_ERROR) return err_code; + err_code = impd_process_drc_bitstream_dec_loudness_info_set( + p_obj_drc->pstr_bit_buf, p_obj_drc->str_payload.pstr_loudness_info, + &p_obj_drc->str_bit_handler.bitstream_loudness_info[0], + p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info); + if (err_code != IA_NO_ERROR) return err_code; + err_code = impd_drc_uni_sel_proc_process( p_obj_drc->str_payload.pstr_selection_proc, p_obj_drc->str_payload.pstr_drc_config, @@ -538,7 +497,7 @@ IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc) { , p_obj_drc->str_payload.pstr_gain_dec[i], p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_loudness_info, &persistant_ptr); + p_obj_drc->str_payload.pstr_loudness_info, &persistent_ptr); impd_get_parametric_drc_delay( p_obj_drc->str_payload.pstr_gain_dec[i], diff --git a/decoder/drc_src/impd_drc_interface_decoder.c b/decoder/drc_src/impd_drc_interface_decoder.c index 35b1f3c..4e0301c 100644 --- a/decoder/drc_src/impd_drc_interface_decoder.c +++ b/decoder/drc_src/impd_drc_interface_decoder.c @@ -30,29 +30,6 @@ #include "impd_drc_parser_interface.h" WORD32 -impd_drc_dec_interface_process(ia_bit_buf_struct* it_bit_buff, - ia_drc_interface_struct* pstr_drc_interface, - UWORD8* it_bit_buf, WORD32 num_bit_stream_bits, - WORD32* num_bits_read) { - WORD32 err = 0; - - if (it_bit_buff != NULL && num_bit_stream_bits) { - it_bit_buff = impd_create_init_bit_buf(it_bit_buff, it_bit_buf, - num_bit_stream_bits / 8); - - } else { - return -1; - } - - err = impd_unidrc_interface_read(it_bit_buff, pstr_drc_interface); - if (err) return (err); - - *num_bits_read = (it_bit_buff->size) - it_bit_buff->cnt_bits; - - return err; -} - -WORD32 impd_drc_dec_interface_add_effect_type( ia_drc_interface_struct* pstr_drc_interface, WORD32 drc_effect_type, WORD32 target_loudness, WORD32 loud_norm) { diff --git a/decoder/drc_src/impd_drc_interface_parser.c b/decoder/drc_src/impd_drc_interface_parser.c deleted file mode 100644 index 1ae69a2..0000000 --- a/decoder/drc_src/impd_drc_interface_parser.c +++ /dev/null @@ -1,514 +0,0 @@ -/****************************************************************************** - * - * 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 -*/ -#include <stdio.h> -#include <string.h> -#include <math.h> - -#include "impd_type_def.h" -#include "impd_drc_bitbuffer.h" -#include "impd_drc_common.h" -#include "impd_drc_interface.h" -#include "impd_drc_extr_delta_coded_info.h" -#include "impd_drc_struct.h" - -WORD32 impd_unidrc_interface_signature_read( - ia_bit_buf_struct* it_bit_buff, - ia_drc_uni_interface_signat_struct* drc_uni_interface_signature) { - // WORD32 err = 0 - WORD32 interface_signat_data_len = 0, i, tmp; - - tmp = impd_read_bits_buf(it_bit_buff, 16); - if (it_bit_buff->error) return it_bit_buff->error; - - drc_uni_interface_signature->interface_signat_type = (tmp >> 8) & 0xff; - drc_uni_interface_signature->interface_signat_data_len = tmp & 0xff; - - interface_signat_data_len = - drc_uni_interface_signature->interface_signat_data_len + 1; - for (i = 0; i < interface_signat_data_len; i++) { - tmp = impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - drc_uni_interface_signature->interface_signat_data[i] = (UWORD32)tmp; - } - - return (0); -} -WORD32 impd_sys_interface_read(ia_bit_buf_struct* it_bit_buff, - ia_system_interface_struct* system_interface) { - // WORD32 err = 0; - WORD32 i = 0, tmp = 0; - - system_interface->target_config_request_type = - impd_read_bits_buf(it_bit_buff, 2); - if (it_bit_buff->error) return it_bit_buff->error; - - switch (system_interface->target_config_request_type) { - case 0: - system_interface->num_downmix_id_requests = - impd_read_bits_buf(it_bit_buff, 4); - if (it_bit_buff->error) return it_bit_buff->error; - - if (system_interface->num_downmix_id_requests == 0) { - system_interface->num_downmix_id_requests = 1; - system_interface->requested_dwnmix_id[0] = 0; - break; - } - for (i = 0; i < system_interface->num_downmix_id_requests; i++) { - system_interface->requested_dwnmix_id[i] = - impd_read_bits_buf(it_bit_buff, 7); - if (it_bit_buff->error) return it_bit_buff->error; - } - break; - case 1: - system_interface->requested_target_layout = - impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - break; - case 2: - tmp = impd_read_bits_buf(it_bit_buff, 7); - if (it_bit_buff->error) return it_bit_buff->error; - system_interface->requested_target_ch_count = tmp + 1; - break; - default: - return (1); - break; - } - return (0); -} - -WORD32 impd_loudness_norm_control_interface_read( - ia_bit_buf_struct* it_bit_buff, - ia_loudness_norm_ctrl_interface_struct* loudness_norm_ctrl_interface) { - // WORD32 err = 0; - WORD32 tmp = 0; - - loudness_norm_ctrl_interface->loudness_normalization_on = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - - if (loudness_norm_ctrl_interface->loudness_normalization_on == 1) { - tmp = impd_read_bits_buf(it_bit_buff, 12); - if (it_bit_buff->error) return it_bit_buff->error; - loudness_norm_ctrl_interface->target_loudness = -tmp * 0.03125f; - } - return (0); -} - -WORD32 impd_loudness_norm_param_interface_read( - ia_bit_buf_struct* it_bit_buff, ia_loudness_norm_parameter_interface_struct* - loudness_norm_param_interface) { - // WORD32 err = 0; - WORD32 tmp = 0; - - tmp = impd_read_bits_buf(it_bit_buff, 3); - if (it_bit_buff->error) return it_bit_buff->error; - - loudness_norm_param_interface->album_mode = (tmp >> 2) & 1; - loudness_norm_param_interface->peak_limiter = (tmp >> 1) & 1; - loudness_norm_param_interface->change_loudness_deviation_max = tmp & 1; - - if (loudness_norm_param_interface->change_loudness_deviation_max == 1) { - loudness_norm_param_interface->loudness_deviation_max = - impd_read_bits_buf(it_bit_buff, 6); - if (it_bit_buff->error) return it_bit_buff->error; - } - - loudness_norm_param_interface->change_loudness_measur_method = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_norm_param_interface->change_loudness_measur_method == 1) { - loudness_norm_param_interface->loudness_measurement_method = - impd_read_bits_buf(it_bit_buff, 3); - if (it_bit_buff->error) return it_bit_buff->error; - } - - loudness_norm_param_interface->change_loudness_measur_system = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_norm_param_interface->change_loudness_measur_system == 1) { - loudness_norm_param_interface->loudness_measurement_system = - impd_read_bits_buf(it_bit_buff, 4); - if (it_bit_buff->error) return it_bit_buff->error; - } - - loudness_norm_param_interface->change_loudness_measur_pre_proc = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_norm_param_interface->change_loudness_measur_pre_proc == 1) { - loudness_norm_param_interface->loudness_measurement_pre_proc = - impd_read_bits_buf(it_bit_buff, 2); - if (it_bit_buff->error) return it_bit_buff->error; - } - - loudness_norm_param_interface->change_device_cut_off_freq = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_norm_param_interface->change_device_cut_off_freq == 1) { - tmp = impd_read_bits_buf(it_bit_buff, 6); - if (it_bit_buff->error) return it_bit_buff->error; - loudness_norm_param_interface->device_cut_off_frequency = - max(min(tmp * 10, 500), 20); - } - - loudness_norm_param_interface->change_loudness_norm_gain_db_max = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_norm_param_interface->change_loudness_norm_gain_db_max == 1) { - tmp = impd_read_bits_buf(it_bit_buff, 6); - if (it_bit_buff->error) return it_bit_buff->error; - if (tmp < 63) { - loudness_norm_param_interface->loudness_norm_gain_db_max = tmp * 0.5f; - } else { - loudness_norm_param_interface->loudness_norm_gain_db_max = - LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT; - } - } - - loudness_norm_param_interface->change_loudness_norm_gain_modification_db = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_norm_param_interface - ->change_loudness_norm_gain_modification_db == 1) { - tmp = impd_read_bits_buf(it_bit_buff, 10); - if (it_bit_buff->error) return it_bit_buff->error; - loudness_norm_param_interface->loudness_norm_gain_modification_db = - -16 + tmp * 0.03125f; - } - - loudness_norm_param_interface->change_output_peak_level_max = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_norm_param_interface->change_output_peak_level_max == 1) { - tmp = impd_read_bits_buf(it_bit_buff, 6); - if (it_bit_buff->error) return it_bit_buff->error; - loudness_norm_param_interface->output_peak_level_max = tmp * 0.5f; - } - - return (0); -} - -WORD32 impd_drc_interface_read( - ia_bit_buf_struct* it_bit_buff, - ia_dyn_rng_ctrl_interface_struct* drc_ctrl_interface) { - // WORD32 err = 0; - WORD32 i = 0, j = 0, tmp = 0; - - drc_ctrl_interface->dynamic_range_control_on = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - - if (drc_ctrl_interface->dynamic_range_control_on == 1) { - drc_ctrl_interface->num_drc_feature_requests = - impd_read_bits_buf(it_bit_buff, 3); - if (it_bit_buff->error) return it_bit_buff->error; - - for (i = 0; i < drc_ctrl_interface->num_drc_feature_requests; i++) { - drc_ctrl_interface->drc_feature_req_type[i] = - impd_read_bits_buf(it_bit_buff, 2); - if (it_bit_buff->error) return it_bit_buff->error; - - switch (drc_ctrl_interface->drc_feature_req_type[i]) { - case 0: - tmp = impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - - drc_ctrl_interface->requested_num_drc_effects[i] = (tmp >> 4) & 0xf; - drc_ctrl_interface->desired_num_drc_effects_of_requested[i] = - tmp & 0xf; - - for (j = 0; j < drc_ctrl_interface->requested_num_drc_effects[i]; - j++) { - drc_ctrl_interface->requested_drc_effect_type[i][j] = - impd_read_bits_buf(it_bit_buff, 4); - if (it_bit_buff->error) return it_bit_buff->error; - } - break; - case 1: - tmp = impd_read_bits_buf(it_bit_buff, 3); - if (it_bit_buff->error) return it_bit_buff->error; - - drc_ctrl_interface->requested_dyn_rng_measurement_type[i] = - (tmp >> 1) & 3; - drc_ctrl_interface->requested_dyn_range_is_single_val_flag[i] = - tmp & 1; - - if (drc_ctrl_interface->requested_dyn_range_is_single_val_flag[i] == - 0) { - tmp = impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - if (tmp == 0) - drc_ctrl_interface->requested_dyn_range_value[i] = 0.0f; - else if (tmp <= 128) - drc_ctrl_interface->requested_dyn_range_value[i] = tmp * 0.25f; - else if (tmp <= 204) - drc_ctrl_interface->requested_dyn_range_value[i] = - 0.5f * tmp - 32.0f; - else - drc_ctrl_interface->requested_dyn_range_value[i] = tmp - 134.0f; - } else { - tmp = impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - if (tmp == 0) - drc_ctrl_interface->requested_dyn_range_min_val[i] = 0.0f; - else if (tmp <= 128) - drc_ctrl_interface->requested_dyn_range_min_val[i] = tmp * 0.25f; - else if (tmp <= 204) - drc_ctrl_interface->requested_dyn_range_min_val[i] = - 0.5f * tmp - 32.0f; - else - drc_ctrl_interface->requested_dyn_range_min_val[i] = tmp - 134.0f; - tmp = impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - if (tmp == 0) - drc_ctrl_interface->requested_dyn_range_max_val[i] = 0.0f; - else if (tmp <= 128) - drc_ctrl_interface->requested_dyn_range_max_val[i] = tmp * 0.25f; - else if (tmp <= 204) - drc_ctrl_interface->requested_dyn_range_max_val[i] = - 0.5f * tmp - 32.0f; - else - drc_ctrl_interface->requested_dyn_range_max_val[i] = tmp - 134.0f; - } - break; - case 2: - drc_ctrl_interface->requested_drc_characteristic[i] = - impd_read_bits_buf(it_bit_buff, 7); - if (it_bit_buff->error) return it_bit_buff->error; - break; - default: - return (1); - break; - } - } - } - return (0); -} - -WORD32 impd_drc_param_interface_read( - ia_bit_buf_struct* it_bit_buff, - ia_drc_parameter_interface_struct* drc_parameter_interface) { - // WORD32 err = 0; - WORD32 tmp = 0; - - tmp = impd_read_bits_buf(it_bit_buff, 2); - if (it_bit_buff->error) return it_bit_buff->error; - - drc_parameter_interface->change_compress = (tmp >> 1) & 1; - drc_parameter_interface->change_boost = tmp & 1; - - if (drc_parameter_interface->change_compress == 1) { - tmp = impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - if (tmp < 255) { - drc_parameter_interface->compress = 1 - tmp * 0.00390625f; - } else { - drc_parameter_interface->compress = 0.f; - } - } - - if (drc_parameter_interface->change_boost == 1) { - tmp = impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - if (tmp < 255) { - drc_parameter_interface->boost = 1 - tmp * 0.00390625f; - } else { - drc_parameter_interface->boost = 0.f; - } - } - - drc_parameter_interface->change_drc_characteristic_target = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - - if (drc_parameter_interface->change_drc_characteristic_target == 1) { - drc_parameter_interface->drc_characteristic_target = - impd_read_bits_buf(it_bit_buff, 8); - if (it_bit_buff->error) return it_bit_buff->error; - } - return (0); -} - -static WORD32 impd_parse_loud_eq_param_interface( - ia_bit_buf_struct* it_bit_buff, ia_loudness_eq_parameter_interface_struct* - loudness_eq_parameter_interface) { - // WORD32 err = 0; - WORD32 bsSensitivity, bsPlaybackGain; - - loudness_eq_parameter_interface->loudness_eq_request_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_eq_parameter_interface->loudness_eq_request_flag) { - loudness_eq_parameter_interface->loudness_eq_request = - impd_read_bits_buf(it_bit_buff, 2); - if (it_bit_buff->error) return it_bit_buff->error; - } - loudness_eq_parameter_interface->sensitivity_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_eq_parameter_interface->sensitivity_flag) { - bsSensitivity = impd_read_bits_buf(it_bit_buff, 7); - if (it_bit_buff->error) return it_bit_buff->error; - loudness_eq_parameter_interface->sensitivity = bsSensitivity + 23.0f; - } - loudness_eq_parameter_interface->playback_gain_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (loudness_eq_parameter_interface->playback_gain_flag) { - bsPlaybackGain = impd_read_bits_buf(it_bit_buff, 7); - if (it_bit_buff->error) return it_bit_buff->error; - loudness_eq_parameter_interface->playback_gain = (FLOAT32)-bsPlaybackGain; - } - return (0); -} - -WORD32 -impd_unidrc_interface_extension_read( - ia_bit_buf_struct* it_bit_buff, - ia_drc_interface_struct* impd_drc_uni_interface, - ia_drc_uni_interface_ext_struct* drc_uni_interface_ext) { - WORD32 err = 0, i = 0, tmp = 0, dummy; - WORD32 uni_drc_interface_ext_type; - ia_specific_interface_extension_struct* specific_interface_ext; - - uni_drc_interface_ext_type = impd_read_bits_buf(it_bit_buff, 4); - if (it_bit_buff->error) return it_bit_buff->error; - - while (uni_drc_interface_ext_type != UNIDRCINTERFACEEXT_TERM) { - specific_interface_ext = - &(drc_uni_interface_ext->specific_interface_ext[i]); - specific_interface_ext->uni_drc_interface_ext_type = - uni_drc_interface_ext_type; - tmp = impd_read_bits_buf(it_bit_buff, 4); - if (it_bit_buff->error) return it_bit_buff->error; - specific_interface_ext->ext_size_bits = tmp + 4; - - tmp = - impd_read_bits_buf(it_bit_buff, specific_interface_ext->ext_size_bits); - if (it_bit_buff->error) return it_bit_buff->error; - - specific_interface_ext->ext_bit_size = tmp + 1; - - switch (uni_drc_interface_ext_type) { - case UNIDRCINTERFACEEXT_EQ: - impd_drc_uni_interface->drc_uni_interface_ext - .loudness_eq_parameter_interface_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (impd_drc_uni_interface->drc_uni_interface_ext - .loudness_eq_parameter_interface_flag) { - err = impd_parse_loud_eq_param_interface( - it_bit_buff, &(impd_drc_uni_interface->drc_uni_interface_ext - .loudness_eq_parameter_interface)); - if (err) return (err); - } - impd_drc_uni_interface->drc_uni_interface_ext.eq_ctrl_interface_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (impd_drc_uni_interface->drc_uni_interface_ext - .eq_ctrl_interface_flag) { - impd_drc_uni_interface->drc_uni_interface_ext.eq_ctrl_interface - .eq_set_purpose_request = impd_read_bits_buf(it_bit_buff, 16); - if (it_bit_buff->error) return it_bit_buff->error; - } - break; - default: - dummy = impd_read_bits_buf(it_bit_buff, - specific_interface_ext->ext_bit_size); - if (it_bit_buff->error) return it_bit_buff->error; - break; - } - - i++; - if (i == EXT_COUNT_MAX) { - return (1); - } - uni_drc_interface_ext_type = impd_read_bits_buf(it_bit_buff, 4); - if (it_bit_buff->error) return it_bit_buff->error; - } - drc_uni_interface_ext->interface_ext_count = i; - return (0); -} -WORD32 impd_unidrc_interface_read(ia_bit_buf_struct* it_bit_buff, - ia_drc_interface_struct* uniDrcInterface) { - WORD32 err = 0; - - uniDrcInterface->interface_signat_flag = impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (uniDrcInterface->interface_signat_flag == 1) { - err = impd_unidrc_interface_signature_read( - it_bit_buff, &(uniDrcInterface->drc_uni_interface_signature)); - if (err) return (err); - } - - uniDrcInterface->system_interface_flag = impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (uniDrcInterface->system_interface_flag == 1) { - err = impd_sys_interface_read(it_bit_buff, - &(uniDrcInterface->system_interface)); - if (err) return (err); - } - - uniDrcInterface->loudness_norm_ctrl_interface_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (uniDrcInterface->loudness_norm_ctrl_interface_flag == 1) { - err = impd_loudness_norm_control_interface_read( - it_bit_buff, &(uniDrcInterface->loudness_norm_ctrl_interface)); - if (err) return (err); - } - - uniDrcInterface->loudness_norm_parameter_interface_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (uniDrcInterface->loudness_norm_parameter_interface_flag == 1) { - err = impd_loudness_norm_param_interface_read( - it_bit_buff, &(uniDrcInterface->loudness_norm_param_interface)); - if (err) return (err); - } - - uniDrcInterface->drc_interface_flag = impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (uniDrcInterface->drc_interface_flag == 1) { - err = impd_drc_interface_read(it_bit_buff, - &(uniDrcInterface->drc_ctrl_interface)); - if (err) return (err); - } - - uniDrcInterface->drc_parameter_interface_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (uniDrcInterface->drc_parameter_interface_flag == 1) { - err = impd_drc_param_interface_read( - it_bit_buff, &(uniDrcInterface->drc_parameter_interface)); - if (err) return (err); - } - - uniDrcInterface->drc_uni_interface_ext_flag = - impd_read_bits_buf(it_bit_buff, 1); - if (it_bit_buff->error) return it_bit_buff->error; - if (uniDrcInterface->drc_uni_interface_ext_flag == 1) { - err = impd_unidrc_interface_extension_read( - it_bit_buff, uniDrcInterface, - &(uniDrcInterface->drc_uni_interface_ext)); - if (err) return (err); - } - - return (0); -}
\ No newline at end of file diff --git a/decoder/drc_src/impd_drc_loud_eq.c b/decoder/drc_src/impd_drc_loud_eq.c deleted file mode 100644 index ef04db2..0000000 --- a/decoder/drc_src/impd_drc_loud_eq.c +++ /dev/null @@ -1,169 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2015 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 -*/ -#include <stdio.h> -#include <stdlib.h> -#include <math.h> -#include <string.h> -#include "impd_type_def.h" -#include "impd_drc_uni_tables.h" -#include "impd_drc_uni_common.h" -#include "impd_drc_uni_interface.h" -#include "impd_drc_struct.h" -#include "impd_drc_uni_gain_dec.h" -#include "impd_drc_uni_loud_eq.h" -#include "impd_parametric_drc_dec.h" -#include "impd_drc_uni_multi_band.h" -#include "impd_drc_filter_bank.h" -#include "impd_drc_uni_process_audio.h" -#include "impd_drc_rom.h" - -WORD32 impd_parametric_drc_instance_reset( - WORD32 instance_idx, ia_parametric_drc_instance_params_struct* - pstr_parametric_drc_instance_params) { - WORD32 err = 0; - - if (pstr_parametric_drc_instance_params->parametric_drc_type == - PARAM_DRC_TYPE_FF) { - ia_parametric_drc_type_ff_params_struct* - pstr_parametric_ffwd_type_drc_params = - &(pstr_parametric_drc_instance_params - ->str_parametric_drc_type_ff_params); - err = impd_parametric_ffwd_type_drc_reset( - pstr_parametric_ffwd_type_drc_params); - if (err) return (err); - - } else { - return (UNEXPECTED_ERROR); - } - - return 0; -} - -WORD32 impd_add_drc_band_audio( - ia_drc_instructions_struct* pstr_drc_instruction_arr, - const WORD32 drc_instructions_index, - ia_drc_params_struct* ia_drc_params_struct, - ia_audio_band_buffer_struct* audio_band_buffer, FLOAT32* audio_io_buf[]) { - WORD32 g, b, i, c; - FLOAT32 sum; - WORD32 signalIndex = 0; - FLOAT32** drcBandAudio; - FLOAT32** channel_audio; - ia_drc_instructions_struct* str_drc_instruction_str; - - drcBandAudio = audio_band_buffer->non_interleaved_audio; - channel_audio = audio_io_buf; - - if (drc_instructions_index >= 0) { - str_drc_instruction_str = - &(pstr_drc_instruction_arr[drc_instructions_index]); - } else { - return -1; - } - - if (str_drc_instruction_str->drc_set_id > 0) { - for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++) - - { - g = str_drc_instruction_str->channel_group_of_ch[c]; - if (g >= 0) { - for (i = 0; i < ia_drc_params_struct->drc_frame_size; i++) { - sum = 0.0f; - for (b = 0; b < str_drc_instruction_str->band_count_of_ch_group[g]; - b++) { - sum += drcBandAudio[signalIndex + b][i]; - } - - channel_audio[c][i] = sum; - } - signalIndex += str_drc_instruction_str->band_count_of_ch_group[g]; - } else { - signalIndex++; - } - } - } else { - for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++) - - { - for (i = 0; i < ia_drc_params_struct->drc_frame_size; i++) { - channel_audio[c][i] = drcBandAudio[c][i]; - } - } - } - return (0); -} - -WORD32 removeTables(void) { return (0); } - -const ia_slope_code_table_struct* impd_get_slope_code_tbl_by_value(void) { - return (&(slopeCodeTableEntryByValue[0])); -} - -FLOAT32 impd_decode_slope_idx(const WORD32 slopeCodeIndex) { - const ia_slope_code_table_struct* slopeCodeTable = - impd_get_slope_code_tbl_by_value(); - return slopeCodeTable[slopeCodeIndex].value; -} - -FLOAT32 impd_decode_slope_idx_magnitude(const WORD32 slopeCodeIndex) { - const ia_slope_code_table_struct* slopeCodeTable = - impd_get_slope_code_tbl_by_value(); - return (FLOAT32)fabs((FLOAT64)slopeCodeTable[slopeCodeIndex].value); -} - -WORD32 impd_get_multi_band_drc_present(ia_drc_config* pstr_drc_config, - WORD32 numSets[3], - WORD32 multiBandDrcPresent[3]) { - WORD32 err = 0, k, m; - for (k = 0; k < pstr_drc_config->drc_instructions_uni_drc_count; k++) { - if ((pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] == - ID_FOR_BASE_LAYOUT) || - (pstr_drc_config->str_drc_instruction_str[k].drc_apply_to_dwnmix == - 0)) { - numSets[0]++; - } else if (pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] == - ID_FOR_ANY_DOWNMIX) { - numSets[1]++; - } else { - numSets[2]++; - } - for (m = 0; - m < pstr_drc_config->str_drc_instruction_str[k].num_drc_ch_groups; - m++) { - if (pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0] - .gain_set_params[pstr_drc_config->str_drc_instruction_str - ->gain_set_index_for_channel_group[m]] - .band_count > 1) { - if ((pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] == - ID_FOR_BASE_LAYOUT) || - (pstr_drc_config->str_drc_instruction_str[k].drc_apply_to_dwnmix == - 0)) { - multiBandDrcPresent[0] = 1; - } else if (pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] == - ID_FOR_ANY_DOWNMIX) { - multiBandDrcPresent[1] = 1; - } else { - multiBandDrcPresent[2] = 1; - } - } - } - } - return err; -} diff --git a/decoder/drc_src/impd_drc_loudness_control.c b/decoder/drc_src/impd_drc_loudness_control.c index 9937e18..eee37d3 100644 --- a/decoder/drc_src/impd_drc_loudness_control.c +++ b/decoder/drc_src/impd_drc_loudness_control.c @@ -737,7 +737,7 @@ WORD32 impd_init_loudness_control( WORD32 requested_measurement_system = MEASUREMENT_SYSTEM_BS_1770_4; WORD32 requested_preprocessing = 0; - WORD32* system_bonus = measurement_system_default_tbl; + const WORD32* system_bonus = measurement_system_default_tbl; WORD32 match_measure; FLOAT32 method_val = 0; diff --git a/decoder/drc_src/impd_drc_main_qmf_process.c b/decoder/drc_src/impd_drc_main_qmf_process.c deleted file mode 100644 index 3c4e711..0000000 --- a/decoder/drc_src/impd_drc_main_qmf_process.c +++ /dev/null @@ -1,254 +0,0 @@ -/****************************************************************************** - * - * 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 -*/ -#include <math.h> -#include "impd_type_def.h" -#include "impd_memory_standards.h" -#include "impd_drc_bitbuffer.h" -#include "impd_drc_extr_delta_coded_info.h" -#include "impd_drc_common.h" -#include "impd_drc_struct.h" -#include "impd_drc_interface.h" - -#include "impd_drc_bitstream_dec_api.h" -#include "impd_drc_gain_dec.h" -#include "impd_drc_filter_bank.h" -#include "impd_drc_multi_band.h" -#include "impd_drc_process_audio.h" -#include "impd_parametric_drc_dec.h" -#include "impd_drc_eq.h" -#include "impd_drc_gain_decoder.h" -#include "impd_drc_selection_process.h" - -#include "impd_drc_peak_limiter.h" -#include "impd_drc_api_struct_def.h" - -#define BITSTREAM_FILE_FORMAT_SPLIT 1 - -static WORD32 impd_down_mix( - ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output, - FLOAT32 **input_audio, WORD32 frame_len) { - WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count; - WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count; - WORD32 i, i_ch, o_ch; - FLOAT32 tmp_out[MAX_CHANNEL_COUNT]; - - if (uni_drc_sel_proc_output->downmix_matrix_present == 0) return 0; - - if (input_audio == 0) return 0; - - if (num_target_ch > MAX_CHANNEL_COUNT) return -1; - - if (num_target_ch > num_base_ch) return -1; - - for (i = 0; i < frame_len; i++) { - for (o_ch = 0; o_ch < num_target_ch; o_ch++) { - tmp_out[o_ch] = 0.0f; - for (i_ch = 0; i_ch < num_base_ch; i_ch++) { - tmp_out[o_ch] += input_audio[i_ch][i] * - uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch]; - } - } - for (o_ch = 0; o_ch < num_target_ch; o_ch++) { - input_audio[o_ch][i] = tmp_out[o_ch]; - } - for (; o_ch < num_base_ch; o_ch++) { - input_audio[o_ch][i] = 0.0f; - } - } - - return 0; -} - -WORD32 impd_init_process_audio_main_qmf(ia_drc_api_struct *p_obj_drc) - -{ - WORD32 error = 0, i, j, num_samples_per_channel; - FLOAT32 *input_buffer; - FLOAT32 *output_buffer; - FLOAT32 *audio_io_buf_real[10]; - FLOAT32 *audio_io_buf_imag[10]; - FLOAT32 *scratch_buffer; - WORD32 last_frame = 0; - scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1]; - input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2]; - output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3]; - - if (p_obj_drc->p_state->ui_in_bytes <= 0) { - p_obj_drc->p_state->ui_out_bytes = 0; - return 0; - } - - if ((p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in / - (p_obj_drc->str_config.pcm_size >> 3)) < - (UWORD32)p_obj_drc->str_config.frame_size) - last_frame = 1; - for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) { - audio_io_buf_real[i] = - scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32); - audio_io_buf_imag[i] = - scratch_buffer + - p_obj_drc->str_config.num_ch_in * p_obj_drc->str_config.frame_size + - p_obj_drc->str_config.num_ch_in * 64 + - i * (p_obj_drc->str_config.frame_size + 64); - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - audio_io_buf_real[i][j] = - input_buffer[j * p_obj_drc->str_config.num_ch_in + i]; - audio_io_buf_imag[i][j] = - input_buffer[p_obj_drc->str_config.num_ch_in * - p_obj_drc->str_config.frame_size + - j * p_obj_drc->str_config.num_ch_in + i]; - } - } - - error = impd_process_drc_bitstream_dec_gain( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, - &p_obj_drc->str_bit_handler - .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs], - p_obj_drc->str_bit_handler.num_bytes_bs, - p_obj_drc->str_bit_handler.num_bits_offset_bs, - &p_obj_drc->str_bit_handler.num_bits_read_bs); - - if (error > PROC_COMPLETE) return -1; - - p_obj_drc->str_bit_handler.num_bytes_read_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3); - p_obj_drc->str_bit_handler.num_bits_offset_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); - p_obj_drc->str_bit_handler.byte_index_bs += - p_obj_drc->str_bit_handler.num_bytes_read_bs; - if (p_obj_drc->str_bit_handler.gain_stream_flag == - 0) // ITTIAM: Flag for applying gain frame by frame - { - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; - } - - if (p_obj_drc->str_config.bitstream_file_format == - BITSTREAM_FILE_FORMAT_SPLIT) { - if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) { - p_obj_drc->str_bit_handler.num_bits_read_bs = - p_obj_drc->str_bit_handler.num_bits_read_bs + 8 - - p_obj_drc->str_bit_handler.num_bits_offset_bs; - p_obj_drc->str_bit_handler.num_bytes_read_bs = - p_obj_drc->str_bit_handler.num_bytes_read_bs + 1; - p_obj_drc->str_bit_handler.num_bits_offset_bs = 0; - p_obj_drc->str_bit_handler.byte_index_bs = - p_obj_drc->str_bit_handler.byte_index_bs + 1; - if (p_obj_drc->str_bit_handler.gain_stream_flag == - 0) // ITTIAM: Flag for applying gain frame by frame - { - p_obj_drc->str_bit_handler.num_bytes_bs = - p_obj_drc->str_bit_handler.num_bytes_bs - 1; - } - } - } - - error = impd_drc_process_freq_domain( - p_obj_drc->str_payload.pstr_gain_dec[0], - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real, - audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress, - p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->drc_characteristic_target); - if (error) return -1; - - error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output, - audio_io_buf_real, p_obj_drc->str_config.frame_size); - if (error) return -1; - - error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output, - audio_io_buf_imag, p_obj_drc->str_config.frame_size); - if (error) return -1; - - error = impd_drc_process_freq_domain( - p_obj_drc->str_payload.pstr_gain_dec[1], - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real, - audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress, - p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->drc_characteristic_target); - if (error) return -1; - - if (p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db != 0.0f) { - FLOAT32 loudness_normalization_gain = - (FLOAT32)pow(10.0, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db / - 20.0); - for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - audio_io_buf_real[i][j] *= loudness_normalization_gain; - audio_io_buf_imag[i][j] *= loudness_normalization_gain; - } - } - } - num_samples_per_channel = p_obj_drc->str_config.frame_size; - - for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - output_buffer[j * p_obj_drc->str_config.num_ch_out + i] = - audio_io_buf_real[i][j]; - output_buffer[p_obj_drc->str_config.frame_size * - p_obj_drc->str_config.num_ch_in + - j * p_obj_drc->str_config.num_ch_out + i] = - audio_io_buf_imag[i][j]; - } - } - p_obj_drc->p_state->ui_out_bytes = - p_obj_drc->str_config.num_ch_out * (p_obj_drc->str_config.frame_size) * 4; - p_obj_drc->p_state->ui_out_bytes = - p_obj_drc->str_config.num_ch_out * - (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in); - - if (last_frame == 0) { - if (p_obj_drc->str_config.bitstream_file_format != - BITSTREAM_FILE_FORMAT_SPLIT) { - error = impd_process_drc_bitstream_dec( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_loudness_info, - &p_obj_drc->str_bit_handler - .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs], - p_obj_drc->str_bit_handler.num_bytes_bs, - p_obj_drc->str_bit_handler.num_bits_offset_bs, - &p_obj_drc->str_bit_handler.num_bits_read_bs); - - if (error > PROC_COMPLETE) return -1; - - p_obj_drc->str_bit_handler.num_bytes_read_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3); - p_obj_drc->str_bit_handler.num_bits_offset_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); - p_obj_drc->str_bit_handler.byte_index_bs += - p_obj_drc->str_bit_handler.num_bytes_read_bs; - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; - } - } - return error; -} diff --git a/decoder/drc_src/impd_drc_main_stft_process.c b/decoder/drc_src/impd_drc_main_stft_process.c deleted file mode 100644 index c1e89e1..0000000 --- a/decoder/drc_src/impd_drc_main_stft_process.c +++ /dev/null @@ -1,254 +0,0 @@ -/****************************************************************************** - * - * 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 -*/ -#include <math.h> -#include "impd_type_def.h" -#include "impd_memory_standards.h" -#include "impd_drc_bitbuffer.h" -#include "impd_drc_extr_delta_coded_info.h" -#include "impd_drc_common.h" -#include "impd_drc_struct.h" -#include "impd_drc_interface.h" -#include "impd_drc_peak_limiter.h" -#include "impd_drc_bitstream_dec_api.h" -#include "impd_drc_gain_dec.h" -#include "impd_drc_filter_bank.h" -#include "impd_drc_multi_band.h" -#include "impd_drc_process_audio.h" -#include "impd_parametric_drc_dec.h" -#include "impd_drc_eq.h" -#include "impd_drc_gain_decoder.h" -#include "impd_drc_selection_process.h" -#include "impd_drc_api_struct_def.h" - -#define BITSTREAM_FILE_FORMAT_SPLIT 1 - -static WORD32 impd_down_mix( - ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output, - FLOAT32 **input_audio, WORD32 frame_len) { - WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count; - WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count; - WORD32 i, i_ch, o_ch; - FLOAT32 tmp_out[MAX_CHANNEL_COUNT]; - - if (uni_drc_sel_proc_output->downmix_matrix_present == 0) return 0; - - if (input_audio == 0) return 0; - - if (num_target_ch > MAX_CHANNEL_COUNT) return -1; - - if (num_target_ch > num_base_ch) return -1; - - for (i = 0; i < frame_len; i++) { - for (o_ch = 0; o_ch < num_target_ch; o_ch++) { - tmp_out[o_ch] = 0.0f; - for (i_ch = 0; i_ch < num_base_ch; i_ch++) { - tmp_out[o_ch] += input_audio[i_ch][i] * - uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch]; - } - } - for (o_ch = 0; o_ch < num_target_ch; o_ch++) { - input_audio[o_ch][i] = tmp_out[o_ch]; - } - for (; o_ch < num_base_ch; o_ch++) { - input_audio[o_ch][i] = 0.0f; - } - } - - return 0; -} - -WORD32 impd_init_process_audio_main_stft(ia_drc_api_struct *p_obj_drc) - -{ - WORD32 error = 0, i, j, num_samples_per_channel; - FLOAT32 *input_buffer; - FLOAT32 *output_buffer; - FLOAT32 *audio_io_buf_real[10]; - FLOAT32 *audio_io_buf_imag[10]; - FLOAT32 *scratch_buffer; - WORD32 last_frame = 0; - scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1]; - input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2]; - output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3]; - - if (p_obj_drc->p_state->ui_in_bytes <= 0) { - p_obj_drc->p_state->ui_out_bytes = 0; - return 0; - } - - if ((p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in / - (p_obj_drc->str_config.pcm_size >> 3)) < - (UWORD32)p_obj_drc->str_config.frame_size) - last_frame = 1; - for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) { - audio_io_buf_real[i] = - scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32); - audio_io_buf_imag[i] = - scratch_buffer + - p_obj_drc->str_config.num_ch_in * p_obj_drc->str_config.frame_size + - p_obj_drc->str_config.num_ch_in * 64 + - i * (p_obj_drc->str_config.frame_size + 64); - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - audio_io_buf_real[i][j] = - input_buffer[j * p_obj_drc->str_config.num_ch_in + i]; - audio_io_buf_imag[i][j] = - input_buffer[p_obj_drc->str_config.num_ch_in * - p_obj_drc->str_config.frame_size + - j * p_obj_drc->str_config.num_ch_in + i]; - } - } - - error = impd_process_drc_bitstream_dec_gain( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, - &p_obj_drc->str_bit_handler - .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs], - p_obj_drc->str_bit_handler.num_bytes_bs, - p_obj_drc->str_bit_handler.num_bits_offset_bs, - &p_obj_drc->str_bit_handler.num_bits_read_bs); - - if (error > PROC_COMPLETE) return -1; - - p_obj_drc->str_bit_handler.num_bytes_read_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3); - p_obj_drc->str_bit_handler.num_bits_offset_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); - p_obj_drc->str_bit_handler.byte_index_bs += - p_obj_drc->str_bit_handler.num_bytes_read_bs; - if (p_obj_drc->str_bit_handler.gain_stream_flag == - 0) // ITTIAM: Flag for applying gain frame by frame - { - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; - } - - if (p_obj_drc->str_config.bitstream_file_format == - BITSTREAM_FILE_FORMAT_SPLIT) { - if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) { - p_obj_drc->str_bit_handler.num_bits_read_bs = - p_obj_drc->str_bit_handler.num_bits_read_bs + 8 - - p_obj_drc->str_bit_handler.num_bits_offset_bs; - p_obj_drc->str_bit_handler.num_bytes_read_bs = - p_obj_drc->str_bit_handler.num_bytes_read_bs + 1; - p_obj_drc->str_bit_handler.num_bits_offset_bs = 0; - p_obj_drc->str_bit_handler.byte_index_bs = - p_obj_drc->str_bit_handler.byte_index_bs + 1; - if (p_obj_drc->str_bit_handler.gain_stream_flag == - 0) // ITTIAM: Flag for applying gain frame by frame - { - p_obj_drc->str_bit_handler.num_bytes_bs = - p_obj_drc->str_bit_handler.num_bytes_bs - 1; - } - } - } - - error = impd_drc_process_freq_domain( - p_obj_drc->str_payload.pstr_gain_dec[0], - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real, - audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress, - p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->drc_characteristic_target); - if (error) return -1; - - error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output, - audio_io_buf_real, p_obj_drc->str_config.frame_size); - if (error) return -1; - - error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output, - audio_io_buf_imag, p_obj_drc->str_config.frame_size); - if (error) return -1; - - error = impd_drc_process_freq_domain( - p_obj_drc->str_payload.pstr_gain_dec[1], - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real, - audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress, - p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->drc_characteristic_target); - if (error) return -1; - - if (p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db != 0.0f) { - FLOAT32 loudness_normalization_gain = - (FLOAT32)pow(10.0, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db / - 20.0); - for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - audio_io_buf_real[i][j] *= loudness_normalization_gain; - audio_io_buf_imag[i][j] *= loudness_normalization_gain; - } - } - } - - num_samples_per_channel = p_obj_drc->str_config.frame_size; - - for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - output_buffer[j * p_obj_drc->str_config.num_ch_out + i] = - audio_io_buf_real[i][j]; - output_buffer[p_obj_drc->str_config.frame_size * - p_obj_drc->str_config.num_ch_in + - j * p_obj_drc->str_config.num_ch_out + i] = - audio_io_buf_imag[i][j]; - } - } - p_obj_drc->p_state->ui_out_bytes = - p_obj_drc->str_config.num_ch_out * (p_obj_drc->str_config.frame_size) * 4; - p_obj_drc->p_state->ui_out_bytes = - p_obj_drc->str_config.num_ch_out * - (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in); - - if (last_frame == 0) { - if (p_obj_drc->str_config.bitstream_file_format != - BITSTREAM_FILE_FORMAT_SPLIT) { - error = impd_process_drc_bitstream_dec( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_loudness_info, - &p_obj_drc->str_bit_handler - .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs], - p_obj_drc->str_bit_handler.num_bytes_bs, - p_obj_drc->str_bit_handler.num_bits_offset_bs, - &p_obj_drc->str_bit_handler.num_bits_read_bs); - - if (error > PROC_COMPLETE) return -1; - - p_obj_drc->str_bit_handler.num_bytes_read_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3); - p_obj_drc->str_bit_handler.num_bits_offset_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); - p_obj_drc->str_bit_handler.byte_index_bs += - p_obj_drc->str_bit_handler.num_bytes_read_bs; - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; - } - } - - return error; -} diff --git a/decoder/drc_src/impd_drc_main_td_process.c b/decoder/drc_src/impd_drc_main_td_process.c index 6449531..ccd190e 100644 --- a/decoder/drc_src/impd_drc_main_td_process.c +++ b/decoder/drc_src/impd_drc_main_td_process.c @@ -75,18 +75,9 @@ static IA_ERRORCODE impd_down_mix( IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { IA_ERRORCODE err_code = IA_NO_ERROR; WORD32 i, j; - FLOAT32 *input_buffer; - WORD16 *input_buffer16, *output_buffer16; - FLOAT32 *output_buffer; FLOAT32 *audio_buff[10]; - FLOAT32 *scratch_buffer; WORD32 last_frame = 0; WORD32 num_sample_to_process; - scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1]; - input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2]; - output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3]; - input_buffer16 = (WORD16 *)p_obj_drc->pp_mem[2]; - output_buffer16 = (WORD16 *)p_obj_drc->pp_mem[3]; if (p_obj_drc->p_state->ui_in_bytes <= 0) { p_obj_drc->p_state->ui_out_bytes = 0; @@ -111,29 +102,16 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs; - if (p_obj_drc->str_bit_handler.gain_stream_flag == - 0) // ITTIAM: Flag for applying gain frame by frame - { - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; - } - if (p_obj_drc->str_config.bitstream_file_format == - BITSTREAM_FILE_FORMAT_SPLIT) { - if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) { - p_obj_drc->str_bit_handler.num_bits_read_bs = - p_obj_drc->str_bit_handler.num_bits_read_bs + 8 - - p_obj_drc->str_bit_handler.num_bits_offset_bs; - p_obj_drc->str_bit_handler.num_bytes_read_bs = - p_obj_drc->str_bit_handler.num_bytes_read_bs + 1; - p_obj_drc->str_bit_handler.num_bits_offset_bs = 0; - p_obj_drc->str_bit_handler.byte_index_bs = - p_obj_drc->str_bit_handler.byte_index_bs + 1; - if (p_obj_drc->str_bit_handler.gain_stream_flag == 0) { - p_obj_drc->str_bit_handler.num_bytes_bs = - p_obj_drc->str_bit_handler.num_bytes_bs - 1; - } - } + if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) { + p_obj_drc->str_bit_handler.num_bits_read_bs = + p_obj_drc->str_bit_handler.num_bits_read_bs + 8 - + p_obj_drc->str_bit_handler.num_bits_offset_bs; + p_obj_drc->str_bit_handler.num_bytes_read_bs = + p_obj_drc->str_bit_handler.num_bytes_read_bs + 1; + p_obj_drc->str_bit_handler.num_bits_offset_bs = 0; + p_obj_drc->str_bit_handler.byte_index_bs = + p_obj_drc->str_bit_handler.byte_index_bs + 1; } num_sample_to_process = @@ -145,6 +123,8 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { if (num_sample_to_process < p_obj_drc->str_config.frame_size) last_frame = 1; if (p_obj_drc->str_config.pcm_size == 16) { + FLOAT32 *scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1]; + WORD16 *input_buffer16 = (WORD16 *)p_obj_drc->pp_mem[2]; for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) { audio_buff[i] = scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32); @@ -155,7 +135,29 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { 32767.0f; } } + } else if (p_obj_drc->str_config.pcm_size == 24) { + FLOAT32 *scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1]; + WORD8 *input_buffer8 = (WORD8 *)p_obj_drc->pp_mem[2]; + for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) { + audio_buff[i] = + scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32); + + for (j = 0; j < num_sample_to_process; j++) { + WORD32 temp; + + WORD8 *addr = + (WORD8 *)(&input_buffer8[3 * j * p_obj_drc->str_config.num_ch_in + + 3 * i]); + temp = (WORD8)(*(addr + 2)); + temp = (temp << 8) | ((WORD8)(*(addr + 1)) & 0xff); + temp = (temp << 8) | (((WORD8) * (addr)) & 0xff); + + audio_buff[i][j] = (FLOAT32)((temp) / 8388607.0f); + } + } } else { + FLOAT32 *scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1]; + FLOAT32 *input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2]; for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) { audio_buff[i] = scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32); @@ -214,6 +216,7 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { } if (p_obj_drc->str_config.peak_limiter) { + FLOAT32 *output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3]; for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { output_buffer[j * p_obj_drc->str_config.num_ch_out + i] = @@ -236,6 +239,7 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { } if (p_obj_drc->str_config.pcm_size == 16) { + WORD16 *output_buffer16 = (WORD16 *)p_obj_drc->pp_mem[3]; for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { if (audio_buff[i][j] < -1.0f) @@ -249,7 +253,30 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { (WORD16)(audio_buff[i][j] * 32767.0f); } } + } else if (p_obj_drc->str_config.pcm_size == 24) { + WORD8 *output_buffer8 = (WORD8 *)p_obj_drc->pp_mem[3]; + for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { + for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { + WORD32 temp = 0; + WORD8 *temp_addr = + &output_buffer8[3 * j * p_obj_drc->str_config.num_ch_out + 3 * i]; + + if (audio_buff[i][j] < -1.0f) + temp = -8388607; + + else if (audio_buff[i][j] > 1.0f) + temp = 8388607; + + else + temp = (WORD32)(audio_buff[i][j] * 8388607.0f); + + *temp_addr++ = (WORD8)(temp & 0xff); + *temp_addr++ = (WORD8)((WORD32)temp >> 8) & 0xff; + *temp_addr = (WORD8)((WORD32)temp >> 16) & 0xff; + } + } } else { + FLOAT32 *output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3]; for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { output_buffer[j * p_obj_drc->str_config.num_ch_out + i] = @@ -263,6 +290,8 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in); if (p_obj_drc->p_state->delay_in_output != 0) { + FLOAT32 *output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3]; + WORD16 *output_buffer16 = (WORD16 *)p_obj_drc->pp_mem[3]; p_obj_drc->p_state->ui_out_bytes = p_obj_drc->str_config.num_ch_out * (p_obj_drc->str_config.frame_size - p_obj_drc->p_state->delay_in_output) * @@ -294,32 +323,5 @@ IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) { p_obj_drc->str_config.num_ch_out * (p_obj_drc->str_config.pcm_size >> 3); } - - if (last_frame == 0) { - if (p_obj_drc->str_config.bitstream_file_format != - BITSTREAM_FILE_FORMAT_SPLIT) { - err_code = impd_process_drc_bitstream_dec( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_loudness_info, - &p_obj_drc->str_bit_handler - .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs], - p_obj_drc->str_bit_handler.num_bytes_bs, - p_obj_drc->str_bit_handler.num_bits_offset_bs, - &p_obj_drc->str_bit_handler.num_bits_read_bs); - - if (err_code > PROC_COMPLETE) return -1; - - p_obj_drc->str_bit_handler.num_bytes_read_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3); - p_obj_drc->str_bit_handler.num_bits_offset_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); - p_obj_drc->str_bit_handler.byte_index_bs += - p_obj_drc->str_bit_handler.num_bytes_read_bs; - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; - } - } - return err_code; } diff --git a/decoder/drc_src/impd_drc_main_td_qmf_process.c b/decoder/drc_src/impd_drc_main_td_qmf_process.c deleted file mode 100644 index 2697c54..0000000 --- a/decoder/drc_src/impd_drc_main_td_qmf_process.c +++ /dev/null @@ -1,364 +0,0 @@ -/****************************************************************************** - * - * 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 -*/ -#include <math.h> -#include "impd_type_def.h" -#include "impd_memory_standards.h" -#include "impd_drc_peak_limiter.h" -#include "impd_drc_extr_delta_coded_info.h" -#include "impd_drc_common.h" -#include "impd_drc_struct.h" -#include "impd_drc_interface.h" -#include "impd_drc_bitbuffer.h" -#include "impd_drc_bitstream_dec_api.h" -#include "impd_drc_gain_dec.h" -#include "impd_drc_filter_bank.h" -#include "impd_drc_multi_band.h" -#include "impd_drc_process_audio.h" -#include "impd_parametric_drc_dec.h" -#include "impd_drc_eq.h" -#include "impd_drc_gain_decoder.h" -#include "impd_drc_selection_process.h" -#include "impd_drc_api_struct_def.h" -#include "impd_drc_hashdefines.h" -#include "impd_drc_rom.h" - -VOID process_qmf_syn_filt_bank(ia_drc_qmf_filt_struct *qmf_filt, FLOAT64 *buff, - FLOAT32 *input_real, FLOAT32 *input_imag, - FLOAT32 *output) { - WORD32 i, j; - FLOAT64 U[10 * QMF_NUM_FILT_BANDS]; - FLOAT64 W[10 * QMF_NUM_FILT_BANDS]; - - FLOAT64 tmp; - - for (i = 20 * QMF_FILT_RESOLUTION - 1; i >= 2 * QMF_FILT_RESOLUTION; i--) { - buff[i] = buff[i - 2 * QMF_FILT_RESOLUTION]; - } - - for (i = 0; i < 2 * QMF_FILT_RESOLUTION; i++) { - tmp = 0.0; - for (j = 0; j < QMF_FILT_RESOLUTION; j++) { - tmp = tmp + input_real[j] * qmf_filt->syn_tab_real[i][j] - - input_imag[j] * qmf_filt->syn_tab_imag[i][j]; - } - buff[i] = tmp; - } - - for (i = 0; i < 5; i++) { - for (j = 0; j < QMF_FILT_RESOLUTION; j++) { - U[2 * QMF_FILT_RESOLUTION * i + j] = - buff[4 * QMF_FILT_RESOLUTION * i + j]; - U[2 * QMF_FILT_RESOLUTION * i + QMF_FILT_RESOLUTION + j] = - buff[4 * QMF_FILT_RESOLUTION * i + 3 * QMF_FILT_RESOLUTION + j]; - } - } - - for (i = 0; i < 10 * QMF_FILT_RESOLUTION; i++) { - W[i] = U[i] * qmf_filter_coeff[i]; - } - - for (i = 0; i < QMF_FILT_RESOLUTION; i++) { - tmp = 0.0; - for (j = 0; j < 10; j++) { - tmp = tmp + W[QMF_FILT_RESOLUTION * j + i]; - } - output[i] = (FLOAT32)tmp; - } -} - -VOID process_qmf_ana_filt_bank(ia_drc_qmf_filt_struct *qmf_filt, FLOAT64 *buff, - FLOAT32 *input, FLOAT32 *output_real, - FLOAT32 *output_imag) { - WORD32 i, j; - FLOAT32 Z[10 * QMF_NUM_FILT_BANDS]; - FLOAT32 Y[2 * QMF_NUM_FILT_BANDS]; - - for (i = 10 * QMF_FILT_RESOLUTION - 1; i >= QMF_FILT_RESOLUTION; i--) { - buff[i] = buff[i - QMF_FILT_RESOLUTION]; - } - - for (i = QMF_FILT_RESOLUTION - 1; i >= 0; i--) { - buff[i] = input[QMF_FILT_RESOLUTION - 1 - i]; - } - - for (i = 0; i < 10 * QMF_FILT_RESOLUTION; i++) { - Z[i] = (FLOAT32)(buff[i] * qmf_filter_coeff[i]); - } - - for (i = 0; i < 2 * QMF_FILT_RESOLUTION; i++) { - Y[i] = 0.0f; - for (j = 0; j < 5; j++) { - Y[i] += Z[i + j * 2 * QMF_FILT_RESOLUTION]; - } - } - - for (i = 0; i < QMF_FILT_RESOLUTION; i++) { - output_real[i] = 0.0f; - output_imag[i] = 0.0f; - for (j = 0; j < 2 * QMF_FILT_RESOLUTION; j++) { - output_real[i] += (FLOAT32)(Y[j] * qmf_filt->ana_tab_real[i][j]); - output_imag[i] += (FLOAT32)(Y[j] * qmf_filt->ana_tab_imag[i][j]); - } - } -} - -static WORD32 impd_down_mix( - ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output, - FLOAT32 **input_audio, WORD32 frame_len) { - WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count; - WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count; - WORD32 i, i_ch, o_ch; - FLOAT32 tmp_out[MAX_CHANNEL_COUNT]; - - if (num_target_ch > MAX_CHANNEL_COUNT) return -1; - - if (num_target_ch > num_base_ch) return -1; - - for (i = 0; i < frame_len; i++) { - for (o_ch = 0; o_ch < num_target_ch; o_ch++) { - tmp_out[o_ch] = 0.0f; - for (i_ch = 0; i_ch < num_base_ch; i_ch++) { - tmp_out[o_ch] += input_audio[i_ch][i] * - uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch]; - } - } - for (o_ch = 0; o_ch < num_target_ch; o_ch++) { - input_audio[o_ch][i] = tmp_out[o_ch]; - } - for (; o_ch < num_base_ch; o_ch++) { - input_audio[o_ch][i] = 0.0f; - } - } - - return 0; -} - -WORD32 impd_init_process_audio_main_td_qmf(ia_drc_api_struct *p_obj_drc) - -{ - WORD32 error, i, j, num_samples_per_channel; - FLOAT32 *input_buffer; - WORD16 *input_buffer16, *output_buffer16; - FLOAT32 *output_buffer; - FLOAT32 *audio_io_buf_real[10]; - FLOAT32 *audio_io_buf_imag[10]; - FLOAT32 *audio_in_out_buf[10]; - FLOAT32 *scratch_buffer; - WORD32 last_frame = 0; - error = 0; - scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1]; - input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2]; - output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3]; - - input_buffer16 = (WORD16 *)p_obj_drc->pp_mem[2]; - output_buffer16 = (WORD16 *)p_obj_drc->pp_mem[3]; - - if (p_obj_drc->p_state->ui_in_bytes <= 0) { - p_obj_drc->p_state->ui_out_bytes = 0; - return 0; - } - - if ((p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in / - (p_obj_drc->str_config.pcm_size >> 3)) < - (UWORD32)p_obj_drc->str_config.frame_size) - last_frame = 1; - - for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) { - audio_in_out_buf[i] = scratch_buffer; - scratch_buffer = scratch_buffer + (p_obj_drc->str_config.frame_size + 32); - audio_io_buf_real[i] = - scratch_buffer + - (p_obj_drc->str_config.frame_size * p_obj_drc->str_config.num_ch_in + - 512); - audio_io_buf_imag[i] = scratch_buffer + - 2 * (p_obj_drc->str_config.frame_size * - p_obj_drc->str_config.num_ch_in + - 512); - ; - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - if (p_obj_drc->str_config.pcm_size == 16) { - audio_in_out_buf[i][j] = - ((FLOAT32)input_buffer16[j * p_obj_drc->str_config.num_ch_in + i]) / - 32767.0f; - } else { - audio_in_out_buf[i][j] = - input_buffer[j * p_obj_drc->str_config.num_ch_in + i]; - } - } - } - - error = impd_process_drc_bitstream_dec_gain( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, - &p_obj_drc->str_bit_handler - .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs], - p_obj_drc->str_bit_handler.num_bytes_bs, - p_obj_drc->str_bit_handler.num_bits_offset_bs, - &p_obj_drc->str_bit_handler.num_bits_read_bs); - - if (error > PROC_COMPLETE) return -1; - - p_obj_drc->str_bit_handler.num_bytes_read_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3); - p_obj_drc->str_bit_handler.num_bits_offset_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); - p_obj_drc->str_bit_handler.byte_index_bs += - p_obj_drc->str_bit_handler.num_bytes_read_bs; - if (p_obj_drc->str_bit_handler.gain_stream_flag == - 0) // ITTIAM: Flag for applying gain frame by frame - { - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; - } - if (p_obj_drc->str_config.bitstream_file_format == - BITSTREAM_FILE_FORMAT_SPLIT) { - /* shift over fill-bits for frame byte alignment */ - if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) { - p_obj_drc->str_bit_handler.num_bits_read_bs = - p_obj_drc->str_bit_handler.num_bits_read_bs + 8 - - p_obj_drc->str_bit_handler.num_bits_offset_bs; - p_obj_drc->str_bit_handler.num_bytes_read_bs = - p_obj_drc->str_bit_handler.num_bytes_read_bs + 1; - p_obj_drc->str_bit_handler.num_bits_offset_bs = 0; - p_obj_drc->str_bit_handler.byte_index_bs = - p_obj_drc->str_bit_handler.byte_index_bs + 1; - if (p_obj_drc->str_bit_handler.gain_stream_flag == - 0) // ITTIAM: Flag for applying gain frame by frame - { - p_obj_drc->str_bit_handler.num_bytes_bs = - p_obj_drc->str_bit_handler.num_bytes_bs - 1; - } - } - } - - for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) { - for (j = 0; j < p_obj_drc->str_config.frame_size; j += 64) { - process_qmf_ana_filt_bank( - p_obj_drc->str_payload.pstr_qmf_filter, - p_obj_drc->str_payload.pstr_qmf_filter->ana_buff + - i * 4 * p_obj_drc->str_config.frame_size, - &(audio_in_out_buf[i][j]), &(audio_io_buf_real[i][j]), - &(audio_io_buf_imag[i][j])); - } - } - error = impd_drc_process_freq_domain( - p_obj_drc->str_payload.pstr_gain_dec[0], - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real, - audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress, - p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->drc_characteristic_target); - - if (error) return error; - - if (p_obj_drc->str_payload.pstr_drc_sel_proc_output->target_channel_count < - p_obj_drc->str_payload.pstr_drc_sel_proc_output->base_channel_count) { - error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output, - audio_io_buf_real, p_obj_drc->str_config.frame_size); - if (error) return error; - - error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output, - audio_io_buf_imag, p_obj_drc->str_config.frame_size); - if (error) return error; - } - - error = impd_drc_process_freq_domain( - p_obj_drc->str_payload.pstr_gain_dec[1], - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real, - audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost, - p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress, - p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->drc_characteristic_target); - if (error) return -1; - for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { - for (j = 0; j < p_obj_drc->str_config.frame_size; j += 64) { - process_qmf_syn_filt_bank( - p_obj_drc->str_payload.pstr_qmf_filter, - p_obj_drc->str_payload.pstr_qmf_filter->syn_buff + - i * 4 * p_obj_drc->str_config.frame_size, - &(audio_io_buf_real[i][j]), &(audio_io_buf_imag[i][j]), - &(audio_in_out_buf[i][j])); - } - } - - if (p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db != 0.0f) { - FLOAT32 loudness_normalization_gain = - (FLOAT32)pow(10.0, p_obj_drc->str_payload.pstr_drc_sel_proc_output - ->loudness_normalization_gain_db / - 20.0); - for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - audio_io_buf_real[i][j] *= loudness_normalization_gain; - audio_io_buf_imag[i][j] *= loudness_normalization_gain; - } - } - } - - num_samples_per_channel = p_obj_drc->str_config.frame_size; - - for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) { - for (j = 0; j < p_obj_drc->str_config.frame_size; j++) { - if (p_obj_drc->str_config.pcm_size == 16) { - output_buffer16[j * p_obj_drc->str_config.num_ch_out + i] = - (WORD16)(audio_in_out_buf[i][j] * 32767.0f); - } else { - output_buffer[j * p_obj_drc->str_config.num_ch_out + i] = - audio_in_out_buf[i][j]; - } - } - } - p_obj_drc->p_state->ui_out_bytes = - p_obj_drc->str_config.num_ch_out * - (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in); - - if (p_obj_drc->str_config.bitstream_file_format != - BITSTREAM_FILE_FORMAT_SPLIT) { - error = impd_process_drc_bitstream_dec( - p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf, - p_obj_drc->str_payload.pstr_drc_config, - p_obj_drc->str_payload.pstr_loudness_info, - &p_obj_drc->str_bit_handler - .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs], - p_obj_drc->str_bit_handler.num_bytes_bs, - p_obj_drc->str_bit_handler.num_bits_offset_bs, - &p_obj_drc->str_bit_handler.num_bits_read_bs); - - if (error > PROC_COMPLETE) return -1; - - p_obj_drc->str_bit_handler.num_bytes_read_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3); - p_obj_drc->str_bit_handler.num_bits_offset_bs = - (p_obj_drc->str_bit_handler.num_bits_read_bs & 7); - p_obj_drc->str_bit_handler.byte_index_bs += - p_obj_drc->str_bit_handler.num_bytes_read_bs; - p_obj_drc->str_bit_handler.num_bytes_bs -= - p_obj_drc->str_bit_handler.num_bytes_read_bs; - } - - return error; -} diff --git a/decoder/drc_src/impd_drc_parametric_dec.c b/decoder/drc_src/impd_drc_parametric_dec.c index e4b3b4a..3b2063c 100644 --- a/decoder/drc_src/impd_drc_parametric_dec.c +++ b/decoder/drc_src/impd_drc_parametric_dec.c @@ -41,7 +41,7 @@ WORD32 impd_init_parametric_drc( WORD32 drc_frame_size, WORD32 sampling_rate, WORD32 sub_band_domain_mode, ia_parametric_drc_params_struct* p_parametricdrc_params) { - WORD32 sub_band_count_tbl[4] = {0, 64, 71, 256}; + static const WORD32 sub_band_count_tbl[4] = {0, 64, 71, 256}; p_parametricdrc_params->drc_frame_size = drc_frame_size; p_parametricdrc_params->sampling_rate = sampling_rate; p_parametricdrc_params->sub_band_domain_mode = sub_band_domain_mode; @@ -568,7 +568,7 @@ WORD32 impd_init_lvl_est_filt_subband( FLOAT32 w0, alpha, sinw0, cosw0; FLOAT32 b0, b1, b2, a0, a1, a2; FLOAT32 num_real, num_imag, den_real, den_imag; - FLOAT32* f_bands_nrm; + const FLOAT32* f_bands_nrm; WORD32 b; WORD32 i; const FLOAT32* ptr_samp_tbl; diff --git a/decoder/drc_src/impd_drc_process.c b/decoder/drc_src/impd_drc_process.c index 15115a2..45403ac 100644 --- a/decoder/drc_src/impd_drc_process.c +++ b/decoder/drc_src/impd_drc_process.c @@ -130,6 +130,9 @@ WORD32 impd_apply_gains_and_add( impd_shape_filt_block_adapt(lpcm_gains[iEnd], &shape_filter_block[g]); } + if ((iEnd == iStart) && + (drc_gain_last == shape_filter_block[g].drc_gain_last)) + break; iStart = iEnd; } } @@ -176,183 +179,6 @@ WORD32 impd_apply_gains_and_add( return (0); } -/* subband-domain DRC: in-place application of DRC gains to audio frame */ -WORD32 -impd_apply_gains_subband(ia_drc_instructions_struct* pstr_drc_instruction_arr, - const WORD32 drc_instructions_index, - ia_drc_params_struct* ia_drc_params_struct, - ia_gain_buffer_struct* pstr_gain_buf, - ia_overlap_params_struct* pstr_overlap_params, - FLOAT32* deinterleaved_audio_delayed_re[], - FLOAT32* deinterleaved_audio_delayed_im[], - FLOAT32* deinterleaved_audio_re[], - FLOAT32* deinterleaved_audio_im[]) { - WORD32 c, b, g, m, s; - WORD32 gainIndexForGroup[CHANNEL_GROUP_COUNT_MAX]; - FLOAT32* lpcm_gains; - FLOAT32 gainSb, gainLr; - ia_drc_instructions_struct* str_drc_instruction_str; - WORD32 offset = 0, signalIndex = 0; - WORD32 drc_frame_sizeSb = 0; - WORD32 nDecoderSubbands = 0; - WORD32 L = 0; /* L: downsampling factor */ - WORD32 analysisDelay = 0; - switch (ia_drc_params_struct->sub_band_domain_mode) { - case SUBBAND_DOMAIN_MODE_QMF64: - nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_QMF64; - L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64; - analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF64; - break; - case SUBBAND_DOMAIN_MODE_QMF71: - nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_QMF71; - L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71; - analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF71; - break; - case SUBBAND_DOMAIN_MODE_STFT256: - nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_STFT256; - L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256; - analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_STFT256; - break; - default: - return -1; - break; - } - drc_frame_sizeSb = ia_drc_params_struct->drc_frame_size / L; - - if (drc_instructions_index >= 0) { - str_drc_instruction_str = - &(pstr_drc_instruction_arr[drc_instructions_index]); - { - if (str_drc_instruction_str->drc_set_id > 0) { - if (ia_drc_params_struct->delay_mode == DELAY_MODE_LOW_DELAY) { - offset = ia_drc_params_struct->drc_frame_size; - } - gainIndexForGroup[0] = 0; - for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups - 1; g++) { - gainIndexForGroup[g + 1] = - gainIndexForGroup[g] + - str_drc_instruction_str - ->band_count_of_ch_group[g]; /* index of first gain sequence - in channel group */ - } - - for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++) - - { - g = str_drc_instruction_str->channel_group_of_ch[c]; - if (g >= 0) { - for (m = 0; m < drc_frame_sizeSb; m++) { - if (str_drc_instruction_str->band_count_of_ch_group[g] > - 1) { /* multiband DRC */ - for (s = 0; s < nDecoderSubbands; s++) { - gainSb = 0.0f; - for (b = 0; - b < str_drc_instruction_str->band_count_of_ch_group[g]; - b++) { - if (str_drc_instruction_str - ->ch_group_parametric_drc_flag[g] == 0) { - lpcm_gains = - pstr_gain_buf - ->buf_interpolation[gainIndexForGroup[g] + b] - .lpcm_gains + - MAX_SIGNAL_DELAY - - ia_drc_params_struct->gain_delay_samples - - ia_drc_params_struct->audio_delay_samples + offset; - } else { - lpcm_gains = - pstr_gain_buf - ->buf_interpolation[gainIndexForGroup[g] + b] - .lpcm_gains + - MAX_SIGNAL_DELAY + - str_drc_instruction_str - ->parametric_drc_look_ahead_samples[g] - - ia_drc_params_struct->audio_delay_samples + - analysisDelay; - } - /* get gain for this timeslot by downsampling */ - gainLr = lpcm_gains[(m * L + (L - 1) / 2)]; - gainSb += pstr_overlap_params->str_group_overlap_params[g] - .str_band_overlap_params[b] - .overlap_weight[s] * - gainLr; - } - deinterleaved_audio_re[signalIndex][m * nDecoderSubbands + - s] = - gainSb * - deinterleaved_audio_delayed_re[signalIndex] - [m * nDecoderSubbands + s]; - if (ia_drc_params_struct->sub_band_domain_mode == - SUBBAND_DOMAIN_MODE_STFT256) { /* For STFT filterbank, the - real value of the - nyquist band is stored - at the imag value of the - first band */ - if (s != 0) - deinterleaved_audio_im[signalIndex][m * nDecoderSubbands + - s] = - gainSb * - deinterleaved_audio_delayed_im[signalIndex] - [m * nDecoderSubbands + - s]; - if (s == (nDecoderSubbands - 1)) - deinterleaved_audio_im[signalIndex][m * nDecoderSubbands + - 0] = - gainSb * - deinterleaved_audio_delayed_im[signalIndex] - [m * nDecoderSubbands + - 0]; - } else { - deinterleaved_audio_im[signalIndex][m * nDecoderSubbands + - s] = - gainSb * - deinterleaved_audio_delayed_im[signalIndex] - [m * nDecoderSubbands + - s]; - } - } - } else { /* single-band DRC */ - if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == - 0) { - lpcm_gains = - pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]] - .lpcm_gains + - MAX_SIGNAL_DELAY - - ia_drc_params_struct->gain_delay_samples - - ia_drc_params_struct->audio_delay_samples + offset; - } else { - lpcm_gains = - pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]] - .lpcm_gains + - MAX_SIGNAL_DELAY + - str_drc_instruction_str - ->parametric_drc_look_ahead_samples[g] - - ia_drc_params_struct->audio_delay_samples + analysisDelay; - } - /* get gain for this timeslot by downsampling */ - gainSb = lpcm_gains[(m * L + (L - 1) / 2)]; - for (s = 0; s < nDecoderSubbands; s++) { - deinterleaved_audio_re[signalIndex][m * nDecoderSubbands + - s] = - gainSb * - deinterleaved_audio_delayed_re[signalIndex] - [m * nDecoderSubbands + s]; - deinterleaved_audio_im[signalIndex][m * nDecoderSubbands + - s] = - gainSb * - deinterleaved_audio_delayed_im[signalIndex] - [m * nDecoderSubbands + s]; - } - } - } - } - signalIndex++; - } - } - } - } - return (0); -} - WORD32 impd_filter_banks_process(ia_drc_instructions_struct* pstr_drc_instruction_arr, const WORD32 drc_instructions_index, @@ -474,37 +300,6 @@ impd_store_audio_io_buffer_time(FLOAT32* audio_in_out_buf[], } WORD32 -impd_store_audio_io_buffer_freq(FLOAT32* audio_real_buff[], - FLOAT32* audio_imag_buff[], - ia_audio_in_out_buf* audio_io_buf_internal) { - WORD32 i, j; - - if (audio_io_buf_internal->audio_delay_sub_band_samples) { - for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) { - for (j = 0; j < audio_io_buf_internal->audio_sub_band_frame_size * - audio_io_buf_internal->audio_sub_band_count; - j++) { - audio_io_buf_internal->audio_buffer_delayed_real - [i][audio_io_buf_internal->audio_delay_sub_band_samples * - audio_io_buf_internal->audio_sub_band_count + - j] = audio_real_buff[i][j]; - audio_io_buf_internal->audio_buffer_delayed_imag - [i][audio_io_buf_internal->audio_delay_sub_band_samples * - audio_io_buf_internal->audio_sub_band_count + - j] = audio_imag_buff[i][j]; - } - } - } else { - audio_io_buf_internal->audio_buffer_delayed_real = audio_real_buff; - audio_io_buf_internal->audio_buffer_delayed_imag = audio_imag_buff; - audio_io_buf_internal->audio_real_buff = audio_real_buff; - audio_io_buf_internal->audio_imag_buff = audio_imag_buff; - } - - return 0; -} - -WORD32 impd_retrieve_audio_io_buffer_time(FLOAT32* audio_in_out_buf[], ia_audio_in_out_buf* audio_io_buf_internal) { WORD32 i, j; @@ -522,30 +317,6 @@ impd_retrieve_audio_io_buffer_time(FLOAT32* audio_in_out_buf[], } WORD32 -impd_retrieve_audio_buffer_freq(FLOAT32* audio_real_buff[], - FLOAT32* audio_imag_buff[], - ia_audio_in_out_buf* audio_io_buf_internal) { - WORD32 i, j; - - if (audio_io_buf_internal->audio_delay_sub_band_samples) { - for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) { - for (j = 0; j < audio_io_buf_internal->audio_sub_band_frame_size * - audio_io_buf_internal->audio_sub_band_count; - j++) { - audio_real_buff[i][j] = - audio_io_buf_internal->audio_buffer_delayed_real - [i][audio_io_buf_internal->audio_sub_band_count + j]; - audio_imag_buff[i][j] = - audio_io_buf_internal->audio_buffer_delayed_imag - [i][audio_io_buf_internal->audio_sub_band_count + j]; - } - } - } - - return 0; -} - -WORD32 impd_advance_audio_io_buffer_time(ia_audio_in_out_buf* audio_io_buf_internal) { WORD32 i; if (audio_io_buf_internal->audio_delay_samples) { @@ -560,27 +331,3 @@ impd_advance_audio_io_buffer_time(ia_audio_in_out_buf* audio_io_buf_internal) { return 0; } - -WORD32 -impd_advance_audio_buff_freq(ia_audio_in_out_buf* audio_io_buf_internal) { - WORD32 i; - if (audio_io_buf_internal->audio_delay_sub_band_samples) { - for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) { - memmove(audio_io_buf_internal->audio_buffer_delayed_real[i], - &audio_io_buf_internal->audio_buffer_delayed_real - [i][audio_io_buf_internal->audio_sub_band_frame_size * - audio_io_buf_internal->audio_sub_band_count], - sizeof(FLOAT32) * - audio_io_buf_internal->audio_delay_sub_band_samples * - audio_io_buf_internal->audio_sub_band_count); - memmove(audio_io_buf_internal->audio_buffer_delayed_imag[i], - &audio_io_buf_internal->audio_buffer_delayed_imag - [i][audio_io_buf_internal->audio_sub_band_frame_size * - audio_io_buf_internal->audio_sub_band_count], - sizeof(FLOAT32) * - audio_io_buf_internal->audio_delay_sub_band_samples * - audio_io_buf_internal->audio_sub_band_count); - } - } - return 0; -} diff --git a/decoder/drc_src/impd_drc_process_audio.h b/decoder/drc_src/impd_drc_process_audio.h index 9a60280..2b1f6d5 100644 --- a/decoder/drc_src/impd_drc_process_audio.h +++ b/decoder/drc_src/impd_drc_process_audio.h @@ -46,17 +46,6 @@ typedef struct { } ia_audio_in_out_buf; WORD32 -impd_apply_gains_subband(ia_drc_instructions_struct* pstr_drc_instruction_arr, - const WORD32 drc_instructions_index, - ia_drc_params_struct* ia_drc_params_struct, - ia_gain_buffer_struct* pstr_gain_buf, - ia_overlap_params_struct* pstr_overlap_params, - FLOAT32* deinterleaved_audio_delayed_re[], - FLOAT32* deinterleaved_audio_delayed_im[], - FLOAT32* deinterleaved_audio_re[], - FLOAT32* deinterleaved_audio_im[]); - -WORD32 impd_filter_banks_process(ia_drc_instructions_struct* pstr_drc_instruction_arr, const WORD32 drc_instructions_index, ia_drc_params_struct* ia_drc_params_struct, @@ -79,15 +68,8 @@ impd_retrieve_audio_io_buffer_time(FLOAT32* audio_in_out_buf[], ia_audio_in_out_buf* audio_io_buf_internal); WORD32 -impd_retrieve_audio_buffer_freq(FLOAT32* audio_real_buff[], - FLOAT32* audio_imag_buff[], - ia_audio_in_out_buf* audio_io_buf_internal); - -WORD32 impd_advance_audio_io_buffer_time(ia_audio_in_out_buf* audio_io_buf_internal); -WORD32 -impd_advance_audio_buff_freq(ia_audio_in_out_buf* audio_io_buf_internal); #ifdef __cplusplus } diff --git a/decoder/drc_src/impd_drc_rom.c b/decoder/drc_src/impd_drc_rom.c index ad264bb..6925ae2 100644 --- a/decoder/drc_src/impd_drc_rom.c +++ b/decoder/drc_src/impd_drc_rom.c @@ -250,24 +250,33 @@ const FLOAT32 dwnmix_coeff_lfe[] = { 10.0f, 6.0f, 4.5f, 3.0f, 1.5f, 0.0f, -1.5f, -3.0f, -4.5f, -6.0f, -10.0f, -15.0f, -20.0f, -30.0f, -40.0f, -1000.0f}; -WORD32 drc_characteristic_order_default[][3] = { +const WORD32 drc_characteristic_order_default[][3] = { {1, 2, -1}, {2, 3, 1}, {3, 4, 2}, {4, 5, 3}, {5, 6, 4}, {6, 5, -1}, {7, 9, -1}, {8, 10, -1}, {9, 7, -1}, {10, 8, -1}, {11, 10, 9}}; -WORD32 measurement_system_default_tbl[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -WORD32 measurement_system_bs1770_3_tbl[] = {0, 0, 8, 0, 1, 3, 0, 5, 6, 7, 4, 2}; -WORD32 measurement_system_user_tbl[] = {0, 0, 1, 0, 8, 5, 0, 2, 3, 4, 6, 7}; -WORD32 measurement_system_expert_tbl[] = {0, 0, 3, 0, 1, 8, 0, 4, 5, 6, 7, 2}; -WORD32 measurement_system_rms_a_tbl[] = {0, 0, 5, 0, 1, 3, 0, 8, 6, 7, 4, 2}; -WORD32 measurement_system_rms_b_tbl[] = {0, 0, 5, 0, 1, 3, 0, 6, 8, 7, 4, 2}; -WORD32 measurement_system_rms_c_tbl[] = {0, 0, 5, 0, 1, 3, 0, 6, 7, 8, 4, 2}; -WORD32 measurement_system_rms_d_tbl[] = {0, 0, 3, 0, 1, 7, 0, 4, 5, 6, 8, 2}; -WORD32 measurement_system_rms_e_tbl[] = {0, 0, 1, 0, 7, 5, 0, 2, 3, 4, 6, 8}; +const WORD32 measurement_system_default_tbl[] = {0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0}; +const WORD32 measurement_system_bs1770_3_tbl[] = {0, 0, 8, 0, 1, 3, + 0, 5, 6, 7, 4, 2}; +const WORD32 measurement_system_user_tbl[] = {0, 0, 1, 0, 8, 5, + 0, 2, 3, 4, 6, 7}; +const WORD32 measurement_system_expert_tbl[] = {0, 0, 3, 0, 1, 8, + 0, 4, 5, 6, 7, 2}; +const WORD32 measurement_system_rms_a_tbl[] = {0, 0, 5, 0, 1, 3, + 0, 8, 6, 7, 4, 2}; +const WORD32 measurement_system_rms_b_tbl[] = {0, 0, 5, 0, 1, 3, + 0, 6, 8, 7, 4, 2}; +const WORD32 measurement_system_rms_c_tbl[] = {0, 0, 5, 0, 1, 3, + 0, 6, 7, 8, 4, 2}; +const WORD32 measurement_system_rms_d_tbl[] = {0, 0, 3, 0, 1, 7, + 0, 4, 5, 6, 8, 2}; +const WORD32 measurement_system_rms_e_tbl[] = {0, 0, 1, 0, 7, 5, + 0, 2, 3, 4, 6, 8}; -WORD32 measurement_method_prog_loudness_tbl[] = {0, 0, 1, 0, 0, 0, - 0, 2, 3, 4, 0, 0}; -WORD32 measurement_method_peak_loudness_tbl[] = {0, 7, 0, 0, 0, 0, - 6, 5, 4, 3, 2, 1}; +const WORD32 measurement_method_prog_loudness_tbl[] = {0, 0, 1, 0, 0, 0, + 0, 2, 3, 4, 0, 0}; +const WORD32 measurement_method_peak_loudness_tbl[] = {0, 7, 0, 0, 0, 0, + 6, 5, 4, 3, 2, 1}; const ia_loc_sys_interface_struct loc_sys_interface[] = { {0, 1, {0, 0, 0}, 0, 0}, {0, 1, {2, 0, 0}, 0, 0}, @@ -335,7 +344,7 @@ const ia_loc_drc_parameter_interface_struct loc_drc_parameter_interface[] = { {1.0f, 1.0f, 0}, {1.0f, 1.0f, 0}, }; -FLOAT32 f_bands_nrm_QMF71[71] = { +const FLOAT32 f_bands_nrm_QMF71[71] = { 0.004583300000000f, 0.000833330000000f, 0.002083300000000f, 0.005875000000000f, 0.009791700000000f, 0.014292000000000f, 0.019792000000000f, 0.027000000000000f, 0.035417000000000f, @@ -361,7 +370,7 @@ FLOAT32 f_bands_nrm_QMF71[71] = { 0.931750000000000f, 0.947370000000000f, 0.963000000000000f, 0.974540000000000f, 0.999040000000000f}; -FLOAT32 f_bands_nrm_QMF64[64] = { +const FLOAT32 f_bands_nrm_QMF64[64] = { 0.0078125000000000f, 0.0234380000000000f, 0.0390620000000000f, 0.0546880000000000f, 0.0703120000000000f, 0.0859380000000000f, 0.1015600000000000f, 0.1171900000000000f, 0.1328100000000000f, @@ -385,7 +394,7 @@ FLOAT32 f_bands_nrm_QMF64[64] = { 0.9453100000000000f, 0.9609400000000000f, 0.9765600000000000f, 0.9921900000000000f}; -FLOAT32 f_bands_nrm_STFT256[257] = { +const FLOAT32 f_bands_nrm_STFT256[257] = { 0.000000000000000f, 0.003906250000000f, 0.007812500000000f, 0.011718750000000f, 0.015625000000000f, 0.019531250000000f, 0.023437500000000f, 0.027343750000000f, 0.031250000000000f, @@ -473,646 +482,646 @@ FLOAT32 f_bands_nrm_STFT256[257] = { 0.984375000000000f, 0.988281250000000f, 0.992187500000000f, 0.996093750000000f, 1.000000000000000f}; -FLOAT64 qmf_filter_coeff[640] = {0, - -0.00055252865047, - -0.00056176925738, - -0.00049475180896, - -0.00048752279712, - -0.00048937912498, - -0.00050407143497, - -0.00052265642972, - -0.00054665656337, - -0.00056778025613, - -0.00058709304852, - -0.00061327473938, - -0.00063124935319, - -0.00065403333621, - -0.00067776907764, - -0.00069416146273, - -0.00071577364744, - -0.00072550431222, - -0.00074409418541, - -0.00074905980532, - -0.00076813719270, - -0.00077248485949, - -0.00078343322877, - -0.00077798694927, - -0.00078036647100, - -0.00078014496257, - -0.00077579773310, - -0.00076307935757, - -0.00075300014201, - -0.00073193571525, - -0.00072153919876, - -0.00069179375372, - -0.00066504150893, - -0.00063415949025, - -0.00059461189330, - -0.00055645763906, - -0.00051455722108, - -0.00046063254803, - -0.00040951214522, - -0.00035011758756, - -0.00028969811748, - -0.00020983373440, - -0.00014463809349, - -0.00006173344072, - 0.00001349497418, - 0.00010943831274, - 0.00020430170688, - 0.00029495311041, - 0.00040265402160, - 0.00051073884952, - 0.00062393761391, - 0.00074580258865, - 0.00086084433262, - 0.00098859883015, - 0.00112501551307, - 0.00125778846475, - 0.00139024948272, - 0.00154432198471, - 0.00168680832531, - 0.00183482654224, - 0.00198411407369, - 0.00214615835557, - 0.00230172547746, - 0.00246256169126, - 0.00262017586902, - 0.00278704643465, - 0.00294694477165, - 0.00311254206525, - 0.00327396134847, - 0.00344188741828, - 0.00360082681231, - 0.00376039229104, - 0.00392074323703, - 0.00408197531935, - 0.00422642692270, - 0.00437307196781, - 0.00452098527825, - 0.00466064606118, - 0.00479325608498, - 0.00491376035745, - 0.00503930226013, - 0.00514073539032, - 0.00524611661324, - 0.00534716811982, - 0.00541967759307, - 0.00548760401507, - 0.00554757145088, - 0.00559380230045, - 0.00562206432097, - 0.00564551969164, - 0.00563891995151, - 0.00562661141932, - 0.00559171286630, - 0.00554043639400, - 0.00547537830770, - 0.00538389758970, - 0.00527157587272, - 0.00513822754514, - 0.00498396877629, - 0.00481094690600, - 0.00460395301471, - 0.00438018617447, - 0.00412516423270, - 0.00384564081246, - 0.00354012465507, - 0.00320918858098, - 0.00284467578623, - 0.00245085400321, - 0.00202741761850, - 0.00157846825768, - 0.00109023290512, - 0.00058322642480, - 0.00002760451905, - -0.00054642808664, - -0.00115681355227, - -0.00180394725893, - -0.00248267236449, - -0.00319337783900, - -0.00394011240522, - -0.00472225962400, - -0.00553372111088, - -0.00637922932685, - -0.00726158168517, - -0.00817982333726, - -0.00913253296085, - -0.01011502154986, - -0.01113155480321, - -0.01218499959508, - 0.01327182200351, - 0.01439046660792, - 0.01554055533423, - 0.01673247129989, - 0.01794333813443, - 0.01918724313698, - 0.02045317933555, - 0.02174675502535, - 0.02306801692862, - 0.02441609920285, - 0.02578758475467, - 0.02718594296329, - 0.02860721736385, - 0.03005026574279, - 0.03150176087389, - 0.03297540810337, - 0.03446209487686, - 0.03596975605542, - 0.03748128504252, - 0.03900536794745, - 0.04053491705584, - 0.04206490946367, - 0.04360975421304, - 0.04514884056413, - 0.04668430272642, - 0.04821657200672, - 0.04973857556014, - 0.05125561555216, - 0.05276307465207, - 0.05424527683589, - 0.05571736482138, - 0.05716164501299, - 0.05859156836260, - 0.05998374801761, - 0.06134551717207, - 0.06268578081172, - 0.06397158980681, - 0.06522471064380, - 0.06643675122104, - 0.06760759851228, - 0.06870438283512, - 0.06976302447127, - 0.07076287107266, - 0.07170026731102, - 0.07256825833083, - 0.07336202550803, - 0.07410036424342, - 0.07474525581194, - 0.07531373362019, - 0.07580083586584, - 0.07619924793396, - 0.07649921704119, - 0.07670934904245, - 0.07681739756964, - 0.07682300113923, - 0.07672049241746, - 0.07650507183194, - 0.07617483218536, - 0.07573057565061, - 0.07515762552870, - 0.07446643947564, - 0.07364060057620, - 0.07267746427299, - 0.07158263647903, - 0.07035330735093, - 0.06896640131951, - 0.06745250215166, - 0.06576906686508, - 0.06394448059633, - 0.06196027790387, - 0.05981665708090, - 0.05751526919867, - 0.05504600343009, - 0.05240938217366, - 0.04959786763445, - 0.04663033051701, - 0.04347687821958, - 0.04014582784127, - 0.03664181168133, - 0.03295839306691, - 0.02908240060125, - 0.02503075618909, - 0.02079970728622, - 0.01637012582228, - 0.01176238327857, - 0.00696368621617, - 0.00197656014503, - -0.00320868968304, - -0.00857117491366, - -0.01412888273558, - -0.01988341292573, - -0.02582272888064, - -0.03195312745332, - -0.03827765720822, - -0.04478068215856, - -0.05148041767934, - -0.05837053268336, - -0.06544098531359, - -0.07269433008129, - -0.08013729344279, - -0.08775475365593, - -0.09555333528914, - -0.10353295311463, - -0.11168269317730, - -0.12000779846800, - -0.12850028503878, - -0.13715517611934, - -0.14597664911870, - -0.15496070710605, - -0.16409588556669, - -0.17338081721706, - -0.18281725485142, - -0.19239667457267, - -0.20212501768103, - -0.21197358538056, - -0.22196526964149, - -0.23206908706791, - -0.24230168845974, - -0.25264803095722, - -0.26310532994603, - -0.27366340405625, - -0.28432141891085, - -0.29507167170646, - -0.30590985751916, - -0.31682789136456, - -0.32781137272105, - -0.33887226938665, - -0.34999141229310, - 0.36115899031355, - 0.37237955463061, - 0.38363500139043, - 0.39492117615675, - 0.40623176767625, - 0.41756968968409, - 0.42891199207373, - 0.44025537543665, - 0.45159965356824, - 0.46293080852757, - 0.47424532146115, - 0.48552530911099, - 0.49677082545707, - 0.50798175000434, - 0.51912349702391, - 0.53022408956855, - 0.54125534487322, - 0.55220512585061, - 0.56307891401370, - 0.57385241316923, - 0.58454032354679, - 0.59511230862496, - 0.60557835389180, - 0.61591099320291, - 0.62612426956055, - 0.63619801077286, - 0.64612696959461, - 0.65590163024671, - 0.66551398801627, - 0.67496631901712, - 0.68423532934598, - 0.69332823767032, - 0.70223887193539, - 0.71094104263095, - 0.71944626349561, - 0.72774489002994, - 0.73582117582769, - 0.74368278636488, - 0.75131374561237, - 0.75870807608242, - 0.76586748650939, - 0.77277808813327, - 0.77942875190216, - 0.78583531203920, - 0.79197358416424, - 0.79784664137700, - 0.80344857518505, - 0.80876950044491, - 0.81381912706217, - 0.81857760046468, - 0.82304198905409, - 0.82722753473360, - 0.83110384571520, - 0.83469373618402, - 0.83797173378865, - 0.84095413924722, - 0.84362382812005, - 0.84598184698206, - 0.84803157770763, - 0.84978051984268, - 0.85119715249343, - 0.85230470352147, - 0.85310209497017, - 0.85357205739107, - 0.85373856005937, - 0.85357205739107, - 0.85310209497017, - 0.85230470352147, - 0.85119715249343, - 0.84978051984268, - 0.84803157770763, - 0.84598184698206, - 0.84362382812005, - 0.84095413924722, - 0.83797173378865, - 0.83469373618402, - 0.83110384571520, - 0.82722753473360, - 0.82304198905409, - 0.81857760046468, - 0.81381912706217, - 0.80876950044491, - 0.80344857518505, - 0.79784664137700, - 0.79197358416424, - 0.78583531203920, - 0.77942875190216, - 0.77277808813327, - 0.76586748650939, - 0.75870807608242, - 0.75131374561237, - 0.74368278636488, - 0.73582117582769, - 0.72774489002994, - 0.71944626349561, - 0.71094104263095, - 0.70223887193539, - 0.69332823767032, - 0.68423532934598, - 0.67496631901712, - 0.66551398801627, - 0.65590163024671, - 0.64612696959461, - 0.63619801077286, - 0.62612426956055, - 0.61591099320291, - 0.60557835389180, - 0.59511230862496, - 0.58454032354679, - 0.57385241316923, - 0.56307891401370, - 0.55220512585061, - 0.54125534487322, - 0.53022408956855, - 0.51912349702391, - 0.50798175000434, - 0.49677082545707, - 0.48552530911099, - 0.47424532146115, - 0.46293080852757, - 0.45159965356824, - 0.44025537543665, - 0.42891199207373, - 0.41756968968409, - 0.40623176767625, - 0.39492117615675, - 0.38363500139043, - 0.37237955463061, - -0.36115899031355, - -0.34999141229310, - -0.33887226938665, - -0.32781137272105, - -0.31682789136456, - -0.30590985751916, - -0.29507167170646, - -0.28432141891085, - -0.27366340405625, - -0.26310532994603, - -0.25264803095722, - -0.24230168845974, - -0.23206908706791, - -0.22196526964149, - -0.21197358538056, - -0.20212501768103, - -0.19239667457267, - -0.18281725485142, - -0.17338081721706, - -0.16409588556669, - -0.15496070710605, - -0.14597664911870, - -0.13715517611934, - -0.12850028503878, - -0.12000779846800, - -0.11168269317730, - -0.10353295311463, - -0.09555333528914, - -0.08775475365593, - -0.08013729344279, - -0.07269433008129, - -0.06544098531359, - -0.05837053268336, - -0.05148041767934, - -0.04478068215856, - -0.03827765720822, - -0.03195312745332, - -0.02582272888064, - -0.01988341292573, - -0.01412888273558, - -0.00857117491366, - -0.00320868968304, - 0.00197656014503, - 0.00696368621617, - 0.01176238327857, - 0.01637012582228, - 0.02079970728622, - 0.02503075618909, - 0.02908240060125, - 0.03295839306691, - 0.03664181168133, - 0.04014582784127, - 0.04347687821958, - 0.04663033051701, - 0.04959786763445, - 0.05240938217366, - 0.05504600343009, - 0.05751526919867, - 0.05981665708090, - 0.06196027790387, - 0.06394448059633, - 0.06576906686508, - 0.06745250215166, - 0.06896640131951, - 0.07035330735093, - 0.07158263647903, - 0.07267746427299, - 0.07364060057620, - 0.07446643947564, - 0.07515762552870, - 0.07573057565061, - 0.07617483218536, - 0.07650507183194, - 0.07672049241746, - 0.07682300113923, - 0.07681739756964, - 0.07670934904245, - 0.07649921704119, - 0.07619924793396, - 0.07580083586584, - 0.07531373362019, - 0.07474525581194, - 0.07410036424342, - 0.07336202550803, - 0.07256825833083, - 0.07170026731102, - 0.07076287107266, - 0.06976302447127, - 0.06870438283512, - 0.06760759851228, - 0.06643675122104, - 0.06522471064380, - 0.06397158980681, - 0.06268578081172, - 0.06134551717207, - 0.05998374801761, - 0.05859156836260, - 0.05716164501299, - 0.05571736482138, - 0.05424527683589, - 0.05276307465207, - 0.05125561555216, - 0.04973857556014, - 0.04821657200672, - 0.04668430272642, - 0.04514884056413, - 0.04360975421304, - 0.04206490946367, - 0.04053491705584, - 0.03900536794745, - 0.03748128504252, - 0.03596975605542, - 0.03446209487686, - 0.03297540810337, - 0.03150176087389, - 0.03005026574279, - 0.02860721736385, - 0.02718594296329, - 0.02578758475467, - 0.02441609920285, - 0.02306801692862, - 0.02174675502535, - 0.02045317933555, - 0.01918724313698, - 0.01794333813443, - 0.01673247129989, - 0.01554055533423, - 0.01439046660792, - -0.01327182200351, - -0.01218499959508, - -0.01113155480321, - -0.01011502154986, - -0.00913253296085, - -0.00817982333726, - -0.00726158168517, - -0.00637922932685, - -0.00553372111088, - -0.00472225962400, - -0.00394011240522, - -0.00319337783900, - -0.00248267236449, - -0.00180394725893, - -0.00115681355227, - -0.00054642808664, - 0.00002760451905, - 0.00058322642480, - 0.00109023290512, - 0.00157846825768, - 0.00202741761850, - 0.00245085400321, - 0.00284467578623, - 0.00320918858098, - 0.00354012465507, - 0.00384564081246, - 0.00412516423270, - 0.00438018617447, - 0.00460395301471, - 0.00481094690600, - 0.00498396877629, - 0.00513822754514, - 0.00527157587272, - 0.00538389758970, - 0.00547537830770, - 0.00554043639400, - 0.00559171286630, - 0.00562661141932, - 0.00563891995151, - 0.00564551969164, - 0.00562206432097, - 0.00559380230045, - 0.00554757145088, - 0.00548760401507, - 0.00541967759307, - 0.00534716811982, - 0.00524611661324, - 0.00514073539032, - 0.00503930226013, - 0.00491376035745, - 0.00479325608498, - 0.00466064606118, - 0.00452098527825, - 0.00437307196781, - 0.00422642692270, - 0.00408197531935, - 0.00392074323703, - 0.00376039229104, - 0.00360082681231, - 0.00344188741828, - 0.00327396134847, - 0.00311254206525, - 0.00294694477165, - 0.00278704643465, - 0.00262017586902, - 0.00246256169126, - 0.00230172547746, - 0.00214615835557, - 0.00198411407369, - 0.00183482654224, - 0.00168680832531, - 0.00154432198471, - 0.00139024948272, - 0.00125778846475, - 0.00112501551307, - 0.00098859883015, - 0.00086084433262, - 0.00074580258865, - 0.00062393761391, - 0.00051073884952, - 0.00040265402160, - 0.00029495311041, - 0.00020430170688, - 0.00010943831274, - 0.00001349497418, - -0.00006173344072, - -0.00014463809349, - -0.00020983373440, - -0.00028969811748, - -0.00035011758756, - -0.00040951214522, - -0.00046063254803, - -0.00051455722108, - -0.00055645763906, - -0.00059461189330, - -0.00063415949025, - -0.00066504150893, - -0.00069179375372, - -0.00072153919876, - -0.00073193571525, - -0.00075300014201, - -0.00076307935757, - -0.00077579773310, - -0.00078014496257, - -0.00078036647100, - -0.00077798694927, - -0.00078343322877, - -0.00077248485949, - -0.00076813719270, - -0.00074905980532, - -0.00074409418541, - -0.00072550431222, - -0.00071577364744, - -0.00069416146273, - -0.00067776907764, - -0.00065403333621, - -0.00063124935319, - -0.00061327473938, - -0.00058709304852, - -0.00056778025613, - -0.00054665656337, - -0.00052265642972, - -0.00050407143497, - -0.00048937912498, - -0.00048752279712, - -0.00049475180896, - -0.00056176925738, - -0.00055252865047}; +const FLOAT64 qmf_filter_coeff[640] = {0, + -0.00055252865047, + -0.00056176925738, + -0.00049475180896, + -0.00048752279712, + -0.00048937912498, + -0.00050407143497, + -0.00052265642972, + -0.00054665656337, + -0.00056778025613, + -0.00058709304852, + -0.00061327473938, + -0.00063124935319, + -0.00065403333621, + -0.00067776907764, + -0.00069416146273, + -0.00071577364744, + -0.00072550431222, + -0.00074409418541, + -0.00074905980532, + -0.00076813719270, + -0.00077248485949, + -0.00078343322877, + -0.00077798694927, + -0.00078036647100, + -0.00078014496257, + -0.00077579773310, + -0.00076307935757, + -0.00075300014201, + -0.00073193571525, + -0.00072153919876, + -0.00069179375372, + -0.00066504150893, + -0.00063415949025, + -0.00059461189330, + -0.00055645763906, + -0.00051455722108, + -0.00046063254803, + -0.00040951214522, + -0.00035011758756, + -0.00028969811748, + -0.00020983373440, + -0.00014463809349, + -0.00006173344072, + 0.00001349497418, + 0.00010943831274, + 0.00020430170688, + 0.00029495311041, + 0.00040265402160, + 0.00051073884952, + 0.00062393761391, + 0.00074580258865, + 0.00086084433262, + 0.00098859883015, + 0.00112501551307, + 0.00125778846475, + 0.00139024948272, + 0.00154432198471, + 0.00168680832531, + 0.00183482654224, + 0.00198411407369, + 0.00214615835557, + 0.00230172547746, + 0.00246256169126, + 0.00262017586902, + 0.00278704643465, + 0.00294694477165, + 0.00311254206525, + 0.00327396134847, + 0.00344188741828, + 0.00360082681231, + 0.00376039229104, + 0.00392074323703, + 0.00408197531935, + 0.00422642692270, + 0.00437307196781, + 0.00452098527825, + 0.00466064606118, + 0.00479325608498, + 0.00491376035745, + 0.00503930226013, + 0.00514073539032, + 0.00524611661324, + 0.00534716811982, + 0.00541967759307, + 0.00548760401507, + 0.00554757145088, + 0.00559380230045, + 0.00562206432097, + 0.00564551969164, + 0.00563891995151, + 0.00562661141932, + 0.00559171286630, + 0.00554043639400, + 0.00547537830770, + 0.00538389758970, + 0.00527157587272, + 0.00513822754514, + 0.00498396877629, + 0.00481094690600, + 0.00460395301471, + 0.00438018617447, + 0.00412516423270, + 0.00384564081246, + 0.00354012465507, + 0.00320918858098, + 0.00284467578623, + 0.00245085400321, + 0.00202741761850, + 0.00157846825768, + 0.00109023290512, + 0.00058322642480, + 0.00002760451905, + -0.00054642808664, + -0.00115681355227, + -0.00180394725893, + -0.00248267236449, + -0.00319337783900, + -0.00394011240522, + -0.00472225962400, + -0.00553372111088, + -0.00637922932685, + -0.00726158168517, + -0.00817982333726, + -0.00913253296085, + -0.01011502154986, + -0.01113155480321, + -0.01218499959508, + 0.01327182200351, + 0.01439046660792, + 0.01554055533423, + 0.01673247129989, + 0.01794333813443, + 0.01918724313698, + 0.02045317933555, + 0.02174675502535, + 0.02306801692862, + 0.02441609920285, + 0.02578758475467, + 0.02718594296329, + 0.02860721736385, + 0.03005026574279, + 0.03150176087389, + 0.03297540810337, + 0.03446209487686, + 0.03596975605542, + 0.03748128504252, + 0.03900536794745, + 0.04053491705584, + 0.04206490946367, + 0.04360975421304, + 0.04514884056413, + 0.04668430272642, + 0.04821657200672, + 0.04973857556014, + 0.05125561555216, + 0.05276307465207, + 0.05424527683589, + 0.05571736482138, + 0.05716164501299, + 0.05859156836260, + 0.05998374801761, + 0.06134551717207, + 0.06268578081172, + 0.06397158980681, + 0.06522471064380, + 0.06643675122104, + 0.06760759851228, + 0.06870438283512, + 0.06976302447127, + 0.07076287107266, + 0.07170026731102, + 0.07256825833083, + 0.07336202550803, + 0.07410036424342, + 0.07474525581194, + 0.07531373362019, + 0.07580083586584, + 0.07619924793396, + 0.07649921704119, + 0.07670934904245, + 0.07681739756964, + 0.07682300113923, + 0.07672049241746, + 0.07650507183194, + 0.07617483218536, + 0.07573057565061, + 0.07515762552870, + 0.07446643947564, + 0.07364060057620, + 0.07267746427299, + 0.07158263647903, + 0.07035330735093, + 0.06896640131951, + 0.06745250215166, + 0.06576906686508, + 0.06394448059633, + 0.06196027790387, + 0.05981665708090, + 0.05751526919867, + 0.05504600343009, + 0.05240938217366, + 0.04959786763445, + 0.04663033051701, + 0.04347687821958, + 0.04014582784127, + 0.03664181168133, + 0.03295839306691, + 0.02908240060125, + 0.02503075618909, + 0.02079970728622, + 0.01637012582228, + 0.01176238327857, + 0.00696368621617, + 0.00197656014503, + -0.00320868968304, + -0.00857117491366, + -0.01412888273558, + -0.01988341292573, + -0.02582272888064, + -0.03195312745332, + -0.03827765720822, + -0.04478068215856, + -0.05148041767934, + -0.05837053268336, + -0.06544098531359, + -0.07269433008129, + -0.08013729344279, + -0.08775475365593, + -0.09555333528914, + -0.10353295311463, + -0.11168269317730, + -0.12000779846800, + -0.12850028503878, + -0.13715517611934, + -0.14597664911870, + -0.15496070710605, + -0.16409588556669, + -0.17338081721706, + -0.18281725485142, + -0.19239667457267, + -0.20212501768103, + -0.21197358538056, + -0.22196526964149, + -0.23206908706791, + -0.24230168845974, + -0.25264803095722, + -0.26310532994603, + -0.27366340405625, + -0.28432141891085, + -0.29507167170646, + -0.30590985751916, + -0.31682789136456, + -0.32781137272105, + -0.33887226938665, + -0.34999141229310, + 0.36115899031355, + 0.37237955463061, + 0.38363500139043, + 0.39492117615675, + 0.40623176767625, + 0.41756968968409, + 0.42891199207373, + 0.44025537543665, + 0.45159965356824, + 0.46293080852757, + 0.47424532146115, + 0.48552530911099, + 0.49677082545707, + 0.50798175000434, + 0.51912349702391, + 0.53022408956855, + 0.54125534487322, + 0.55220512585061, + 0.56307891401370, + 0.57385241316923, + 0.58454032354679, + 0.59511230862496, + 0.60557835389180, + 0.61591099320291, + 0.62612426956055, + 0.63619801077286, + 0.64612696959461, + 0.65590163024671, + 0.66551398801627, + 0.67496631901712, + 0.68423532934598, + 0.69332823767032, + 0.70223887193539, + 0.71094104263095, + 0.71944626349561, + 0.72774489002994, + 0.73582117582769, + 0.74368278636488, + 0.75131374561237, + 0.75870807608242, + 0.76586748650939, + 0.77277808813327, + 0.77942875190216, + 0.78583531203920, + 0.79197358416424, + 0.79784664137700, + 0.80344857518505, + 0.80876950044491, + 0.81381912706217, + 0.81857760046468, + 0.82304198905409, + 0.82722753473360, + 0.83110384571520, + 0.83469373618402, + 0.83797173378865, + 0.84095413924722, + 0.84362382812005, + 0.84598184698206, + 0.84803157770763, + 0.84978051984268, + 0.85119715249343, + 0.85230470352147, + 0.85310209497017, + 0.85357205739107, + 0.85373856005937, + 0.85357205739107, + 0.85310209497017, + 0.85230470352147, + 0.85119715249343, + 0.84978051984268, + 0.84803157770763, + 0.84598184698206, + 0.84362382812005, + 0.84095413924722, + 0.83797173378865, + 0.83469373618402, + 0.83110384571520, + 0.82722753473360, + 0.82304198905409, + 0.81857760046468, + 0.81381912706217, + 0.80876950044491, + 0.80344857518505, + 0.79784664137700, + 0.79197358416424, + 0.78583531203920, + 0.77942875190216, + 0.77277808813327, + 0.76586748650939, + 0.75870807608242, + 0.75131374561237, + 0.74368278636488, + 0.73582117582769, + 0.72774489002994, + 0.71944626349561, + 0.71094104263095, + 0.70223887193539, + 0.69332823767032, + 0.68423532934598, + 0.67496631901712, + 0.66551398801627, + 0.65590163024671, + 0.64612696959461, + 0.63619801077286, + 0.62612426956055, + 0.61591099320291, + 0.60557835389180, + 0.59511230862496, + 0.58454032354679, + 0.57385241316923, + 0.56307891401370, + 0.55220512585061, + 0.54125534487322, + 0.53022408956855, + 0.51912349702391, + 0.50798175000434, + 0.49677082545707, + 0.48552530911099, + 0.47424532146115, + 0.46293080852757, + 0.45159965356824, + 0.44025537543665, + 0.42891199207373, + 0.41756968968409, + 0.40623176767625, + 0.39492117615675, + 0.38363500139043, + 0.37237955463061, + -0.36115899031355, + -0.34999141229310, + -0.33887226938665, + -0.32781137272105, + -0.31682789136456, + -0.30590985751916, + -0.29507167170646, + -0.28432141891085, + -0.27366340405625, + -0.26310532994603, + -0.25264803095722, + -0.24230168845974, + -0.23206908706791, + -0.22196526964149, + -0.21197358538056, + -0.20212501768103, + -0.19239667457267, + -0.18281725485142, + -0.17338081721706, + -0.16409588556669, + -0.15496070710605, + -0.14597664911870, + -0.13715517611934, + -0.12850028503878, + -0.12000779846800, + -0.11168269317730, + -0.10353295311463, + -0.09555333528914, + -0.08775475365593, + -0.08013729344279, + -0.07269433008129, + -0.06544098531359, + -0.05837053268336, + -0.05148041767934, + -0.04478068215856, + -0.03827765720822, + -0.03195312745332, + -0.02582272888064, + -0.01988341292573, + -0.01412888273558, + -0.00857117491366, + -0.00320868968304, + 0.00197656014503, + 0.00696368621617, + 0.01176238327857, + 0.01637012582228, + 0.02079970728622, + 0.02503075618909, + 0.02908240060125, + 0.03295839306691, + 0.03664181168133, + 0.04014582784127, + 0.04347687821958, + 0.04663033051701, + 0.04959786763445, + 0.05240938217366, + 0.05504600343009, + 0.05751526919867, + 0.05981665708090, + 0.06196027790387, + 0.06394448059633, + 0.06576906686508, + 0.06745250215166, + 0.06896640131951, + 0.07035330735093, + 0.07158263647903, + 0.07267746427299, + 0.07364060057620, + 0.07446643947564, + 0.07515762552870, + 0.07573057565061, + 0.07617483218536, + 0.07650507183194, + 0.07672049241746, + 0.07682300113923, + 0.07681739756964, + 0.07670934904245, + 0.07649921704119, + 0.07619924793396, + 0.07580083586584, + 0.07531373362019, + 0.07474525581194, + 0.07410036424342, + 0.07336202550803, + 0.07256825833083, + 0.07170026731102, + 0.07076287107266, + 0.06976302447127, + 0.06870438283512, + 0.06760759851228, + 0.06643675122104, + 0.06522471064380, + 0.06397158980681, + 0.06268578081172, + 0.06134551717207, + 0.05998374801761, + 0.05859156836260, + 0.05716164501299, + 0.05571736482138, + 0.05424527683589, + 0.05276307465207, + 0.05125561555216, + 0.04973857556014, + 0.04821657200672, + 0.04668430272642, + 0.04514884056413, + 0.04360975421304, + 0.04206490946367, + 0.04053491705584, + 0.03900536794745, + 0.03748128504252, + 0.03596975605542, + 0.03446209487686, + 0.03297540810337, + 0.03150176087389, + 0.03005026574279, + 0.02860721736385, + 0.02718594296329, + 0.02578758475467, + 0.02441609920285, + 0.02306801692862, + 0.02174675502535, + 0.02045317933555, + 0.01918724313698, + 0.01794333813443, + 0.01673247129989, + 0.01554055533423, + 0.01439046660792, + -0.01327182200351, + -0.01218499959508, + -0.01113155480321, + -0.01011502154986, + -0.00913253296085, + -0.00817982333726, + -0.00726158168517, + -0.00637922932685, + -0.00553372111088, + -0.00472225962400, + -0.00394011240522, + -0.00319337783900, + -0.00248267236449, + -0.00180394725893, + -0.00115681355227, + -0.00054642808664, + 0.00002760451905, + 0.00058322642480, + 0.00109023290512, + 0.00157846825768, + 0.00202741761850, + 0.00245085400321, + 0.00284467578623, + 0.00320918858098, + 0.00354012465507, + 0.00384564081246, + 0.00412516423270, + 0.00438018617447, + 0.00460395301471, + 0.00481094690600, + 0.00498396877629, + 0.00513822754514, + 0.00527157587272, + 0.00538389758970, + 0.00547537830770, + 0.00554043639400, + 0.00559171286630, + 0.00562661141932, + 0.00563891995151, + 0.00564551969164, + 0.00562206432097, + 0.00559380230045, + 0.00554757145088, + 0.00548760401507, + 0.00541967759307, + 0.00534716811982, + 0.00524611661324, + 0.00514073539032, + 0.00503930226013, + 0.00491376035745, + 0.00479325608498, + 0.00466064606118, + 0.00452098527825, + 0.00437307196781, + 0.00422642692270, + 0.00408197531935, + 0.00392074323703, + 0.00376039229104, + 0.00360082681231, + 0.00344188741828, + 0.00327396134847, + 0.00311254206525, + 0.00294694477165, + 0.00278704643465, + 0.00262017586902, + 0.00246256169126, + 0.00230172547746, + 0.00214615835557, + 0.00198411407369, + 0.00183482654224, + 0.00168680832531, + 0.00154432198471, + 0.00139024948272, + 0.00125778846475, + 0.00112501551307, + 0.00098859883015, + 0.00086084433262, + 0.00074580258865, + 0.00062393761391, + 0.00051073884952, + 0.00040265402160, + 0.00029495311041, + 0.00020430170688, + 0.00010943831274, + 0.00001349497418, + -0.00006173344072, + -0.00014463809349, + -0.00020983373440, + -0.00028969811748, + -0.00035011758756, + -0.00040951214522, + -0.00046063254803, + -0.00051455722108, + -0.00055645763906, + -0.00059461189330, + -0.00063415949025, + -0.00066504150893, + -0.00069179375372, + -0.00072153919876, + -0.00073193571525, + -0.00075300014201, + -0.00076307935757, + -0.00077579773310, + -0.00078014496257, + -0.00078036647100, + -0.00077798694927, + -0.00078343322877, + -0.00077248485949, + -0.00076813719270, + -0.00074905980532, + -0.00074409418541, + -0.00072550431222, + -0.00071577364744, + -0.00069416146273, + -0.00067776907764, + -0.00065403333621, + -0.00063124935319, + -0.00061327473938, + -0.00058709304852, + -0.00056778025613, + -0.00054665656337, + -0.00052265642972, + -0.00050407143497, + -0.00048937912498, + -0.00048752279712, + -0.00049475180896, + -0.00056176925738, + -0.00055252865047}; const ia_filter_bank_params_struct normal_cross_freq[FILTER_BANK_PARAMETER_COUNT] = { diff --git a/decoder/drc_src/impd_drc_rom.h b/decoder/drc_src/impd_drc_rom.h index 9add85d..d9432fd 100644 --- a/decoder/drc_src/impd_drc_rom.h +++ b/decoder/drc_src/impd_drc_rom.h @@ -66,20 +66,20 @@ extern const FLOAT32 dwnmix_coeff[]; extern const FLOAT32 dwnmix_coeff_lfe[]; -extern WORD32 drc_characteristic_order_default[][3]; +extern const WORD32 drc_characteristic_order_default[][3]; -extern WORD32 measurement_system_default_tbl[]; +extern const WORD32 measurement_system_default_tbl[]; -extern WORD32 measurement_system_bs1770_3_tbl[]; -extern WORD32 measurement_system_user_tbl[]; -extern WORD32 measurement_system_expert_tbl[]; -extern WORD32 measurement_system_rms_a_tbl[]; -extern WORD32 measurement_system_rms_b_tbl[]; -extern WORD32 measurement_system_rms_c_tbl[]; -extern WORD32 measurement_system_rms_d_tbl[]; -extern WORD32 measurement_system_rms_e_tbl[]; -extern WORD32 measurement_method_prog_loudness_tbl[]; -extern WORD32 measurement_method_peak_loudness_tbl[]; +extern const WORD32 measurement_system_bs1770_3_tbl[]; +extern const WORD32 measurement_system_user_tbl[]; +extern const WORD32 measurement_system_expert_tbl[]; +extern const WORD32 measurement_system_rms_a_tbl[]; +extern const WORD32 measurement_system_rms_b_tbl[]; +extern const WORD32 measurement_system_rms_c_tbl[]; +extern const WORD32 measurement_system_rms_d_tbl[]; +extern const WORD32 measurement_system_rms_e_tbl[]; +extern const WORD32 measurement_method_prog_loudness_tbl[]; +extern const WORD32 measurement_method_peak_loudness_tbl[]; #define MAX_NUM_DOWNMIX_ID_REQUESTS_LOCAL 3 @@ -151,11 +151,11 @@ typedef struct { extern const ia_loc_drc_parameter_interface_struct loc_drc_parameter_interface[]; -extern FLOAT32 f_bands_nrm_QMF71[71]; -extern FLOAT32 f_bands_nrm_QMF64[64]; -extern FLOAT32 f_bands_nrm_STFT256[257]; +extern const FLOAT32 f_bands_nrm_QMF71[71]; +extern const FLOAT32 f_bands_nrm_QMF64[64]; +extern const FLOAT32 f_bands_nrm_STFT256[257]; -FLOAT64 qmf_filter_coeff[640]; +extern const FLOAT64 qmf_filter_coeff[640]; extern const ia_filter_bank_params_struct normal_cross_freq[FILTER_BANK_PARAMETER_COUNT]; diff --git a/decoder/drc_src/impd_drc_selection_process.c b/decoder/drc_src/impd_drc_selection_process.c index 57f8b9c..ac24a40 100644 --- a/decoder/drc_src/impd_drc_selection_process.c +++ b/decoder/drc_src/impd_drc_selection_process.c @@ -129,7 +129,6 @@ impd_drc_uni_sel_proc_process( pstr_drc_uni_sel_proc->loudness_info_set_flag || pstr_drc_uni_sel_proc->sel_proc_request_flag) { WORD32 repeat_selection = 1; - WORD32 loop_cnt = 0; err = impd_manage_drc_complexity(pstr_drc_uni_sel_proc, pstr_drc_config); if (err) return (err); @@ -170,9 +169,10 @@ impd_drc_uni_sel_proc_process( for (i = SUB_DRC_COUNT - 1; i >= 0; i--) { WORD32 drc_instructions_index = pstr_drc_uni_sel_proc->drc_instructions_index[i]; + ia_drc_instructions_struct* str_drc_instruction_str; if (drc_instructions_index < 0) continue; - ia_drc_instructions_struct* str_drc_instruction_str = + str_drc_instruction_str = &(pstr_drc_uni_sel_proc->drc_config .str_drc_instruction_str[drc_instructions_index]); @@ -213,11 +213,6 @@ impd_drc_uni_sel_proc_process( err = impd_manage_complexity(pstr_drc_uni_sel_proc, pstr_drc_config, &repeat_selection); if (err) return (err); - - loop_cnt++; - if (loop_cnt > 100) { - return (UNEXPECTED_ERROR); - } } pstr_drc_uni_sel_proc->sel_proc_request_flag = 0; diff --git a/decoder/drc_src/impd_drc_selection_process_drcset_selection.c b/decoder/drc_src/impd_drc_selection_process_drcset_selection.c index 7e2bb62..3cd5ad5 100644 --- a/decoder/drc_src/impd_drc_selection_process_drcset_selection.c +++ b/decoder/drc_src/impd_drc_selection_process_drcset_selection.c @@ -31,7 +31,7 @@ #include "impd_drc_filter_bank.h" #include "impd_drc_rom.h" -static WORD32 effect_types_request_table[] = { +static const WORD32 effect_types_request_table[] = { EFFECT_BIT_NIGHT, EFFECT_BIT_NOISY, EFFECT_BIT_LIMITED, EFFECT_BIT_LOWLEVEL, EFFECT_BIT_DIALOG, EFFECT_BIT_GENERAL_COMPR, EFFECT_BIT_EXPAND, EFFECT_BIT_ARTISTIC}; @@ -673,9 +673,9 @@ WORD32 impd_match_drc_characteristic( WORD32 k, err; WORD32 match_found_flag = 0; - WORD32* drc_characteristic_order = + const WORD32* drc_characteristic_order = drc_characteristic_order_default[requested_drc_characteristic - 1]; - WORD32 drc_characteristic_order_count = + const WORD32 drc_characteristic_order_count = sizeof(drc_characteristic_order_default[requested_drc_characteristic]) / sizeof(WORD32); k = 0; @@ -910,6 +910,7 @@ WORD32 impd_drc_set_preselection( for (l = 0; l < loudness_info_count; l++) { WORD32 match_found_flag = 0; WORD32 p; + if (k >= SELECTION_CANDIDATE_COUNT_MAX) return UNEXPECTED_ERROR; for (p = 0; p < peak_info_count; p++) { if (eq_set_id_Peak[p] == eq_set_id_loudness[l]) { if (eq_set_id_valid_flag[eq_set_id_Peak[p]] == 1) { @@ -924,7 +925,6 @@ WORD32 impd_drc_set_preselection( signal_peak_level[p] + loudness_normalization_gain_db[l] - pstr_drc_sel_proc_params_struct->output_peak_level_max); adjustment = min(adjustment, max(0.0f, loudness_deviation_max)); - if (k >= SELECTION_CANDIDATE_COUNT_MAX) return UNEXPECTED_ERROR; selection_candidate_info[k].loudness_norm_db_gain_adjusted = loudness_normalization_gain_db[l] - adjustment; @@ -967,11 +967,9 @@ WORD32 impd_drc_set_preselection( } } } + if (k > SELECTION_CANDIDATE_COUNT_MAX) return UNEXPECTED_ERROR; *selection_candidate_count = k; - - if (*selection_candidate_count > SELECTION_CANDIDATE_COUNT_MAX) { - return UNEXPECTED_ERROR; - } else if (pstr_drc_sel_proc_params_struct->dynamic_range_control_on == 1) { + if (pstr_drc_sel_proc_params_struct->dynamic_range_control_on == 1) { n = 0; for (k = 0; k < *selection_candidate_count; k++) { str_drc_instruction_str = @@ -1172,6 +1170,7 @@ WORD32 impd_drc_set_final_selection( if (pstr_drc_sel_proc_params_struct->requested_dwnmix_id [selection_candidate_info_step_2[i].downmix_id_request_index] == str_drc_instruction_str->downmix_id[n]) { + if (k >= SELECTION_CANDIDATE_COUNT_MAX) return UNEXPECTED_ERROR; memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct)); diff --git a/decoder/drc_src/impd_drc_static_payload.c b/decoder/drc_src/impd_drc_static_payload.c index 95f5aeb..890555c 100644 --- a/decoder/drc_src/impd_drc_static_payload.c +++ b/decoder/drc_src/impd_drc_static_payload.c @@ -338,7 +338,7 @@ impd_parametric_drc_parse_gain_set_params( str_parametric_drc_gain_set_params->parametric_drc_id = (temp >> 3) & 0xf; str_parametric_drc_gain_set_params->side_chain_config_type = temp & 7; - if (str_parametric_drc_gain_set_params->side_chain_config_type) { + if (str_parametric_drc_gain_set_params->side_chain_config_type == 1) { temp = impd_read_bits_buf(it_bit_buff, 8); if (it_bit_buff->error) return it_bit_buff->error; @@ -443,9 +443,13 @@ static WORD32 impd_parametric_drc_gen_virtual_gain_sets( str_p_loc_drc_coefficients_uni_drc->gain_sequence_count = 0; drc_config->drc_coefficients_drc_count += 1; } - str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus = - str_p_loc_drc_coefficients_uni_drc->gain_set_count + - str_drc_coeff_param_drc->parametric_drc_gain_set_count; + { + WORD32 tmp = str_p_loc_drc_coefficients_uni_drc->gain_set_count + + str_drc_coeff_param_drc->parametric_drc_gain_set_count; + if (tmp > GAIN_SET_COUNT_MAX) return UNEXPECTED_ERROR; + str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus = tmp; + } + for (i = str_p_loc_drc_coefficients_uni_drc->gain_set_count; i < str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus; i++) { str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].band_count = 1; @@ -518,9 +522,12 @@ static WORD32 impd_parametic_drc_parse_coeff( if (it_bit_buff->error) return it_bit_buff->error; str_drc_coeff_param_drc->drc_location = (temp >> 1) & 0xf; + if (str_drc_coeff_param_drc->drc_location < 1 || + str_drc_coeff_param_drc->drc_location > 4) + return UNEXPECTED_ERROR; str_drc_coeff_param_drc->parametric_drc_frame_size_format = temp & 1; - if (str_drc_coeff_param_drc->parametric_drc_frame_size) { + if (str_drc_coeff_param_drc->parametric_drc_frame_size_format) { code = impd_read_bits_buf(it_bit_buff, 15); if (it_bit_buff->error) return it_bit_buff->error; str_drc_coeff_param_drc->parametric_drc_frame_size = code + 1; @@ -532,6 +539,7 @@ static WORD32 impd_parametic_drc_parse_coeff( str_drc_coeff_param_drc->parametric_drc_delay_max_present = impd_read_bits_buf(it_bit_buff, 1); + if (it_bit_buff->error) return it_bit_buff->error; if (str_drc_coeff_param_drc->parametric_drc_delay_max_present) { temp = impd_read_bits_buf(it_bit_buff, 8); if (it_bit_buff->error) return it_bit_buff->error; @@ -723,6 +731,8 @@ WORD32 impd_parse_ch_layout(ia_bit_buf_struct* it_bit_buff, channel_layout->base_channel_count = impd_read_bits_buf(it_bit_buff, 7); if (it_bit_buff->error) return it_bit_buff->error; + if (channel_layout->base_channel_count > MAX_CHANNEL_COUNT) + return (UNEXPECTED_ERROR); if (ia_drc_params_struct->lfe_channel_map_count != -1 && channel_layout->base_channel_count != ia_drc_params_struct->lfe_channel_map_count) { @@ -767,6 +777,8 @@ impd_parse_dwnmix_instructions( dwnmix_instructions->downmix_id = (temp >> 16) & 0x7f; dwnmix_instructions->target_channel_count = (temp >> 9) & 0x7f; + if (dwnmix_instructions->target_channel_count > MAX_CHANNEL_COUNT) + return (UNEXPECTED_ERROR); dwnmix_instructions->target_layout = (temp >> 1) & 0xff; dwnmix_instructions->downmix_coefficients_present = temp & 1; @@ -1219,6 +1231,9 @@ impd_parse_drc_config(ia_bit_buf_struct* it_bit_buff, if (err) return (err); } + if ((drc_config->drc_instructions_uni_drc_count + + drc_config->dwnmix_instructions_count) >= DRC_INSTRUCTIONS_COUNT_MAX) + return (UNEXPECTED_ERROR); impd_drc_gen_instructions_for_drc_off(drc_config); return (0); } @@ -1440,13 +1455,15 @@ impd_dec_gain_modifiers(ia_bit_buf_struct* it_bit_buff, WORD32 version, } } if (band_count == 1) { + WORD32 tmp; pstr_gain_modifiers->shape_filter_flag = impd_read_bits_buf(it_bit_buff, 1); if (it_bit_buff->error) return it_bit_buff->error; if (pstr_gain_modifiers->shape_filter_flag) { - pstr_gain_modifiers->shape_filter_idx = - impd_read_bits_buf(it_bit_buff, 4); + tmp = impd_read_bits_buf(it_bit_buff, 4); if (it_bit_buff->error) return it_bit_buff->error; + if (tmp >= (SHAPE_FILTER_COUNT_MAX + 1)) return UNEXPECTED_ERROR; + pstr_gain_modifiers->shape_filter_idx = tmp; } } } else if (version == 0) { @@ -1663,6 +1680,9 @@ impd_drc_parse_coeff( drc_frame_size = impd_read_bits_buf(it_bit_buff, 15); if (it_bit_buff->error) return it_bit_buff->error; str_p_loc_drc_coefficients_uni_drc->drc_frame_size = drc_frame_size + 1; + if (str_p_loc_drc_coefficients_uni_drc->drc_frame_size > + MAX_DRC_FRAME_SIZE) + return UNEXPECTED_ERROR; } str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present = 0; @@ -1695,6 +1715,10 @@ impd_drc_parse_coeff( ia_drc_params_struct->drc_frame_size / str_p_loc_drc_coefficients_uni_drc->gain_set_params[i] .time_delt_min_val; + if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i] + .num_gain_max_values > + (N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX / 2 - 1)) + return (UNEXPECTED_ERROR); err = impd_init_tbls( str_p_loc_drc_coefficients_uni_drc->gain_set_params[i] .num_gain_max_values, @@ -1871,6 +1895,11 @@ impd_drc_parse_coeff( ia_drc_params_struct->drc_frame_size / str_p_loc_drc_coefficients_uni_drc->gain_set_params[i] .time_delt_min_val; + if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i] + .num_gain_max_values > + (N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX / 2 - 1)) + return (UNEXPECTED_ERROR); + err = impd_init_tbls( str_p_loc_drc_coefficients_uni_drc->gain_set_params[i] .num_gain_max_values, @@ -2152,8 +2181,7 @@ impd_parse_drc_instructions_uni_drc( WORD32 bs_gain_set_idx; bs_gain_set_idx = impd_read_bits_buf(it_bit_buff, 6); if (it_bit_buff->error) return it_bit_buff->error; - if ((bs_gain_set_idx == 0) || (bs_gain_set_idx > GAIN_SET_COUNT_MAX)) - return UNEXPECTED_ERROR; + if (bs_gain_set_idx > GAIN_SET_COUNT_MAX) return UNEXPECTED_ERROR; str_drc_instruction_str->gain_set_index[c] = bs_gain_set_idx - 1; impd_dec_ducking_scaling( it_bit_buff, @@ -2257,6 +2285,7 @@ impd_parse_drc_instructions_uni_drc( (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_DUCK_OTHER) ? ducking_sequence : unique_idx[g]; + if (set < 0) return UNEXPECTED_ERROR; str_drc_instruction_str->gain_set_index_for_channel_group[g] = set; str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g] .ducking_scaling = unique_scaling[g]; @@ -2305,8 +2334,7 @@ impd_parse_drc_instructions_uni_drc( bs_gain_set_idx = (temp >> 1) & 0x7f; repeat_gain_set_idx = temp & 1; - if ((bs_gain_set_idx == 0) || (bs_gain_set_idx > GAIN_SET_COUNT_MAX)) - return UNEXPECTED_ERROR; + if (bs_gain_set_idx > GAIN_SET_COUNT_MAX) return UNEXPECTED_ERROR; str_drc_instruction_str->gain_set_index[c] = bs_gain_set_idx - 1; c++; @@ -2368,6 +2396,7 @@ impd_parse_drc_instructions_uni_drc( WORD32 set, band_count; set = unique_idx[g]; + if (set < 0) return UNEXPECTED_ERROR; str_drc_instruction_str->gain_set_index_for_channel_group[g] = set; if (str_p_loc_drc_coefficients_uni_drc != NULL && diff --git a/decoder/drc_src/impd_drc_tables.c b/decoder/drc_src/impd_drc_tables.c deleted file mode 100644 index b099b5e..0000000 --- a/decoder/drc_src/impd_drc_tables.c +++ /dev/null @@ -1,102 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2015 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 -*/ -#include <stdio.h> -#include <math.h> - -#include "impd_type_def.h" -#include "impd_drc_uni_tables.h" -#include "impd_drc_uni_common.h" -#include "impd_drc_struct.h" -#include "impd_drc_filter_bank.h" -#include "impd_drc_rom.h" - -WORD32 impd_init_tbls(const WORD32 num_gain_max_values, - ia_tables_struct* str_tables) { - impd_gen_delta_time_code_tbl(num_gain_max_values, - str_tables->delta_time_code_table); - return (0); -} - -void impd_get_slope_code_tbl_and_size( - ia_slope_code_table_struct const** slope_code_tbl_entry, - WORD32* num_slope_code_tbl_entries) { - *slope_code_tbl_entry = &(slopeCodeTableEntryBySize[0]); - *num_slope_code_tbl_entries = kNumSlopeValuesTable; -} - -void impd_get_delta_gain_code_tbl( - const WORD32 gain_coding_profile, - ia_delta_gain_code_table_struct const** delta_time_code_tbl, - WORD32* num_entries) { - if (gain_coding_profile == GAIN_CODING_PROFILE_CLIPPING) { - *delta_time_code_tbl = deltaGainCodeTableProfile2BySize; - *num_entries = kNumDeltaGainValuesTableProfile2; - } else { - *delta_time_code_tbl = deltaGainCodeTableBySize; - *num_entries = kNumDeltaGainValuesTable; - } -} - -void impd_gen_delta_time_code_tbl( - const WORD32 num_gain_max_values, - ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item) { - WORD32 n, k; - - WORD32 Z = 1; - while ((1 << Z) < 2 * num_gain_max_values) { - Z++; - } - - delta_time_code_tbl_item[0].size = -1; - delta_time_code_tbl_item[0].code = -1; - delta_time_code_tbl_item[0].value = -1; - - delta_time_code_tbl_item[1].size = 2; - delta_time_code_tbl_item[1].code = 0x0; - delta_time_code_tbl_item[1].value = 1; - for (n = 0; n < 4; n++) { - delta_time_code_tbl_item[n + 2].size = 4; - delta_time_code_tbl_item[n + 2].code = 0x4 + n; - delta_time_code_tbl_item[n + 2].value = n + 2; - } - for (n = 0; n < 8; n++) { - delta_time_code_tbl_item[n + 6].size = 5; - delta_time_code_tbl_item[n + 6].code = 0x10 + n; - delta_time_code_tbl_item[n + 6].value = n + 6; - } - - k = 2 * num_gain_max_values - 14 + 1; - for (n = 0; n < k; n++) { - delta_time_code_tbl_item[n + 14].size = 2 + Z; - delta_time_code_tbl_item[n + 14].code = (0x3 << Z) + n; - delta_time_code_tbl_item[n + 14].value = n + 14; - } -} - -WORD32 -impd_get_delta_tmin(const WORD32 sampling_rate) { - WORD32 lowerBound = (WORD32)(0.5f + 0.0005f * sampling_rate); - WORD32 result = 1; - if (sampling_rate < 1000) { - return (UNEXPECTED_ERROR); - } - while (result <= lowerBound) result = result << 1; - return result; -} diff --git a/decoder/drc_src/impd_drc_uni_common.h b/decoder/drc_src/impd_drc_uni_common.h deleted file mode 100644 index f661405..0000000 --- a/decoder/drc_src/impd_drc_uni_common.h +++ /dev/null @@ -1,162 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2015 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_UNI_COMMON_H -#define IMPD_DRC_UNI_COMMON_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define AMD1_SYNTAX 0 -#define MPEG_D_DRC_EXTENSION_V1 0 -#define AMD1_PARAMETRIC_LIMITER 0 - -#define MPEG_H_SYNTAX 0 - -#define EQ_IS_SUPPORTED 1 - -#define MEASURE_AVERAGE_BITRATE 0 -#define DEBUG_NODES 0 - -#define DRC_GAIN_DEBUG_FILE 0 -#define DEBUG_BITSTREAM 0 -#define DEBUG_DRC_SELECTION 0 -#define DEBUG_WARNINGS 0 -#define ENABLE_ADDITIONAL_TESTS 1 - -#define SPEAKER_POS_COUNT_MAX 128 -#define DOWNMIX_COEFF_COUNT_MAX 32 * 32 -#define MAX_CHANNEL_COUNT 128 -#define BAND_COUNT_MAX 8 -#define SEQUENCE_COUNT_MAX 24 -#define GAIN_SET_COUNT_MAX SEQUENCE_COUNT_MAX -#define MEASUREMENT_COUNT_MAX 16 -#define DOWNMIX_INSTRUCTION_COUNT_MAX 16 -#define DRC_COEFF_COUNT_MAX 8 -#define DRC_INSTRUCTIONS_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20) -#define LOUDNESS_INFO_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20) -#define AUDIO_CODEC_FRAME_SIZE_MAX 4096 -#define DRC_CODEC_FRAME_SIZE_MAX (AUDIO_CODEC_FRAME_SIZE_MAX / 8) -#define NODE_COUNT_MAX DRC_CODEC_FRAME_SIZE_MAX -#define CHANNEL_GROUP_COUNT_MAX SEQUENCE_COUNT_MAX -#define SUB_DRC_COUNT 4 -#define SEL_DRC_COUNT 3 -#define DOWNMIX_ID_COUNT_MAX 8 -#define MAX_SIGNAL_DELAY 4500 - -#define DELAY_MODE_REGULAR_DELAY 0 -#define DELAY_MODE_LOW_DELAY 1 -#define DELAY_MODE_DEFAULT DELAY_MODE_REGULAR_DELAY - -#define FEATURE_REQUEST_COUNT_MAX 10 -#define EFFECT_TYPE_REQUEST_COUNT_MAX 10 - -#define SELECTION_CANDIDATE_COUNT_MAX 32 - -#define PROC_COMPLETE 1 -#define UNEXPECTED_ERROR 2 -#define PARAM_ERROR 3 -#define EXTERNAL_ERROR 4 -#define ERRORHANDLING 5 -#define BITSTREAM_ERROR 6 - -#define UNDEFINED_LOUDNESS_VALUE 1000.0f -#define ID_FOR_BASE_LAYOUT 0x0 -#define ID_FOR_ANY_DOWNMIX 0x7F -#define ID_FOR_NO_DRC 0x0 -#define ID_FOR_ANY_DRC 0x3F -#define ID_FOR_ANY_EQ 0x3F - -#define LOCATION_MP4_INSTREAM_UNIDRC 0x1 -#define LOCATION_MP4_DYN_RANGE_INFO 0x2 -#define LOCATION_MP4_COMPRESSION_VALUE 0x3 -#define LOCATION_SELECTED LOCATION_MP4_INSTREAM_UNIDRC - -#define AUDIO_CODEC_SUBBAND_COUNT_MAX 256 - -#define SUBBAND_DOMAIN_MODE_OFF 0 -#define SUBBAND_DOMAIN_MODE_QMF64 1 -#define SUBBAND_DOMAIN_MODE_QMF71 2 -#define SUBBAND_DOMAIN_MODE_STFT256 3 - -#define AUDIO_CODEC_SUBBAND_COUNT_QMF64 64 -#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64 64 -#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF64 320 - -#define AUDIO_CODEC_SUBBAND_COUNT_QMF71 71 -#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71 64 -#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF71 320 + 384 - -#define AUDIO_CODEC_SUBBAND_COUNT_STFT256 256 -#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256 256 -#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_STFT256 256 - -#define MAX_NUM_DOWNMIX_ID_REQUESTS 15 -#define MAX_NUM_DRC_FEATURE_REQUESTS 7 -#define MAX_NUM_DRC_EFFECT_TYPE_REQUESTS 15 -#define MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE 256 - -#define EXT_COUNT_MAX 2 -#define UNIDRCGAINEXT_TERM 0x0 -#define UNIDRCLOUDEXT_TERM 0x0 -#define UNIDRCCONFEXT_TERM 0x0 -#define UNIDRCINTERFACEEXT_TERM 0x0 - -#define MAXPACKETLOSSTIME 2.5f - -#define SLOPE_FACTOR_DB_TO_LINEAR 0.1151f - -#ifndef min -#define min(a, b) ((a) < (b) ? (a) : (b)) -#endif -#ifndef max -#define max(a, b) ((a) > (b) ? (a) : (b)) -#endif - -#ifndef bool -#define bool WORD32 -#endif - -typedef struct ia_drc_sel_proc_output_struct { - FLOAT32 output_peak_level_db; - FLOAT32 loudness_normalization_gain_db; - FLOAT32 output_loudness; - - WORD32 sel_drc_set_ids[SUB_DRC_COUNT]; - WORD32 sel_downmix_ids[SUB_DRC_COUNT]; - WORD32 num_sel_drc_sets; - - WORD32 active_downmix_id; - WORD32 base_channel_count; - WORD32 target_channel_count; - WORD32 target_layout; - WORD32 downmix_matrix_present; - FLOAT32 downmix_matrix[MAX_CHANNEL_COUNT][MAX_CHANNEL_COUNT]; - - FLOAT32 boost; - FLOAT32 compress; - WORD32 drc_characteristic_target; - -} ia_drc_sel_proc_output_struct; - -#ifdef __cplusplus -} -#endif -#endif |