aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-04-03 02:14:59 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-04-03 02:14:59 +0000
commit8888415ea75c36972ce369e49eee76cf68907a04 (patch)
tree2d0d1ff8c40533ca8d29d9e1f6a7ec3d938819ed
parent982fd6871593905b3f7ef460a48388a5dcf933e6 (diff)
parent45895b998add7dea8f6f9d24c4c7b5a2b5569a47 (diff)
downloadlibxaac-8888415ea75c36972ce369e49eee76cf68907a04.tar.gz
Snap for 6360479 from 45895b998add7dea8f6f9d24c4c7b5a2b5569a47 to rvc-release
Change-Id: I03fcdf4d80c185717ba0d3eff70d1f70e7ef578a
-rw-r--r--decoder/drc_src/impd_drc_api.c22
-rw-r--r--decoder/drc_src/impd_drc_api_struct_def.h4
-rw-r--r--decoder/drc_src/impd_drc_common.h2
-rw-r--r--decoder/drc_src/impd_drc_init.c88
-rw-r--r--decoder/drc_src/impd_drc_process.c3
-rw-r--r--decoder/ixheaacd_api.c2
-rw-r--r--decoder/ixheaacd_headerdecode.c8
7 files changed, 80 insertions, 49 deletions
diff --git a/decoder/drc_src/impd_drc_api.c b/decoder/drc_src/impd_drc_api.c
index 8077ba2..f7443e1 100644
--- a/decoder/drc_src/impd_drc_api.c
+++ b/decoder/drc_src/impd_drc_api.c
@@ -81,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*/ \
@@ -149,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);
@@ -205,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: {
@@ -369,6 +374,11 @@ 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_QMF64) {
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: {
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_common.h b/decoder/drc_src/impd_drc_common.h
index f450dcf..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
diff --git a/decoder/drc_src/impd_drc_init.c b/decoder/drc_src/impd_drc_init.c
index 4d96c38..3e0d622 100644
--- a/decoder/drc_src/impd_drc_init.c
+++ b/decoder/drc_src/impd_drc_init.c
@@ -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;
@@ -491,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_process.c b/decoder/drc_src/impd_drc_process.c
index 8000de2..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;
}
}
diff --git a/decoder/ixheaacd_api.c b/decoder/ixheaacd_api.c
index 38d773b..0cdf6e7 100644
--- a/decoder/ixheaacd_api.c
+++ b/decoder/ixheaacd_api.c
@@ -2461,7 +2461,7 @@ IA_ERRORCODE ixheaacd_dec_execute(
p_state_enhaacplus_dec,
(ia_sampling_rate_info_struct *)&p_obj_exhaacplus_dec->aac_tables
.pstr_huffmann_tables->str_sample_rate_info[0]);
- if (result < 0) return result;
+ if (result) return result;
if (!p_state_enhaacplus_dec->latm_initialized) {
p_state_enhaacplus_dec->sampling_rate =
p_state_enhaacplus_dec->latm_struct_element.layer_info[0][0]
diff --git a/decoder/ixheaacd_headerdecode.c b/decoder/ixheaacd_headerdecode.c
index e9b917c..2ee7201 100644
--- a/decoder/ixheaacd_headerdecode.c
+++ b/decoder/ixheaacd_headerdecode.c
@@ -488,6 +488,8 @@ WORD32 ixheaacd_ga_hdr_dec(ia_aac_dec_state_struct *aac_state_struct,
WORD32 tmp;
WORD32 cnt_bits = it_bit_buff->cnt_bits;
WORD32 dummy = 0;
+ UWORD32 aot_init;
+
ia_audio_specific_config_struct *pstr_audio_specific_config;
memset(aac_state_struct->ia_audio_specific_config, 0,
@@ -501,6 +503,8 @@ WORD32 ixheaacd_ga_hdr_dec(ia_aac_dec_state_struct *aac_state_struct,
aac_state_struct->p_config->str_prog_config.alignment_bits =
it_bit_buff->bit_pos;
+ aot_init = aac_state_struct->audio_object_type;
+
aac_state_struct->audio_object_type = ixheaacd_read_bits_buf(it_bit_buff, 5);
if (aac_state_struct->audio_object_type == 31) {
@@ -541,6 +545,10 @@ WORD32 ixheaacd_ga_hdr_dec(ia_aac_dec_state_struct *aac_state_struct,
ixheaacd_read_bits_buf(it_bit_buff, 5);
}
+ if (aac_state_struct->ui_init_done) {
+ if (aac_state_struct->audio_object_type != aot_init) return IA_FATAL_ERROR;
+ }
+
if (((aac_state_struct->audio_object_type >= AOT_AAC_MAIN &&
aac_state_struct->audio_object_type <= AOT_AAC_LTP) ||
aac_state_struct->audio_object_type == AOT_AAC_SCAL ||