/******************************************************************************
 *                                                                            *
 * 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_CHANNELINFO_H
#define IXHEAACD_CHANNELINFO_H

#include "ixheaacd_lt_predict.h"

#define MAX_SFB_SHORT 16
#define MAX_QUANTIZED_VALUE 8191

#define OVERLAP_BUFFER_SIZE 512

#define JOINT_STEREO_MAX_GROUPS 8
#define JOINT_STEREO_MAX_BANDS 64

typedef struct {
  WORD16 window_shape;
  WORD16 window_sequence;
  WORD16 max_sfb;
  WORD16 num_swb_window;
  WORD16 sampling_rate_index;
  WORD16 num_window_groups;
  WORD8 window_group_length[8];
  WORD16 frame_length;
  WORD32 frame_size;
  WORD16 predictor_data_present;
  ltp_info ltp;
  ltp_info ltp2;
} ia_ics_info_struct;

typedef struct {
  WORD32 aac_sect_data_resil_flag;
  WORD32 aac_sf_data_resil_flag;
  WORD32 aac_spect_data_resil_flag;
  WORD32 ep_config;
} ia_aac_err_config_struct;

typedef struct {
  WORD32 ld_sbr_flag_present;
  WORD32 ld_sbr_samp_rate;
  WORD32 ld_sbr_crc_flag;
  WORD32 ldSbrHeaderPresent;

  WORD32 aac_sect_data_resil_flag;
  WORD32 aac_sf_data_resil_flag;
  WORD32 aac_spect_data_resil_flag;
  WORD32 ep_config;

} ia_eld_specific_config_struct;

typedef struct {
  UWORD8 ms_used[JOINT_STEREO_MAX_GROUPS][JOINT_STEREO_MAX_BANDS];
} ia_stereo_info_struct;

typedef struct {
  WORD16 start_band;
  WORD16 stop_band;
  WORD8 direction;
  WORD8 resolution;
  WORD8 order;
  WORD8 coef[MAX_ORDER];
} ia_filter_info_struct;

typedef struct {
  FLAG tns_data_present;
  WORD8 n_filt[MAX_WINDOWS];
  ia_filter_info_struct str_filter[MAX_WINDOWS][MAX_FILTERS];
} ia_tns_info_aac_struct;

typedef struct {
  const WORD16 *ptr_long_window[2];
  const WORD16 *ptr_short_window[2];
  WORD16 window_shape;
  WORD16 window_sequence;
  WORD32 *ptr_overlap_buf;

  WORD16 rvlc_prev_sf[128];
  WORD16 rvlc_prev_cb[128];
  WORD8 rvlc_prev_blk_type;
  WORD8 rvlc_prev_sf_ok;

} ia_aac_dec_overlap_info;

typedef struct {
  WORD32 sf_concealment;
  WORD32 rev_global_gain;
  WORD16 rvlc_sf_len;
  WORD32 dpcm_noise_nrg;
  WORD32 sf_esc_present;
  WORD16 rvlc_esc_len;
  WORD32 dpcm_noise_last_pos;

  WORD32 dpcm_is_last_pos;

  WORD16 rvlc_sf_fwd_len;
  WORD16 rvlc_sf_bwd_len;

  WORD16 *ptr_rvl_bit_cnt;
  UWORD16 *ptr_rvl_bit_str_idx;

  WORD16 num_wind_grps;
  WORD16 max_sfb_transmitted;
  UWORD8 first_noise_group;
  UWORD8 first_noise_band;
  UWORD8 direction;

  UWORD16 rvl_fwd_bit_str_idx;
  UWORD16 rvl_bwd_bit_str_idx;
  UWORD16 esc_bit_str_idx;

  const UWORD32 *ptr_huff_tree_rvl_cw;
  const UWORD32 *ptr_huff_tree_rvl_esc;

  UWORD8 num_fwd_esc_words_decoded;
  UWORD8 num_bwd_esc_words_decoded;
  UWORD8 num_esc_words_decoded;

  WORD8 noise_used;
  WORD8 intensity_used;
  WORD8 sf_used;

  WORD16 firt_scale_fac;
  WORD16 last_scale_fac;
  WORD16 first_nrg;
  WORD16 last_nrg;
  WORD16 is_first;
  WORD16 is_last;

  UWORD32 rvlc_err_log;
  WORD16 conceal_min;
  WORD16 conceal_max;
  WORD16 conceal_min_esc;
  WORD16 conceal_max_esc;
} ia_rvlc_info_struct;

#define LINES_PER_UNIT 4

#define MAX_SFB_HCR (((1024 / 8) / LINES_PER_UNIT) * 8)
#define NUMBER_OF_UNIT_GROUPS (LINES_PER_UNIT * 8)
#define LINES_PER_UNIT_GROUP (1024 / NUMBER_OF_UNIT_GROUPS)

#define FROM_LEFT_TO_RIGHT 0
#define FROM_RIGHT_TO_LEFT 1

#define MAX_CB_PAIRS 23
#define MAX_HCR_SETS 14

#define ESCAPE_VALUE 16
#define POSITION_OF_FLAG_A 21
#define POSITION_OF_FLAG_B 20

#define MAX_CB 32

#define MAX_CB_CHECK 32
#define WORD_BITS 32

#define THIRTYTWO_LOG_DIV_TWO_LOG 5
#define EIGHT_LOG_DIV_TWO_LOG 3
#define FOUR_LOG_DIV_TWO_LOG 2

#define CPE_TOP_LENGTH 12288
#define SCE_TOP_LENGTH 6144
#define LEN_OF_LONGEST_CW_TOP_LENGTH 49
#define Q_VALUE_INVALID 8192
#define NODE_MASK 0x400

#define ERROR_POS 0x00000001
#define HCR_FATAL_PCW_ERROR_MASK 0x100E01FC

typedef enum { PCW, PCW_SIGN, PCW_ESC_SIGN } ia_pcw_type_struct;

typedef struct {
  UWORD32 err_log;
  WORD32 *ptr_quant_spec_coeff_base;
  WORD32 quant_spec_coeff_idx;
  WORD16 reordered_spec_data_len;
  WORD16 num_sect;
  WORD16 *ptr_num_line_in_sect;
  UWORD16 bit_str_idx;
  WORD8 longest_cw_len;
  UWORD8 *ptr_cb;
} ia_huff_code_reorder_io_struct;

typedef struct {
  const UWORD8 *ptr_min_cb_pair_tbl;
  const UWORD8 *ptr_max_cb_pair_tbl;
} ia_huff_code_reorder_cb_pairs_struct;

typedef struct {
  const UWORD16 *ptr_lav_tbl;
  const UWORD8 *ptr_max_cw_len_tbl;
  const UWORD8 *ptr_cb_dimension_tbl;
  const UWORD8 *ptr_cb_dim_shift_tbl;
  const UWORD8 *ptr_cb_sign_tbl;
  const UWORD8 *ptr_cb_priority;
} ia_huff_code_reorder_tbl_struct;

typedef struct {
  WORD32 num_segment;
  UWORD32 segment_offset;
  WORD32 arr_temp_values[1024];
  UWORD16 arr_seg_start_l[1024 >> 1];
  UWORD16 arr_seg_start_r[1024 >> 1];
  WORD8 p_remaining_bits_in_seg[1024 >> 1];
  WORD32 code[512];
  WORD32 code_extra[512];
  WORD8 p_num_bits[512];
  UWORD8 read_direction;
  WORD32 is_decoded[512];
} ia_huff_code_reord_seg_info_struct;

typedef struct {
  UWORD32 num_code_word;
  UWORD32 current_codeword;
  UWORD32 num_sorted_section;
  UWORD16 ptr_num_cw_in_sect[MAX_SFB_HCR];
  UWORD16 ptr_num_sorted_cw_in_sect[MAX_SFB_HCR];
  UWORD16 ptr_num_ext_sorted_cw_in_sect[MAX_SFB_HCR + MAX_HCR_SETS];
  WORD32 num_ext_sorted_cw_in_sect_idx;
  UWORD16 ptr_num_ext_sorted_sect_in_sets[MAX_HCR_SETS];
  WORD32 num_ext_sorted_sect_in_sets_idx;
  UWORD16 ptr_reorder_offset[MAX_SFB_HCR];
  UWORD8 ptr_sorted_cb[MAX_SFB_HCR];

  UWORD8 ptr_ext_sorted_cw[MAX_SFB_HCR + MAX_HCR_SETS];
  WORD32 ext_sorted_cw_idx;
  UWORD8 ptr_ext_sorted_sect_max_cb_len[MAX_SFB_HCR + MAX_HCR_SETS];
  WORD32 ext_sorted_sect_max_cb_len_idx;
  UWORD8 ptr_cb_switch[MAX_SFB_HCR];
} ia_huff_code_reord_sect_info_struct;

typedef UWORD32 (*ixheaacd_ptr_state_func)(ia_bit_buf_struct *, pVOID);

typedef struct {
  WORD32 *ptr_result_base;
  UWORD16 res_ptr_idx[1024 >> 2];
  UWORD32 cw_offset;
  UWORD8 ptr_cb[1024 >> 2];
} ia_hcr_non_pcw_sideinfo_struct;

typedef struct {
  ia_huff_code_reorder_io_struct str_dec_io;
  ia_huff_code_reorder_cb_pairs_struct codebook_pairs;
  ia_huff_code_reorder_tbl_struct table_info;
  ia_huff_code_reord_seg_info_struct str_segment_info;
  ia_huff_code_reord_sect_info_struct sect_info;
  ia_hcr_non_pcw_sideinfo_struct str_non_pcw_side_info;

  WORD32 global_hcr_type;
} ia_hcr_info_struct;

typedef struct {
  WORD16 scale_factor[MAX_WINDOWS * MAX_SFB_SHORT];
  WORD8 code_book[MAX_WINDOWS * MAX_SFB_SHORT];
} ia_aac_sfb_code_book_struct;

typedef struct {
  ia_stereo_info_struct str_stereo_info;
  ia_pns_correlation_info_struct str_pns_corr_info;
} ia_pns_stereo_data_struct;

typedef struct {
  WORD16 win_shape;
  WORD16 win_seq;

  WORD32 *ptr_overlap_buf;

} ia_aac_dec_ola_data;

typedef struct {
  const WORD16 *ptr_long_window[2];
  const WORD16 *ptr_short_window[2];

  ia_aac_dec_ola_data overlap_add_data;

  WORD16 *ltp_buf;
  UWORD16 ltp_lag;

} ia_aac_dec_channel_info;

typedef struct {
  WORD16 *ptr_scale_factor;
  WORD8 *ptr_code_book;
  WORD32 *ptr_spec_coeff;
  ia_stereo_info_struct *pstr_stereo_info;
  ia_pns_correlation_info_struct *pstr_pns_corr_info;
  ia_pns_rand_vec_struct *pstr_pns_rand_vec_data;
  ia_ics_info_struct str_ics_info;
  ia_tns_info_aac_struct str_tns_info;
  ia_pulse_info_struct str_pulse_info;
  ia_pns_info_struct str_pns_info;
  WORD16 common_window;
  WORD16 element_instance_tag;
  WORD16 global_gain;
  WORD32 *scratch_buf_ptr;
  WORD32 *pulse_scratch;
  ia_rvlc_info_struct ptr_rvlc_info;
  ia_hcr_info_struct str_hcr_info;
  WORD16 reorder_spect_data_len;
  WORD8 longest_cw_len;
  WORD16 rvlc_scf_esc_arr[128];
  WORD16 rvlc_scf_fwd_arr[128];
  WORD16 rvlc_scf_bwd_arr[128];
  WORD8 rvlc_intensity_used;
  WORD16 num_line_in_sec4_hcr_arr[32 * 8];
  UWORD8 cb4_hcr_arr[32 * 8];
  WORD32 number_sect;
  WORD32 granule_len;
  WORD16 rvlc_curr_sf_flag;
  WORD16 *ltp_buf;
  UWORD16 ltp_lag;
} ia_aac_dec_channel_info_struct;
WORD16 ixheaacd_ics_read(ia_bit_buf_struct *it_bit_buff,
                         ia_ics_info_struct *ptr_ics_info,
                         WORD8 num_swb_window[2], WORD32 object_type,
                         WORD32 common_window, WORD32 frame_size);

IA_ERRORCODE ixheaacd_ltp_decode(ia_bit_buf_struct *it_bit_buff,
                                 ia_ics_info_struct *ptr_ics_info,
                                 WORD32 object_type, WORD32 frame_size,
                                 WORD32 ch);

#endif /* #ifndef IXHEAACD_CHANNELINFO_H */
