220 lines
9.4 KiB
C
220 lines
9.4 KiB
C
/******************************************************************************
|
|
* *
|
|
* 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 IXHEAACD_QMF_DEC_H
|
|
#define IXHEAACD_QMF_DEC_H
|
|
|
|
typedef struct {
|
|
WORD32 no_channels;
|
|
const WORD16 *analy_win_coeff;
|
|
const WORD16 *p_filter;
|
|
const WORD16 *cos_twiddle;
|
|
const WORD16 *sin_twiddle;
|
|
const WORD16 *alt_sin_twiddle;
|
|
const WORD16 *t_cos;
|
|
const WORD16 *t_sin;
|
|
|
|
WORD16 *anal_filter_states;
|
|
WORD16 *filter_states;
|
|
WORD16 num_time_slots;
|
|
|
|
WORD16 lsb;
|
|
WORD16 usb;
|
|
|
|
WORD16 qmf_filter_state_size;
|
|
WORD16 *core_samples_buffer;
|
|
WORD16 ana_offset;
|
|
WORD16 *filter_pos;
|
|
WORD16 *dummy_0;
|
|
WORD16 ixheaacd_drc_offset;
|
|
WORD16 *filter_pos_syn;
|
|
WORD16 *dummy_1;
|
|
|
|
WORD32 *analy_win_coeff_32;
|
|
const WORD32 *p_filter_32;
|
|
const WORD32 *esbr_cos_twiddle;
|
|
const WORD32 *esbr_alt_sin_twiddle;
|
|
const WORD32 *esbr_t_cos;
|
|
WORD32 *anal_filter_states_32;
|
|
WORD32 *state_new_samples_pos_low_32;
|
|
WORD32 *filter_states_32;
|
|
WORD32 *filter_pos_32;
|
|
WORD32 *filter_pos_syn_32;
|
|
|
|
WORD16 *fp1_anal;
|
|
WORD16 *fp2_anal;
|
|
WORD16 *filter_2;
|
|
|
|
WORD16 *fp1_syn;
|
|
WORD16 *fp2_syn;
|
|
WORD16 sixty4;
|
|
|
|
} ia_sbr_qmf_filter_bank_struct;
|
|
|
|
VOID ixheaacd_cplx_anal_qmffilt(const WORD16 *time_inp,
|
|
ia_sbr_scale_fact_struct *sbr_scale_factor,
|
|
WORD32 **qmf_real, WORD32 **qmf_imag,
|
|
ia_sbr_qmf_filter_bank_struct *qmf_bank,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr,
|
|
WORD ch_fac, WORD32 low_pow_flag,
|
|
WORD audio_object_type);
|
|
|
|
VOID ixheaacd_cplx_synt_qmffilt(
|
|
WORD32 **qmf_real, WORD32 **qmf_im, WORD32 split_slot,
|
|
ia_sbr_scale_fact_struct *sbr_scale_factor, WORD16 *time_out,
|
|
ia_sbr_qmf_filter_bank_struct *qmf_bank, ia_ps_dec_struct *ptr_ps_dec,
|
|
FLAG active, FLAG low_pow_flag, ia_sbr_tables_struct *sbr_tables_ptr,
|
|
ixheaacd_misc_tables *pstr_common_tables, WORD ch_fac, FLAG drc_on,
|
|
WORD32 drc_sbr_factors[][64], WORD32 audio_object_type);
|
|
|
|
VOID ixheaacd_esbr_qmfanal32_winadd(WORD32 *inp1, WORD32 *inp2,
|
|
WORD32 *tmp_qmf_1, WORD32 *tmp_qmf_2,
|
|
WORD32 *out, WORD32 num_band);
|
|
|
|
VOID ixheaacd_esbr_fwd_modulation(const WORD32 *time_in, WORD32 *r_subband,
|
|
WORD32 *i_subband,
|
|
ia_sbr_qmf_filter_bank_struct *qmf_bank,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
|
|
|
|
VOID ixheaacd_esbr_inv_modulation(WORD32 *qmf_real,
|
|
ia_sbr_qmf_filter_bank_struct *syn_qmf,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
|
|
|
|
VOID ixheaacd_shiftrountine_with_rnd_hq(WORD32 *qmf_real, WORD32 *qmf_imag,
|
|
WORD32 *filter_states, WORD32 len,
|
|
WORD32 shift);
|
|
|
|
VOID ixheaacd_esbr_qmfsyn64_winadd(WORD32 *tmp1, WORD32 *tmp2, WORD32 *tmp3,
|
|
WORD32 *sample_buffer, WORD ch_fac);
|
|
|
|
VOID ixheaacd_sbr_qmfanal32_winadds(WORD16 *fp1, WORD16 *fp2, WORD16 *filter_1,
|
|
WORD16 *filter_2, WORD32 *analysis_buffer,
|
|
WORD16 *filter_states,
|
|
const WORD16 *time_sample_buf,
|
|
WORD32 ch_fac);
|
|
|
|
VOID ixheaacd_sbr_qmfanal32_winadds_eld(WORD16 *fp1, WORD16 *fp2,
|
|
WORD16 *filter_1, WORD16 *filter_2,
|
|
WORD32 *analysis_buffer,
|
|
WORD16 *filter_states,
|
|
const WORD16 *time_sample_buf,
|
|
WORD32 ch_fac);
|
|
|
|
VOID ixheaacd_fwd_modulation(const WORD32 *p_time_in1, WORD32 *real_subband,
|
|
WORD32 *imag_subband,
|
|
ia_sbr_qmf_filter_bank_struct *qmf_bank,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
|
|
VOID ixheaacd_dct3_32(WORD32 *input, WORD32 *output,
|
|
const WORD16 *main_twidle_fwd, const WORD16 *post_tbl,
|
|
const WORD16 *w_16, const WORD32 *p_table);
|
|
|
|
VOID ixheaacd_dec_DCT2_64_asm(WORD32 *dct_in, WORD32 *ptime_out, WORD32 *w1024,
|
|
UWORD8 *dig_rev_table2_128, WORD16 *post_fft_tbl,
|
|
WORD16 *dct23_tw, WORD16 *filter_states);
|
|
VOID ixheaacd_cos_sin_mod(WORD32 *subband,
|
|
ia_sbr_qmf_filter_bank_struct *qmf_bank,
|
|
WORD16 *p_twiddle, WORD32 *p_dig_rev_tbl);
|
|
VOID ixheaacd_shiftrountine(WORD32 *qmf_real, WORD32 *qmf_imag, WORD32 len,
|
|
WORD32 common_shift);
|
|
VOID ixheaacd_shiftrountine_with_rnd(WORD32 *qmf_real, WORD32 *qmf_imag,
|
|
WORD16 *filter_states, WORD32 len,
|
|
WORD32 shift);
|
|
|
|
VOID ixheaacd_radix4bfly(const WORD16 *w, WORD32 *x, WORD32 npoints,
|
|
WORD32 ch_fac);
|
|
|
|
VOID ixheaacd_postradixcompute4(WORD32 *ptr_y, WORD32 *ptr_x,
|
|
const WORD32 *p_dig_rev_tbl, WORD32 npoints);
|
|
|
|
VOID ixheaacd_postradixcompute2(WORD32 *ptr_y, WORD32 *ptr_x,
|
|
const WORD32 *p_dig_rev_tbl, WORD32 npoints);
|
|
|
|
VOID ixheaacd_shiftrountine_with_rnd_eld(WORD32 *qmf_real, WORD32 *qmf_imag,
|
|
WORD16 *filter_states, WORD32 len,
|
|
WORD32 shift);
|
|
|
|
void ixheaacd_sbr_imdct_using_fft(const WORD32 *ptr_w, WORD32 npoints,
|
|
WORD32 *ptr_x, WORD32 *ptr_y,
|
|
UWORD8 *bit_rev_1024, UWORD8 *bit_rev_512,
|
|
UWORD8 *bit_rev_128, UWORD8 *bit_rev_32);
|
|
|
|
VOID ixheaacd_esbr_cos_sin_mod_loop1(WORD32 *subband, WORD32 M,
|
|
const WORD32 *p_sin_cos,
|
|
WORD32 subband_tmp[]);
|
|
|
|
VOID ixheaacd_esbr_cos_sin_mod_loop2(WORD32 *subband, const WORD32 *p_sin,
|
|
WORD32 M);
|
|
|
|
VOID ixheaacd_esbr_radix4bfly(const WORD32 *p_twiddle, WORD32 subband_tmp[],
|
|
WORD32 a, WORD32 npoint);
|
|
|
|
VOID ixheaacd_radix4bfly(const WORD16 *w, WORD32 *x, WORD32 npoints,
|
|
WORD32 ch_fac);
|
|
|
|
VOID ixheaacd_postradixcompute4(WORD32 *ptr_y, WORD32 *ptr_x,
|
|
const WORD32 *p_dig_rev_tbl, WORD32 npoints);
|
|
|
|
VOID ixheaacd_postradixcompute2(WORD32 *ptr_y, WORD32 *ptr_x,
|
|
const WORD32 *p_dig_rev_tbl, WORD32 npoints);
|
|
|
|
VOID ixheaacd_cos_sin_mod_loop1(WORD32 *subband, WORD32 M,
|
|
const WORD16 *p_sin_cos, WORD32 subband_tmp[]);
|
|
|
|
VOID ixheaacd_cos_sin_mod_loop2(WORD32 *subband, const WORD16 *p_sin, WORD32 M);
|
|
|
|
VOID ixheaacd_sbr_qmfsyn64_winadd(WORD16 *tmp1, WORD16 *tmp2, WORD16 *inp1,
|
|
WORD16 *sample_buffer, FLAG shift,
|
|
WORD32 ch_fac);
|
|
|
|
VOID ixheaacd_esbr_cos_sin_mod(WORD32 *subband,
|
|
ia_sbr_qmf_filter_bank_struct *qmf_bank,
|
|
WORD32 *p_twiddle, WORD32 *p_dig_rev_tbl);
|
|
|
|
VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
|
|
ia_sbr_qmf_filter_bank_struct *syn_qmf,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
|
|
|
|
VOID ixheaacd_sbr_pre_twiddle(WORD32 *p_xre, WORD32 *p_xim, WORD16 *p_twiddles);
|
|
|
|
VOID ixheaacd_inv_emodulation(WORD32 *qmf_real,
|
|
ia_sbr_qmf_filter_bank_struct *syn_qmf,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
|
|
|
|
VOID ixheaacd_pretwdct2(WORD32 *inp, WORD32 *out_fwd);
|
|
|
|
VOID ixheaacd_sbr_qmfanal32_winadd_eld(WORD16 *inp1, WORD16 *inp2,
|
|
WORD16 *p_qmf1, WORD16 *p_qmf2,
|
|
WORD32 *p_out);
|
|
|
|
VOID ixheaacd_dct2_32(WORD32 *inp, WORD32 *out,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr,
|
|
WORD16 *filter_states);
|
|
|
|
VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
|
|
ia_sbr_qmf_filter_bank_struct *syn_qmf,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
|
|
|
|
VOID ixheaacd_fftposttw(WORD32 *out,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
|
|
|
|
VOID ixheaacd_posttwdct2(WORD32 *inp, WORD16 *out_fwd,
|
|
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
|
|
|
|
#endif
|