xref: /aosp_15_r20/external/libxaac/encoder/ixheaace_sbr_frame_info_gen.h (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1 /******************************************************************************
2  *                                                                            *
3  * Copyright (C) 2023 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19  */
20 
21 #pragma once
22 
23 #define IXHEAACE_MAX_ENV_VARVAR (IXHEAACE_MAX_ENV)
24 #define IXHEAACE_MAX_ENV_FIXVAR_VARFIX (4)
25 #define IXHEAACE_MAX_NUM_REL (3)
26 #define IXHEAACE_MAX_ABS_BORDERS (9)
27 #define IXHEAACE_DC (4711)
28 #define IXHEAACE_EMPTY (-99)
29 #define TIME_SLOTS_15 (15)
30 #define NUM_ENVELOPE_1 (1)
31 #define NUM_ENVELOPE_2 (2)
32 #define NUM_ENVELOPE_4 (4)
33 
34 /* SBR frame class definitions */
35 typedef enum {
36   IXHEAACE_FIXFIX = 0,
37   IXHEAACE_FIXVAR,
38   IXHEAACE_VARFIX,
39   IXHEAACE_VARVAR
40 } ixheaace_frame_class;
41 
42 typedef struct {
43   ixheaace_frame_class frame_type;
44   WORD32 bs_num_env;
45   WORD32 bs_abs_bord;
46   WORD32 n;
47   WORD32 p;
48   WORD32 bs_rel_bord[IXHEAACE_MAX_NUM_REL];
49   ixheaace_freq_res v_f[IXHEAACE_MAX_ENV_FIXVAR_VARFIX];
50   WORD32 bs_abs_bord_0;
51   WORD32 bs_abs_bord_1;
52   WORD32 bs_num_rel_0;
53   WORD32 bs_num_rel_1;
54   WORD32 bs_rel_bord_0[IXHEAACE_MAX_NUM_REL];
55   WORD32 bs_rel_bord_1[IXHEAACE_MAX_NUM_REL];
56   ixheaace_freq_res v_f_lr[IXHEAACE_MAX_ENV_VARVAR];
57   WORD32 bs_transient_position;
58   WORD32 abs_bord_vec[IXHEAACE_MAX_ABS_BORDERS];
59 } ixheaace_str_sbr_grid;
60 
61 typedef ixheaace_str_sbr_grid *ixheaace_pstr_sbr_grid;
62 
63 typedef ixheaace_str_frame_info_sbr *ixheaace_pstr_sbr_frame_info;
64 
65 typedef struct {
66   WORD32 static_framing;
67   WORD32 num_env_static;
68   ixheaace_freq_res freq_res_fix;
69   WORD32 *ptr_v_tuning_segm;
70   WORD32 dmin;
71   WORD32 dmax;
72   WORD32 allow_spread;
73   ixheaace_frame_class frame_type_old;
74   WORD32 spread_flag;
75   WORD32 v_bord[2 * IXHEAACE_MAX_ENV_VARVAR + 1];
76   WORD32 length_v_bord;
77   ixheaace_freq_res v_freq[2 * IXHEAACE_MAX_ENV_VARVAR + 1];
78   WORD32 length_v_freq;
79   WORD32 v_bord_follow[IXHEAACE_MAX_ENV_VARVAR];
80   WORD32 length_v_bord_follow;
81   WORD32 i_tran_follow;
82   WORD32 i_fill_follow;
83   ixheaace_freq_res v_freq_follow[IXHEAACE_MAX_ENV_VARVAR];
84   WORD32 length_v_freq_follow;
85   ixheaace_str_sbr_grid sbr_grid;
86   ixheaace_str_frame_info_sbr sbr_frame_info;
87   WORD32 use_low_freq_res;
88 } ixheaace_str_sbr_env_frame;
89 
90 typedef ixheaace_str_sbr_env_frame *ixheaace_pstr_sbr_env_frame;
91 
92 VOID ixheaace_create_frame_info_generator(ixheaace_pstr_sbr_env_frame sbr_env_frame_handle,
93                                           WORD32 allow_spread, WORD32 num_env_static,
94                                           WORD32 static_framing, ixheaace_freq_res freq_res_fix,
95                                           WORD32 use_low_freq_res);
96 
97 IA_ERRORCODE
98 ixheaace_frame_info_generator(ixheaace_pstr_sbr_env_frame pstr_sbr_env_frame,
99                               WORD32 *ptr_v_pre_transient_info, WORD32 *ptr_v_transient_info,
100                               WORD32 *ptr_v_tuning, ixheaace_str_qmf_tabs *ptr_qmf_tab,
101                               WORD32 num_time_slots, WORD32 is_ld_sbr,
102                               ixheaace_pstr_sbr_frame_info *ptr_frame_info,
103                               WORD32 flag_framelength_small);
104