/******************************************************************************
 *                                                                            *
 * 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_ENV_EXTR_H
#define IXHEAACD_ENV_EXTR_H
#include "ixheaacd_error_standards.h"
#define ENV_EXP_FRACT 0

#define EXP_BITS 6

#define MASK_M (((1 << (SHORT_BITS - EXP_BITS)) - 1) << EXP_BITS)
#define MASK_FOR_EXP ((1 << EXP_BITS) - 1)

#define SIGN_EXT (((WORD8)-1) ^ MASK_FOR_EXP)
#define ROUNDING (1 << (EXP_BITS - 1))
#define NRG_EXP_OFFSET 16
#define NOISE_EXP_OFFSET 38
#define MAX_QMF_SUB_BANDS 64

typedef const UWORD16 *ia_huffman_data_type;

#define COUPLING_OFF 0
#define COUPLING_LEVEL 1
#define COUPLING_BAL 2

#define MAX_INVF_BANDS MAX_NOISE_COEFFS

typedef struct {
  WORD16 sfb_nrg_prev[MAX_FREQ_COEFFS];
  WORD16 prev_noise_level[MAX_NOISE_COEFFS];
  WORD16 amp_res;
  WORD16 end_position;
  WORD32 max_qmf_subband_aac;
  WORD32 coupling_mode;
  WORD32 sbr_invf_mode[MAX_NUM_NOISE_VALUES];
} ia_sbr_prev_frame_data_struct;

typedef struct {
  WORD16 num_env_sfac;
  ia_frame_info_struct str_frame_info_details;
  WORD16 del_cod_dir_arr[MAX_ENVELOPES];
  WORD16 del_cod_dir_noise_arr[MAX_NOISE_ENVELOPES];
  WORD32 sbr_invf_mode[MAX_NUM_NOISE_VALUES];
  WORD32 coupling_mode;
  WORD16 amp_res;
  WORD32 max_qmf_subband_aac;
  FLAG add_harmonics[MAX_FREQ_COEFFS];
  WORD16 int_env_sf_arr[MAX_NUM_ENVELOPE_VALUES];
  WORD16 int_noise_floor[MAX_NUM_NOISE_VALUES];
  WORD32 num_noise_sfac;
  ia_frame_info_struct str_pvc_frame_info;
  WORD32 env_short_flag_prev;
  ia_sbr_header_data_struct *pstr_sbr_header;
  WORD32 num_time_slots;
  WORD32 rate;
  WORD32 sbr_patching_mode;
  WORD32 prev_sbr_patching_mode;
  WORD32 over_sampling_flag;
  WORD32 pitch_in_bins;
  WORD32 pvc_mode;

  WORD32 sbr_invf_mode_prev[MAX_NUM_NOISE_VALUES];
  FLOAT32 flt_env_sf_arr[MAX_NUM_ENVELOPE_VALUES];
  FLOAT32 flt_noise_floor[MAX_NUM_NOISE_VALUES];
  FLOAT32 sfb_nrg_prev[MAX_FREQ_COEFFS];
  FLOAT32 prev_noise_level[MAX_NUM_NOISE_VALUES];
  WORD32 inter_temp_shape_mode[MAX_ENVELOPES];
  WORD32 var_len;
  WORD32 bs_sin_pos_present;
  WORD32 sine_position;
  WORD32 sin_start_for_next_top;
  WORD32 sin_len_for_next_top;
  WORD32 sin_start_for_cur_top;
  WORD32 sin_len_for_cur_top;
  WORD32 var_len_id_prev;
  ia_frame_info_struct str_frame_info_prev;
  FLOAT32 bw_array_prev[MAX_NUM_PATCHES];
  struct ixheaacd_lpp_trans_patch patch_param;
  WORD32 harm_index;
  WORD32 phase_index;
  WORD8 harm_flag_prev[64];
  FLOAT32 e_gain[5][64];
  FLOAT32 noise_buf[5][64];
  WORD32 lim_table[4][12 + 1];
  WORD32 gate_mode[4];
  WORD8 harm_flag_varlen_prev[64];
  WORD8 harm_flag_varlen[64];
  FLOAT32 qmapped_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
  FLOAT32 env_tmp[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
  FLOAT32 noise_level_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
  FLOAT32 nrg_est_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
  FLOAT32 nrg_ref_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
  FLOAT32 nrg_gain_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
  FLOAT32 nrg_tone_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
  WORD32 stereo_config_idx;
  FLAG reset_flag;
  FLAG mps_sbr_flag;
  FLAG usac_independency_flag;
  FLAG inter_tes_flag;
  FLAG sbr_mode;
  FLAG prev_sbr_mode;
  WORD32 eld_sbr_flag;

} ia_sbr_frame_info_data_struct;

IA_ERRORCODE ixheaacd_sbr_read_sce(
    ia_sbr_header_data_struct *ptr_header_data,
    ia_sbr_frame_info_data_struct *ptr_frame_data, ia_ps_dec_struct *ptr_ps_dec,
    ia_bit_buf_struct *it_bit_buff, ia_sbr_tables_struct *ptr_sbr_tables,
    WORD audio_object_type);

IA_ERRORCODE ixheaacd_sbr_read_cpe(
    ia_sbr_header_data_struct *ptr_header_data,
    ia_sbr_frame_info_data_struct **ptr_frame_data,
    ia_bit_buf_struct *itt_bit_buf, ia_sbr_tables_struct *ptr_sbr_tables,
    WORD audio_object_type);

WORD32 ixheaacd_sbr_read_header_data(
    ia_sbr_header_data_struct *ptr_sbr_header, ia_bit_buf_struct *it_bit_buf,
    FLAG stereo_flag, ia_sbr_header_data_struct *ptr_sbr_dflt_header);

WORD32 ixheaacd_ssc_huff_dec(ia_huffman_data_type h,
                             ia_bit_buf_struct *it_bit_buff);

IA_ERRORCODE ixheaacd_extract_frame_info_ld(
    ia_bit_buf_struct *it_bit_buff,
    ia_sbr_frame_info_data_struct *h_frame_data);

WORD32 ixheaacd_pvc_time_freq_grid_info(
    ia_bit_buf_struct *it_bit_buff,
    ia_sbr_frame_info_data_struct *ptr_frame_data);

WORD16 ixheaacd_sbr_time_freq_grid_info(
    ia_bit_buf_struct *it_bit_buff,
    ia_sbr_frame_info_data_struct *ptr_frame_data,
    ia_env_extr_tables_struct *env_extr_tables_ptr);

WORD16 ixheaacd_read_sbr_env_data(
    ia_sbr_header_data_struct *ptr_header_data,
    ia_sbr_frame_info_data_struct *ptr_frame_data,
    ia_bit_buf_struct *it_bit_buff,
    ia_env_extr_tables_struct *env_extr_tables_ptr, WORD audio_object_type);

VOID ixheaacd_sbr_env_dtdf_data(ia_sbr_frame_info_data_struct *ptr_frame_data,
                                ia_bit_buf_struct *it_bit_buff,
                                WORD32 usac_flag);

VOID ixheaacd_read_sbr_noise_floor_data(
    ia_sbr_header_data_struct *ptr_header_data,
    ia_sbr_frame_info_data_struct *ptr_frame_data,
    ia_bit_buf_struct *it_bit_buff,
    ia_env_extr_tables_struct *env_extr_tables_ptr);

VOID ixheaacd_huffman_decode(WORD32 it_bit_buff, WORD16 *h_index, WORD16 *len,
                             const UWORD16 *input_table,
                             const UWORD32 *idx_table);

IA_ERRORCODE ixheaacd_createlimiterbands(
    WORD32 lim_table[4][12 + 1], WORD32 gate_mode[4], WORD16 *freq_band_tbl,
    WORD32 ixheaacd_num_bands, WORD32 x_over_qmf[MAX_NUM_PATCHES],
    WORD32 b_patching_mode, WORD32 upsamp_4_flag,
    struct ixheaacd_lpp_trans_patch *patch_param);

VOID ixheaacd_apply_inter_tes(FLOAT32 *qmf_real1, FLOAT32 *qmf_imag1,
                              FLOAT32 *qmf_real, FLOAT32 *qmf_imag,
                              WORD32 num_sample, WORD32 sub_band_start,
                              WORD32 num_subband, WORD32 gamma_idx);

#endif
