diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-03 02:14:59 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-03 02:14:59 +0000 |
commit | 8888415ea75c36972ce369e49eee76cf68907a04 (patch) | |
tree | 2d0d1ff8c40533ca8d29d9e1f6a7ec3d938819ed | |
parent | 982fd6871593905b3f7ef460a48388a5dcf933e6 (diff) | |
parent | 45895b998add7dea8f6f9d24c4c7b5a2b5569a47 (diff) | |
download | libxaac-8888415ea75c36972ce369e49eee76cf68907a04.tar.gz |
Snap for 6360479 from 45895b998add7dea8f6f9d24c4c7b5a2b5569a47 to rvc-release
Change-Id: I03fcdf4d80c185717ba0d3eff70d1f70e7ef578a
-rw-r--r-- | decoder/drc_src/impd_drc_api.c | 22 | ||||
-rw-r--r-- | decoder/drc_src/impd_drc_api_struct_def.h | 4 | ||||
-rw-r--r-- | decoder/drc_src/impd_drc_common.h | 2 | ||||
-rw-r--r-- | decoder/drc_src/impd_drc_init.c | 88 | ||||
-rw-r--r-- | decoder/drc_src/impd_drc_process.c | 3 | ||||
-rw-r--r-- | decoder/ixheaacd_api.c | 2 | ||||
-rw-r--r-- | decoder/ixheaacd_headerdecode.c | 8 |
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 || |