DO NOT MERGE - Merge pie-platform-release (PPRL.181205.001) into stage-aosp-master

Bug: 120502534
Change-Id: Ic060fc0959d95a05cef008104c252ebb5b343559
This commit is contained in:
Xin Li 2018-12-10 10:04:55 -08:00
commit e72e3e2fe7
19 changed files with 144 additions and 66 deletions

5
README.experimental Normal file
View file

@ -0,0 +1,5 @@
This xaac codec (external/xaac) is experimental; it is not yet intended
to be used on production devices.
This codec should not be configured into any production Android Pie
(Android 9) device that will be shipped.

View file

@ -558,6 +558,10 @@ WORD32 impd_parse_drc_ext_v1(ia_bit_buf_struct* it_bit_buff,
if (it_bit_buff->error) return it_bit_buff->error;
if (drc_coeffs_and_instructions_uni_drc_v1_flag == 1) {
drc_coefficients_uni_drc_v1_count = impd_read_bits_buf(it_bit_buff, 3);
if ((drc_coefficients_uni_drc_v1_count +
drc_config->drc_coefficients_drc_count) > DRC_COEFF_COUNT_MAX) {
return (UNEXPECTED_ERROR);
}
if (it_bit_buff->error) return it_bit_buff->error;
for (i = 0; i < drc_coefficients_uni_drc_v1_count; i++) {
err = impd_drc_parse_coeff(
@ -587,6 +591,10 @@ 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;
for (i = 0; i < str_drc_config_ext->loud_eq_instructions_count; i++) {
err = impd_parse_loud_eq_instructions(
@ -605,6 +613,8 @@ WORD32 impd_parse_drc_ext_v1(ia_bit_buf_struct* it_bit_buff,
if (err) return (err);
str_drc_config_ext->eq_instructions_count =
impd_read_bits_buf(it_bit_buff, 4);
if (str_drc_config_ext->eq_instructions_count > EQ_INSTRUCTIONS_COUNT_MAX)
return UNEXPECTED_ERROR;
if (it_bit_buff->error) return it_bit_buff->error;
for (i = 0; i < str_drc_config_ext->eq_instructions_count; i++) {
err = impd_parse_eq_instructions(
@ -625,7 +635,8 @@ WORD32 impd_parse_filt_block(ia_bit_buf_struct* it_bit_buff,
for (j = 0; j < block_count; j++) {
str_filter_block->filter_element_count = impd_read_bits_buf(it_bit_buff, 6);
if (it_bit_buff->error) return it_bit_buff->error;
if (str_filter_block->filter_element_count > FILTER_ELEMENT_COUNT_MAX)
return UNEXPECTED_ERROR;
str_filter_element = &str_filter_block->str_filter_element[0];
for (k = 0; k < str_filter_block->filter_element_count; k++) {
temp = impd_read_bits_buf(it_bit_buff, 7);
@ -923,6 +934,10 @@ WORD32 impd_parse_eq_coefficients(ia_bit_buf_struct* it_bit_buff,
str_eq_coeff->unique_filter_block_count = impd_read_bits_buf(it_bit_buff, 6);
if (it_bit_buff->error) return it_bit_buff->error;
if (str_eq_coeff->unique_filter_block_count > FILTER_BLOCK_COUNT_MAX) {
return (UNEXPECTED_ERROR);
}
err = impd_parse_filt_block(it_bit_buff, &(str_eq_coeff->str_filter_block[0]),
str_eq_coeff->unique_filter_block_count);
if (err) return (err);
@ -1276,7 +1291,8 @@ WORD32 impd_parse_loud_eq_instructions(
if (additional_eq_set_id_present) {
additional_eq_set_id_cnt = impd_read_bits_buf(it_bit_buff, 6);
if (it_bit_buff->error) return it_bit_buff->error;
if (additional_eq_set_id_cnt >= EQ_SET_ID_COUNT_MAX)
return UNEXPECTED_ERROR;
for (i = 0; i < additional_eq_set_id_cnt; i++) {
loud_eq_instructions->eq_set_id[i + 1] =
impd_read_bits_buf(it_bit_buff, 6);

View file

@ -148,25 +148,25 @@ IA_ERRORCODE impd_init_drc_decode_post_config(
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
.buf_interpolation_count = drc_instruction_str->gain_element_count;
for (i = 0;
i < p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
i < p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
.buf_interpolation_count;
i++) {
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
.buf_interpolation[i]
.str_node.time = 0;
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
.buf_interpolation[i]
.prev_node.time = -1;
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
.buf_interpolation[i]
.str_node.loc_db_gain = 0.0f;
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
.buf_interpolation[i]
.str_node.slope = 0.0f;
for (j = 0; j < 2 * AUDIO_CODEC_FRAME_SIZE_MAX + MAX_SIGNAL_DELAY;
j++) {
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
.buf_interpolation[i]
.lpcm_gains[j] = 1.f;
}

View file

@ -548,6 +548,10 @@ static WORD32 impd_parametic_drc_parse_coeff(
str_drc_coeff_param_drc->reset_parametric_drc = (temp >> 6) & 1;
str_drc_coeff_param_drc->parametric_drc_gain_set_count = temp & 0x3f;
if (str_drc_coeff_param_drc->parametric_drc_gain_set_count >
SEQUENCE_COUNT_MAX)
return (UNEXPECTED_ERROR);
for (i = 0; i < str_drc_coeff_param_drc->parametric_drc_gain_set_count; i++) {
err = impd_parametric_drc_parse_gain_set_params(
it_bit_buff, drc_config,
@ -910,6 +914,10 @@ impd_parse_drc_config_ext(ia_bit_buf_struct* it_bit_buff,
str_drc_config_ext->parametric_drc_instructions_count =
impd_read_bits_buf(it_bit_buff, 4);
if (it_bit_buff->error) return it_bit_buff->error;
if (str_drc_config_ext->parametric_drc_instructions_count >
PARAM_DRC_INSTRUCTIONS_COUNT_MAX)
return (UNEXPECTED_ERROR);
for (i = 0; i < str_drc_config_ext->parametric_drc_instructions_count;
i++) {
err = impd_parse_parametric_drc_instructions(
@ -1120,6 +1128,9 @@ impd_parse_drc_config(ia_bit_buf_struct* it_bit_buff,
if (it_bit_buff->error) return it_bit_buff->error;
drc_config->dwnmix_instructions_count = (temp >> 1) & 0x7f;
if (drc_config->dwnmix_instructions_count > DOWNMIX_INSTRUCTION_COUNT_MAX)
return (UNEXPECTED_ERROR);
drc_config->drc_description_basic_present = temp & 1;
if (drc_config->drc_description_basic_present == 1) {
@ -1692,6 +1703,11 @@ impd_drc_parse_coeff(
str_p_loc_drc_coefficients_uni_drc->characteristic_left_count =
impd_read_bits_buf(it_bit_buff, 4);
if (it_bit_buff->error) return it_bit_buff->error;
if (str_p_loc_drc_coefficients_uni_drc->characteristic_left_count >
SPLIT_CHARACTERISTIC_COUNT_MAX)
return (UNEXPECTED_ERROR);
for (i = 1;
i <= str_p_loc_drc_coefficients_uni_drc->characteristic_left_count;
i++) {
@ -1709,6 +1725,10 @@ impd_drc_parse_coeff(
str_p_loc_drc_coefficients_uni_drc->characteristic_right_count =
impd_read_bits_buf(it_bit_buff, 4);
if (it_bit_buff->error) return it_bit_buff->error;
if (str_p_loc_drc_coefficients_uni_drc->characteristic_right_count >
SPLIT_CHARACTERISTIC_COUNT_MAX)
return (UNEXPECTED_ERROR);
for (i = 1;
i <= str_p_loc_drc_coefficients_uni_drc->characteristic_right_count;
i++) {
@ -2376,4 +2396,4 @@ impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff, WORD32 version,
}
return (0);
}
}

View file

@ -347,7 +347,8 @@ WORD32 ixheaacd_aacdec_decodeframe(
prev_data_ele_present = 1;
if (ptr_adts_crc_info->crc_active == 1) {
if (ptr_adts_crc_info->crc_active == 1 &&
ptr_adts_crc_info->no_reg < 7) {
crc_reg = ixheaacd_adts_crc_start_reg(
ptr_adts_crc_info, it_bit_buff, CRC_ADTS_RAW_DATA_BLK_LEN);
}
@ -485,7 +486,8 @@ WORD32 ixheaacd_aacdec_decodeframe(
{
WORD32 flag = 1;
if ((ele_type != ID_FIL) && (ptr_adts_crc_info->crc_active == 1)) {
if ((ele_type != ID_FIL) && (ptr_adts_crc_info->crc_active == 1) &&
(ptr_adts_crc_info->no_reg < 7)) {
crc_reg =
ixheaacd_adts_crc_start_reg(ptr_adts_crc_info, it_bit_buff, 0);
}
@ -586,7 +588,8 @@ WORD32 ixheaacd_aacdec_decodeframe(
prev_data_ele_present = 1;
if (ptr_adts_crc_info->crc_active == 1) {
if ((ptr_adts_crc_info->crc_active == 1) &&
(ptr_adts_crc_info->no_reg < 7)) {
crc_reg = ixheaacd_adts_crc_start_reg(
ptr_adts_crc_info, it_bit_buff, CRC_ADTS_RAW_DATA_BLK_LEN);
}

View file

@ -2424,7 +2424,11 @@ IA_ERRORCODE ixheaacd_dec_execute(
(WORD8 *)p_state_enhaacplus_dec->aac_scratch_mem_v + (8 * 1024) +
pers_used;
}
actual_out_buffer = p_state_enhaacplus_dec->coup_ch_output;
if (p_obj_exhaacplus_dec->aac_config.element_type[1] < 3 &&
p_obj_exhaacplus_dec->aac_config.element_type[1] > 0 &&
p_obj_exhaacplus_dec->aac_config.ui_max_channels > 2) {
actual_out_buffer = p_state_enhaacplus_dec->coup_ch_output;
}
ch_fac = 1;
slot_ele = 0;
}

View file

@ -460,7 +460,8 @@ WORD16 ixheaacd_individual_ch_stream(
ia_ics_info_struct *ptr_ics_info = &ptr_aac_dec_ch_info->str_ics_info;
if (ch == 1) {
if (it_bit_buff->pstr_adts_crc_info->crc_active == 1) {
if (it_bit_buff->pstr_adts_crc_info->crc_active == 1 &&
(it_bit_buff->pstr_adts_crc_info->no_reg < 7)) {
crc_reg =
ixheaacd_adts_crc_start_reg(it_bit_buff->pstr_adts_crc_info,
it_bit_buff, CRC_ADTS_RAW_IIND_ICS);

View file

@ -108,6 +108,7 @@
#define MAX_SHORT_WINDOWS 8
#define MAX_NUM_CHANNELS 6
#define MAX_NUM_CHANNELS_USAC_LVL2 2
#define SFB_NUM_MAX ((NSFB_SHORT + 1) * MAX_SHORT_IN_LONG_BLOCK)

View file

@ -1328,8 +1328,7 @@ int ixheaacd_extract_frame_info_ld(
WORD16 time_border[MAX_ENVELOPES + 1];
WORD16 time_border_noise[2 + 1];
WORD16 f[MAX_ENVELOPES + 1];
int rel_bord_lead[3];
int rel_bord_trail[3] = {0};
int rel_bord_lead[7] ={0};
ia_frame_info_struct *v_frame_info = &h_frame_data->str_frame_info_details;
@ -1382,11 +1381,6 @@ int ixheaacd_extract_frame_info_ld(
time_border[env] = abs_bord_lead;
for (k = 0; k <= env - 1; k++) time_border[env] += rel_bord_lead[k];
}
for (env = num_rel_lead + 1; env < bs_num_env; env++) {
time_border[env] = abs_bord_trail;
for (k = 0; k <= bs_num_env - env - 1; k++)
time_border[env] -= rel_bord_trail[k];
}
break;
case LD_TRAN:

View file

@ -606,7 +606,7 @@ WORD32 ixheaacd_ga_hdr_dec(ia_aac_dec_state_struct *aac_state_struct,
err = ixheaacd_config(it_bit_buff,
&(pstr_audio_specific_config->str_usac_config),
&(pstr_audio_specific_config->channel_configuration));
if (err != 0) return -1;
if (err != 0) return err;
if (pstr_audio_specific_config->audio_object_type == AOT_USAC) {
pstr_audio_specific_config->sbr_present_flag = 1;

View file

@ -63,6 +63,8 @@
#include "ixheaacd_struct.h"
#include "ixheaacd_constants.h"
#include "ixheaacd_error_codes.h"
UWORD32 ixheaacd_sbr_ratio(UWORD32 core_sbr_framelength_idx) {
UWORD32 sbr_ratio_index = 0x0FF;
@ -517,7 +519,7 @@ WORD32 ixheaacd_config(ia_bit_buf_struct *it_bit_buff,
(UWORD32 *)(&(pstr_usac_conf->num_out_channels)),
5, 8, 16);
if (BS_MAX_NUM_OUT_CHANNELS < pstr_usac_conf->num_out_channels) {
return -1;
return IA_ENHAACPLUS_DEC_INIT_FATAL_STREAM_CHAN_GT_MAX;
}
for (i = 0; i < pstr_usac_conf->num_out_channels; i++)
pstr_usac_conf->output_channel_pos[i] =

View file

@ -662,7 +662,7 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
win_ovadd_op =
ixheaacd_add32(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
ixheaacd_add32_sat(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
*out_samples = ixheaacd_round16(ixheaacd_shl32_sat(win_ovadd_op, 1));
out_samples += stride;
@ -672,7 +672,7 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
win_ovadd_op =
ixheaacd_add32(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
ixheaacd_add32_sat(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
*out_samples = ixheaacd_round16(ixheaacd_shl32_sat(win_ovadd_op, 1));
out_samples += stride;
@ -681,7 +681,7 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
win_ovadd_op =
ixheaacd_add32(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
ixheaacd_add32_sat(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
*out_samples = ixheaacd_round16(ixheaacd_shl32_sat(win_ovadd_op, 1));
out_samples += stride;
@ -691,7 +691,7 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
win_ovadd_op =
ixheaacd_add32(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
ixheaacd_add32_sat(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
*out_samples = ixheaacd_round16(ixheaacd_shl32_sat(win_ovadd_op, 1));
out_samples += stride;
@ -705,19 +705,23 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
WORD16 win_val;
win_val = *p_win++;
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
*p_out2++ = ixheaacd_add32(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
*p_out2++ =
ixheaacd_add32_sat(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
win_val = *p_win++;
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
*p_out2++ = ixheaacd_add32(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
*p_out2++ =
ixheaacd_add32_sat(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
win_val = *p_win++;
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
*p_out2++ = ixheaacd_add32(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
*p_out2++ =
ixheaacd_add32_sat(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
win_val = *p_win++;
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
*p_out2++ = ixheaacd_add32(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
*p_out2++ =
ixheaacd_add32_sat(ixheaacd_shl32(win_op, q_shift), *ptr_out++);
}
loop_size = ((((framesize << 2) - delay) - (framesize * 3)) >> 2) - 1;
@ -753,7 +757,7 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
win_ovadd_op =
ixheaacd_add32(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
ixheaacd_add32_sat(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
*out_samples = ixheaacd_round16(ixheaacd_shl32(win_ovadd_op, 1));
out_samples += stride;
@ -762,7 +766,7 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
win_ovadd_op =
ixheaacd_add32(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
ixheaacd_add32_sat(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
*out_samples = ixheaacd_round16(ixheaacd_shl32(win_ovadd_op, 1));
out_samples += stride;
@ -771,7 +775,7 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
win_ovadd_op =
ixheaacd_add32(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
ixheaacd_add32_sat(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
*out_samples = ixheaacd_round16(ixheaacd_shl32(win_ovadd_op, 1));
out_samples += stride;
@ -780,7 +784,7 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
win_ovadd_op =
ixheaacd_add32(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
ixheaacd_add32_sat(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
*out_samples = ixheaacd_round16(ixheaacd_shl32(win_ovadd_op, 1));
out_samples += stride;
@ -794,19 +798,23 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
WORD16 win_val;
win_val = *p_win++;
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
*p_out2++ = ixheaacd_add32(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
*p_out2++ =
ixheaacd_add32_sat(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
win_val = *p_win++;
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
*p_out2++ = ixheaacd_add32(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
*p_out2++ =
ixheaacd_add32_sat(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
win_val = *p_win++;
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
*p_out2++ = ixheaacd_add32(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
*p_out2++ =
ixheaacd_add32_sat(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
win_val = *p_win++;
win_op = ixheaacd_mult32x16in32(*ptr_z++, (win_val));
*p_out2++ = ixheaacd_add32(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
*p_out2++ =
ixheaacd_add32_sat(ixheaacd_shr32(win_op, q_shift), *ptr_out++);
}
loop_size = ((((framesize << 2) - delay) - (framesize * 3)) >> 2) - 1;
for (i = loop_size; i >= 0; i--) {

View file

@ -308,11 +308,13 @@ WORD32 ixheaacd_mps_apply(ia_mps_dec_state_struct* self,
ixheaacd_mps_pre_matrix_mix_matrix_smoothing(self);
ixheaacd_mps_apply_pre_matrix(self);
err = ixheaacd_mps_apply_pre_matrix(self);
if (err < 0) return err;
ixheaacd_mps_create_w(self);
ixheaacd_mps_apply_mix_matrix(self);
err = ixheaacd_mps_apply_mix_matrix(self);
if (err < 0) return err;
if (self->config->bs_temp_shape_config == 2) {
ixheaacd_mps_time_env_shaping(self);

View file

@ -339,8 +339,8 @@ typedef struct ia_mps_dec_state_struct {
VOID ixheaacd_mps_init_pre_and_post_matrix(ia_mps_dec_state_struct *self);
VOID ixheaacd_pre_and_mix_matrix_calculation(ia_mps_dec_state_struct *self);
VOID ixheaacd_mps_apply_pre_matrix(ia_mps_dec_state_struct *self);
VOID ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self);
WORD32 ixheaacd_mps_apply_pre_matrix(ia_mps_dec_state_struct *self);
WORD32 ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self);
VOID ixheaacd_mps_config(ia_mps_dec_state_struct *self, WORD32 frame_len,
WORD32 residual_coding,
@ -371,7 +371,7 @@ VOID ixheaacd_mps_par2umx_pred(ia_mps_dec_state_struct *self,
WORD32 *h_real, WORD32 param_set_idx,
WORD32 res_bands);
VOID ixheaacd_mps_upmix_interp(
WORD32 ixheaacd_mps_upmix_interp(
WORD32 m_matrix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
[MAX_M_INPUT],
WORD32 r_matrix[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]

View file

@ -348,15 +348,17 @@ VOID ixheaacd_mps_par2umx_pred(ia_mps_dec_state_struct *self,
}
}
VOID ixheaacd_mps_apply_pre_matrix(ia_mps_dec_state_struct *self) {
WORD32 ixheaacd_mps_apply_pre_matrix(ia_mps_dec_state_struct *self) {
WORD32 ts, qs, row, col = 0;
ixheaacd_mps_upmix_interp(
WORD32 err = 0;
err = ixheaacd_mps_upmix_interp(
self->m1_param_re, self->r_out_re_scratch_m1, self->m1_param_re_prev,
(self->dir_sig_count + self->decor_sig_count), 1, self);
ixheaacd_mps_upmix_interp(
if (err < 0) return err;
err = ixheaacd_mps_upmix_interp(
self->m1_param_im, self->r_out_im_scratch_m1, self->m1_param_im_prev,
(self->dir_sig_count + self->decor_sig_count), 1, self);
if (err < 0) return err;
ixheaacd_fix_to_float_int(
(WORD32 *)(self->r_out_re_scratch_m1), (FLOAT32 *)(self->r_out_re_in_m1),
@ -417,19 +419,22 @@ VOID ixheaacd_mps_apply_pre_matrix(ia_mps_dec_state_struct *self) {
}
}
}
return 0;
}
VOID ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self) {
WORD32 ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self) {
WORD32 ts, qs, row, col;
WORD32 complex_m2 = ((self->config->bs_phase_coding != 0));
WORD32 phase_interpolation = (self->config->bs_phase_coding == 1);
ixheaacd_mps_upmix_interp(
WORD32 err = 0;
err = ixheaacd_mps_upmix_interp(
self->m2_decor_re, self->r_diff_out_re_fix_in_m2, self->m2_decor_re_prev,
self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self);
ixheaacd_mps_upmix_interp(
if (err < 0) return err;
err = ixheaacd_mps_upmix_interp(
self->m2_resid_re, self->r_out_re_fix_in_m2, self->m2_resid_re_prev,
self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self);
if (err < 0) return err;
ixheaacd_fix_to_float_int(
(WORD32 *)self->r_out_re_fix_in_m2, (FLOAT32 *)self->r_out_re_in_m2,
MAX_TIME_SLOTS * MAX_PARAMETER_BANDS * MAX_M_OUTPUT * MAX_M_INPUT,
@ -441,14 +446,16 @@ VOID ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self) {
268435456);
if (complex_m2 && !phase_interpolation) {
ixheaacd_mps_upmix_interp(self->m2_decor_im, self->r_diff_out_im_fix_in_m2,
self->m2_decor_im_prev, self->out_ch_count,
(self->dir_sig_count + self->decor_sig_count),
self);
ixheaacd_mps_upmix_interp(self->m2_resid_im, self->r_out_im_fix_in_m2,
self->m2_resid_im_prev, self->out_ch_count,
(self->dir_sig_count + self->decor_sig_count),
self);
err = ixheaacd_mps_upmix_interp(
self->m2_decor_im, self->r_diff_out_im_fix_in_m2,
self->m2_decor_im_prev, self->out_ch_count,
(self->dir_sig_count + self->decor_sig_count), self);
if (err < 0) return err;
err = ixheaacd_mps_upmix_interp(
self->m2_resid_im, self->r_out_im_fix_in_m2, self->m2_resid_im_prev,
self->out_ch_count, (self->dir_sig_count + self->decor_sig_count),
self);
if (err < 0) return err;
ixheaacd_fix_to_float_int(
(WORD32 *)self->r_diff_out_im_fix_in_m2,
(FLOAT32 *)self->r_out_diff_im_in_m2,
@ -569,6 +576,7 @@ VOID ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self) {
}
}
}
return 0;
}
static PLATFORM_INLINE WORD32 ixheaacd_mult32_shl2(WORD32 a, WORD32 b) {
@ -581,7 +589,7 @@ static PLATFORM_INLINE WORD32 ixheaacd_mult32_shl2(WORD32 a, WORD32 b) {
return (result);
}
VOID ixheaacd_mps_upmix_interp(
WORD32 ixheaacd_mps_upmix_interp(
WORD32 m_matrix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
[MAX_M_INPUT],
WORD32 r_matrix[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
@ -595,6 +603,7 @@ VOID ixheaacd_mps_upmix_interp(
for (col = 0; col < num_cols; col++) {
ps = 0;
ts = 0;
if (MAX_TIME_SLOTS < (self->param_slot_diff[0])) return -1;
for (i = 1; i <= (WORD32)self->param_slot_diff[0]; i++) {
WORD32 alpha = i * self->inv_param_slot_diff_Q30[ps];
WORD32 one_minus_alpha = 1073741824 - alpha;
@ -606,6 +615,7 @@ VOID ixheaacd_mps_upmix_interp(
}
for (ps = 1; ps < self->num_parameter_sets; ps++) {
if (MAX_TIME_SLOTS < (ts + self->param_slot_diff[ps])) return -1;
for (i = 1; i <= (WORD32)self->param_slot_diff[ps]; i++) {
WORD32 alpha = i * self->inv_param_slot_diff_Q30[ps];
WORD32 one_minus_alpha = 1073741824 - alpha;
@ -619,6 +629,7 @@ VOID ixheaacd_mps_upmix_interp(
}
}
}
return 0;
}
static FLOAT32 ixheaacd_mps_angle_interpolation(FLOAT32 angle1, FLOAT32 angle2,

View file

@ -354,10 +354,11 @@ VOID ixheaacd_aac_tns_process(
scale_spec = (*ixheaacd_calc_max_spectral_line)(ptr_tmp, size);
}
if (filter->direction == -1) {
position = stop - 1;
} else {
if (filter->direction != -1) {
position = start;
} else {
position = stop - 1;
if (((win << 7) + position) < filter->order) continue;
}
if ((num_ch <= 2) &&

View file

@ -316,7 +316,7 @@ WORD32 ixheaacd_usac_process(ia_dec_data_struct *pstr_dec_data,
nr_core_coder_channels = 1;
core_data_extracting:
if (ch_offset >= MAX_NUM_CHANNELS) return -1;
if (ch_offset >= MAX_NUM_CHANNELS_USAC_LVL2) return -1;
err = ixheaacd_core_coder_data(ele_id, pstr_usac_data, elem_idx,
&ch_offset, it_bit_buff,
nr_core_coder_channels);

View file

@ -223,7 +223,7 @@ static const int ixheaacd_ld_env_table_480[15][4] = {
{2, 12, -1, 1}, {2, 13, -1, 1}, {2, 14, -1, 1},
};
static const int ixheaacd_ld_env_table_time_slot[4] = {8, 5, 0, 0};
static const int ixheaacd_ld_env_table_time_slot[7] = {8, 5, 0, 0, 0, 0, 0};
#define SBR_CLA_BITS 2
#define SBR_ABS_BITS 2

View file

@ -1576,6 +1576,16 @@ int ixheaacd_main_process(WORD32 argc, pWORD8 argv[]) {
if (raw_testing) {
ixheaacd_i_bytes_to_read =
get_metadata_dec_exec(meta_info, frame_counter);
if (ixheaacd_i_bytes_to_read <= 0) {
err_code = (*p_ia_process_api)(pv_ia_process_api_obj,
IA_API_CMD_INPUT_OVER, 0, NULL);
_IA_HANDLE_ERROR(p_proc_err_info, (pWORD8) "", err_code);
return IA_NO_ERROR;
}
err_code =
(*p_ia_process_api)(pv_ia_process_api_obj, IA_API_CMD_SET_INPUT_BYTES,
0, &ixheaacd_i_bytes_to_read);