/******************************************************************************
 *                                                                            *
 * 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_PS_DEC_H
#define IXHEAACD_PS_DEC_H

#define MAX_NUM_COLUMNS 32
#define NUM_OF_QUAD_MIRROR_FILTER_CHNLS 64
#define NUM_OF_ALL_PASS_CHNLS 23
#define NUM_OF_DEL_CHNLS \
  (NUM_OF_QUAD_MIRROR_FILTER_CHNLS - NUM_OF_ALL_PASS_CHNLS)
#define DEL_ALL_PASS 2
#define SMALL_DEL_STRT 12
#define SMALL_DEL 1
#define HIGH_DEL 14
#define NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS \
  (NUM_OF_ALL_PASS_CHNLS - NO_QMF_CHANNELS_IN_HYBRID)
#define NUM_OF_QUAD_MIRROR_FILTER_ICC_CHNLS \
  (NUM_OF_QUAD_MIRROR_FILTER_ALL_PASS_CHNLS + NUM_OF_DEL_CHNLS)
#define PEAK_DECAYING_FACT 0x620a
#define NUM_SER_AP_LINKS 3
#define MAXIM_NUM_OF_PS_ENVLOPS 5
#define PSC_SQRT05F (0x5a82)
#define NUM_OF_BINS (20)
#define NUM_BANDS_FINE (34)

typedef WORD16((*REVERB_BUFFERS_RI)[NUM_SER_AP_LINKS])[32 * 2];
typedef WORD16((REVERB_BUFFERS_CH_RI[5])[NUM_SER_AP_LINKS])[16 * 2];

typedef struct {
  WORD16 (*delay_buf_qmf_ap_re_im)[32 * 2];

  WORD16 (*delay_buf_qmf_ld_re_im)[SMALL_DEL_STRT * 2];

  WORD16 (*delay_buf_qmf_sd_re_im)[2 * 32];

  WORD16 delay_buf_idx_ser[NUM_SER_AP_LINKS];
  WORD16 delay_sample_ser[NUM_SER_AP_LINKS];

  REVERB_BUFFERS_RI delay_buf_qmf_ser_re_im;
  WORD16 delay_buf_idx;
  WORD16 delay_buf_idx_long;

  WORD32 *peak_decay_diff;
  WORD32 *energy_prev;
  WORD32 *peak_decay_diff_prev;

  WORD32 *ptr_hyb_left_re;
  WORD32 *ptr_hyb_left_im;
  WORD32 *ptr_hyb_right_re;
  WORD32 *ptr_hyb_right_im;

  WORD16 delay_buf_qmf_sub_re_im[DEL_ALL_PASS][16 * 2];
  REVERB_BUFFERS_CH_RI delay_buf_qmf_sub_ser_re_im;

  WORD16 h11_h12_vec[2 * 24];
  WORD16 h21_h22_vec[2 * 24];

  WORD16 H11_H12[2 * 24];
  WORD16 H21_H22[2 * 24];

  WORD16 delta_h11_h12[2 * 24];
  WORD16 delta_h21_h22[2 * 24];

  FLAG force_mono;

  WORD16 delay_buffer_scale;
  WORD16 usb;

  WORD16 iid_par_prev[NUM_BANDS_FINE];
  WORD16 icc_par_prev[NUM_BANDS_FINE];

  FLAG ps_data_present;

  FLAG enable_iid;
  FLAG enable_icc;

  FLAG enable_ext;

  WORD16 iid_mode;
  WORD16 icc_mode;
  FLAG iid_quant;

  FLAG frame_class;
  WORD16 num_env;
  WORD16 border_position[MAXIM_NUM_OF_PS_ENVLOPS + 2];

  FLAG iid_dt[MAXIM_NUM_OF_PS_ENVLOPS];
  FLAG icc_dt[MAXIM_NUM_OF_PS_ENVLOPS];

  WORD16 iid_par_table[MAXIM_NUM_OF_PS_ENVLOPS + 2][NUM_BANDS_FINE];
  WORD16 icc_par_table[MAXIM_NUM_OF_PS_ENVLOPS + 2][NUM_BANDS_FINE];

  ia_hybrid_struct str_hybrid;
} ia_ps_dec_struct;

VOID ixheaacd_create_psdec(ia_ps_dec_struct *ptr_ps_dec,
                           VOID *sbr_persistent_mem, WORD32 *ptr_overlap_buf);

VOID ixheaacd_decorr_filter1_dec(ia_ps_dec_struct *ptr_ps_dec,
                                 ia_ps_tables_struct *ps_tables_ptr,
                                 WORD16 *transient_ratio);

VOID ixheaacd_decorr_filter1_armv7(ia_ps_dec_struct *ptr_ps_dec,
                                   ia_ps_tables_struct *ps_tables_ptr,
                                   WORD16 *transient_ratio);

VOID ixheaacd_decorr_filter2_dec(
    ia_ps_dec_struct *ptr_ps_dec, WORD32 *p_buf_left_real,
    WORD32 *p_buf_left_imag, WORD32 *p_buf_right_real, WORD32 *p_buf_right_imag,
    ia_ps_tables_struct *ps_tables_ptr, WORD16 *transient_ratio);

VOID ixheaacd_decorr_filter2_armv7(
    ia_ps_dec_struct *ptr_ps_dec, WORD32 *p_buf_left_real,
    WORD32 *p_buf_left_imag, WORD32 *p_buf_right_real, WORD32 *p_buf_right_imag,
    ia_ps_tables_struct *ps_tables_ptr, WORD16 *transient_ratio);

WORD32 ixheaacd_divide16_pos_dec(WORD32 op1, WORD32 op2);

WORD32 ixheaacd_divide16_pos_armv7(WORD32 op1, WORD32 op2);

VOID ixheaacd_decorrelation_dec(ia_ps_dec_struct *ptr_ps_dec,
                                WORD32 *p_buf_left_real,
                                WORD32 *p_buf_left_imag,
                                WORD32 *p_buf_right_real,
                                WORD32 *p_buf_right_imag,
                                ia_ps_tables_struct *ps_tables_ptr);

VOID ixheaacd_decorrelation_armv7(ia_ps_dec_struct *ptr_ps_dec,
                                  WORD32 *p_buf_left_real,
                                  WORD32 *p_buf_left_imag,
                                  WORD32 *p_buf_right_real,
                                  WORD32 *p_buf_right_imag,
                                  ia_ps_tables_struct *ps_tables_ptr);

VOID ixheaacd_init_ps_scale(ia_ps_dec_struct *ptr_ps_dec,
                            ia_sbr_scale_fact_struct *sbr_scale_factor);

VOID ixheaacd_init_rot_env(ia_ps_dec_struct *ptr_ps_dec, WORD16 env, WORD16 usb,
                           ia_sbr_tables_struct *sbr_tables_ptr,
                           const WORD16 *cos_sin_lookup_tab);

VOID ixheaacd_apply_ps(ia_ps_dec_struct *ptr_ps_dec, WORD32 **real_buf_left,
                       WORD32 **imag_buf_left, WORD32 *real_buf_right,
                       WORD32 *imag_buf_right,
                       ia_sbr_scale_fact_struct *sbr_scale_factor, WORD16 slot,
                       ia_sbr_tables_struct *sbr_tables_ptr);

VOID ixheaacd_apply_rot_dec(ia_ps_dec_struct *ptr_ps_dec, WORD32 *p_qmf_left_re,
                            WORD32 *p_qmf_left_im, WORD32 *p_qmf_right_re,
                            WORD32 *p_qmf_right_im,
                            ia_sbr_tables_struct *sbr_tables_ptr,
                            const WORD16 *ptr_res);

VOID ixheaacd_apply_rot_armv7(ia_ps_dec_struct *ptr_ps_dec,
                              WORD32 *qmf_left_real, WORD32 *qmf_left_imag,
                              WORD32 *qmf_right_real, WORD32 *qmf_right_imag,
                              ia_sbr_tables_struct *sbr_tables_ptr,
                              const WORD16 *ptr_resol);

VOID ixheaacd_scale_ps_states(ia_ps_dec_struct *ptr_ps_dec, WORD16 scale);

extern WORD16 ixheaacd_divideby2(WORD32 op);
extern WORD16 ixheaacd_divideby3(WORD32 op);

#endif
