aboutsummaryrefslogtreecommitdiff
path: root/decoder/drc_src
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2020-09-01 20:03:58 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-09-01 20:03:58 +0000
commit386b47b4b1c2247a03c8ff2bf0ed5d5a59b55cb0 (patch)
tree53061986cbd3d9f031b31dc97935dd9fe1ae5e90 /decoder/drc_src
parent924a4628e020fe6553ce2a041cde5a7a1e7ebf69 (diff)
parent0312fc42cbd168783641a3605e6da363d2062a2f (diff)
downloadlibxaac-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')
-rw-r--r--decoder/drc_src/impd_drc_api.c155
-rw-r--r--decoder/drc_src/impd_drc_api_struct_def.h4
-rw-r--r--decoder/drc_src/impd_drc_bitbuffer.c51
-rw-r--r--decoder/drc_src/impd_drc_bitstream_dec_api.h7
-rw-r--r--decoder/drc_src/impd_drc_common.h4
-rw-r--r--decoder/drc_src/impd_drc_dynamic_payload.c77
-rw-r--r--decoder/drc_src/impd_drc_eq.c40
-rw-r--r--decoder/drc_src/impd_drc_eq.h5
-rw-r--r--decoder/drc_src/impd_drc_extr_delta_coded_info.c3
-rw-r--r--decoder/drc_src/impd_drc_fiilter_bank.c431
-rw-r--r--decoder/drc_src/impd_drc_gain_dec.c27
-rw-r--r--decoder/drc_src/impd_drc_gain_decoder.c70
-rw-r--r--decoder/drc_src/impd_drc_host_params.c197
-rw-r--r--decoder/drc_src/impd_drc_host_params.h41
-rw-r--r--decoder/drc_src/impd_drc_init.c217
-rw-r--r--decoder/drc_src/impd_drc_interface_decoder.c23
-rw-r--r--decoder/drc_src/impd_drc_interface_parser.c514
-rw-r--r--decoder/drc_src/impd_drc_loud_eq.c169
-rw-r--r--decoder/drc_src/impd_drc_loudness_control.c2
-rw-r--r--decoder/drc_src/impd_drc_main_qmf_process.c254
-rw-r--r--decoder/drc_src/impd_drc_main_stft_process.c254
-rw-r--r--decoder/drc_src/impd_drc_main_td_process.c118
-rw-r--r--decoder/drc_src/impd_drc_main_td_qmf_process.c364
-rw-r--r--decoder/drc_src/impd_drc_parametric_dec.c4
-rw-r--r--decoder/drc_src/impd_drc_process.c259
-rw-r--r--decoder/drc_src/impd_drc_process_audio.h18
-rw-r--r--decoder/drc_src/impd_drc_rom.c1323
-rw-r--r--decoder/drc_src/impd_drc_rom.h32
-rw-r--r--decoder/drc_src/impd_drc_selection_process.c9
-rw-r--r--decoder/drc_src/impd_drc_selection_process_drcset_selection.c15
-rw-r--r--decoder/drc_src/impd_drc_static_payload.c51
-rw-r--r--decoder/drc_src/impd_drc_tables.c102
-rw-r--r--decoder/drc_src/impd_drc_uni_common.h162
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