xref: /aosp_15_r20/external/libxaac/encoder/iusace_esbr_inter_tes.h (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker  *                                                                            *
3*15dc779aSAndroid Build Coastguard Worker  * Copyright (C) 2023 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker  *
5*15dc779aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker  *
9*15dc779aSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker  *
11*15dc779aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker  * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker  *
17*15dc779aSAndroid Build Coastguard Worker  *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker  */
20*15dc779aSAndroid Build Coastguard Worker 
21*15dc779aSAndroid Build Coastguard Worker #pragma once
22*15dc779aSAndroid Build Coastguard Worker 
23*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_ESBR_TES_ENERGY_MAX_THR (1.0e6f)
24*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_TIMESLOT_BUFFER_SIZE (78)
25*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_ENVELOPES (8)
26*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NOISE_ENVELOPES (2)
27*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NOISE_COEFFS (5)
28*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NUM_NOISE_VALUES (IXHEAACE_MAX_NOISE_ENVELOPES * IXHEAACE_MAX_NOISE_COEFFS)
29*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_FREQ_COEFFS (56)
30*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NUM_PATCHES (6)
31*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NUM_LIMITERS (12)
32*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAXDEG (3)
33*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SBR_HF_RELAXATION_PARAM (0.999999f)
34*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_ESBR_NUM_GAMMA_IDXS (4)
35*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_ESBR_HBE_DELAY_OFFSET (32)
36*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SBR_HF_ADJ_OFFSET (2)
37*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SBR_TES_SHAPE_BITS (1)
38*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SBR_TES_SHAPE_MODE_BITS (2)
39*15dc779aSAndroid Build Coastguard Worker 
40*15dc779aSAndroid Build Coastguard Worker typedef struct {
41*15dc779aSAndroid Build Coastguard Worker   FLOAT32 phi_0_1_real;
42*15dc779aSAndroid Build Coastguard Worker   FLOAT32 phi_0_1_imag;
43*15dc779aSAndroid Build Coastguard Worker   FLOAT32 phi_0_2_real;
44*15dc779aSAndroid Build Coastguard Worker   FLOAT32 phi_0_2_imag;
45*15dc779aSAndroid Build Coastguard Worker   FLOAT32 phi_1_1;
46*15dc779aSAndroid Build Coastguard Worker   FLOAT32 phi_1_2_real;
47*15dc779aSAndroid Build Coastguard Worker   FLOAT32 phi_1_2_imag;
48*15dc779aSAndroid Build Coastguard Worker   FLOAT32 phi_2_2;
49*15dc779aSAndroid Build Coastguard Worker   FLOAT32 det;
50*15dc779aSAndroid Build Coastguard Worker } ixheaace_str_auto_corr_ele;
51*15dc779aSAndroid Build Coastguard Worker 
52*15dc779aSAndroid Build Coastguard Worker typedef struct {
53*15dc779aSAndroid Build Coastguard Worker   WORD16 num_sf_bands[2];
54*15dc779aSAndroid Build Coastguard Worker   WORD16 num_nf_bands;
55*15dc779aSAndroid Build Coastguard Worker   WORD16 num_mf_bands;
56*15dc779aSAndroid Build Coastguard Worker   WORD16 sub_band_start;
57*15dc779aSAndroid Build Coastguard Worker   WORD16 sub_band_end;
58*15dc779aSAndroid Build Coastguard Worker   WORD16 freq_band_tbl_lim[IXHEAACE_MAX_NUM_LIMITERS + 1];
59*15dc779aSAndroid Build Coastguard Worker   WORD16 num_lf_bands;
60*15dc779aSAndroid Build Coastguard Worker   WORD16 num_if_bands;
61*15dc779aSAndroid Build Coastguard Worker   WORD16 *ptr_freq_band_tab[2];
62*15dc779aSAndroid Build Coastguard Worker   WORD16 freq_band_tbl_lo[IXHEAACE_MAX_FREQ_COEFFS / 2 + 1];
63*15dc779aSAndroid Build Coastguard Worker   WORD16 freq_band_tbl_hi[IXHEAACE_MAX_FREQ_COEFFS + 1];
64*15dc779aSAndroid Build Coastguard Worker   WORD16 freq_band_tbl_noise[IXHEAACE_MAX_NOISE_COEFFS + 1];
65*15dc779aSAndroid Build Coastguard Worker   WORD16 f_master_tbl[IXHEAACE_MAX_FREQ_COEFFS + 1];
66*15dc779aSAndroid Build Coastguard Worker   WORD16 qmf_sb_prev;
67*15dc779aSAndroid Build Coastguard Worker } ia_str_freq_band_data;
68*15dc779aSAndroid Build Coastguard Worker 
69*15dc779aSAndroid Build Coastguard Worker typedef struct {
70*15dc779aSAndroid Build Coastguard Worker   WORD16 frame_class;
71*15dc779aSAndroid Build Coastguard Worker   WORD16 num_env;
72*15dc779aSAndroid Build Coastguard Worker   WORD16 transient_env;
73*15dc779aSAndroid Build Coastguard Worker   WORD16 num_noise_env;
74*15dc779aSAndroid Build Coastguard Worker   WORD16 border_vec[IXHEAACE_MAX_ENVELOPES + 1];
75*15dc779aSAndroid Build Coastguard Worker   WORD16 freq_res[IXHEAACE_MAX_ENVELOPES];
76*15dc779aSAndroid Build Coastguard Worker   WORD16 noise_border_vec[IXHEAACE_MAX_NOISE_ENVELOPES + 1];
77*15dc779aSAndroid Build Coastguard Worker } ia_str_frame_info;
78*15dc779aSAndroid Build Coastguard Worker 
79*15dc779aSAndroid Build Coastguard Worker typedef struct {
80*15dc779aSAndroid Build Coastguard Worker   WORD32 num_if_bands;
81*15dc779aSAndroid Build Coastguard Worker   WORD32 sub_band_start;
82*15dc779aSAndroid Build Coastguard Worker   WORD32 sub_band_end;
83*15dc779aSAndroid Build Coastguard Worker   WORD32 num_mf_bands;
84*15dc779aSAndroid Build Coastguard Worker   WORD32 sbr_patching_mode;
85*15dc779aSAndroid Build Coastguard Worker   WORD32 pre_proc_flag;
86*15dc779aSAndroid Build Coastguard Worker   WORD32 is_usf_4;
87*15dc779aSAndroid Build Coastguard Worker   WORD32 hbe_flag;
88*15dc779aSAndroid Build Coastguard Worker   WORD32 out_fs;
89*15dc779aSAndroid Build Coastguard Worker   WORD32 num_env;
90*15dc779aSAndroid Build Coastguard Worker   WORD32 op_delay;
91*15dc779aSAndroid Build Coastguard Worker   WORD32 codec_delay;
92*15dc779aSAndroid Build Coastguard Worker   WORD32 sbr_ratio_index;
93*15dc779aSAndroid Build Coastguard Worker   WORD16 invf_band_tbl[MAXIMUM_NUM_NOISE_VALUES + 1];
94*15dc779aSAndroid Build Coastguard Worker   WORD16 f_master_tbl[MAXIMUM_FREQ_COEFFS + 1];
95*15dc779aSAndroid Build Coastguard Worker   WORD32 inv_filt_mode[MAXIMUM_NUM_NOISE_VALUES];
96*15dc779aSAndroid Build Coastguard Worker   WORD32 inv_filt_mode_prev[IXHEAACE_MAX_NUM_NOISE_VALUES];
97*15dc779aSAndroid Build Coastguard Worker   FLOAT32 bw_array_prev[IXHEAACE_MAX_NUM_PATCHES];
98*15dc779aSAndroid Build Coastguard Worker   WORD16 border_vec[IXHEAACE_MAX_ENV + 1];
99*15dc779aSAndroid Build Coastguard Worker   WORD32 bs_tes_shape[IXHEAACE_MAX_ENV + 1];
100*15dc779aSAndroid Build Coastguard Worker   WORD32 bs_tes_shape_mode[IXHEAACE_MAX_ENV + 1];
101*15dc779aSAndroid Build Coastguard Worker   FLOAT32 qmf_buf_real[IXHEAACE_TIMESLOT_BUFFER_SIZE + 2 * IXHEAACE_ESBR_HBE_DELAY_OFFSET]
102*15dc779aSAndroid Build Coastguard Worker                       [IXHEAACE_QMF_CHANNELS];
103*15dc779aSAndroid Build Coastguard Worker   FLOAT32 qmf_buf_imag[IXHEAACE_TIMESLOT_BUFFER_SIZE + 2 * IXHEAACE_ESBR_HBE_DELAY_OFFSET]
104*15dc779aSAndroid Build Coastguard Worker                       [IXHEAACE_QMF_CHANNELS];
105*15dc779aSAndroid Build Coastguard Worker } ixheaace_str_inter_tes_params;
106*15dc779aSAndroid Build Coastguard Worker 
107*15dc779aSAndroid Build Coastguard Worker typedef struct {
108*15dc779aSAndroid Build Coastguard Worker   FLOAT32 dst_qmf_r[IXHEAACE_TIMESLOT_BUFFER_SIZE][IXHEAACE_QMF_CHANNELS];
109*15dc779aSAndroid Build Coastguard Worker   FLOAT32 dst_qmf_i[IXHEAACE_TIMESLOT_BUFFER_SIZE][IXHEAACE_QMF_CHANNELS];
110*15dc779aSAndroid Build Coastguard Worker } ixheaace_str_inter_tes_scr;
111*15dc779aSAndroid Build Coastguard Worker 
112*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_init_esbr_inter_tes(ixheaace_str_inter_tes_params *pstr_tes_enc,
113*15dc779aSAndroid Build Coastguard Worker                                   WORD32 sbr_ratio_index);
114*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaace_process_inter_tes(ixheaace_str_inter_tes_params *pstr_tes_enc,
115*15dc779aSAndroid Build Coastguard Worker                                         WORD8 *ptr_scr);
116