xref: /aosp_15_r20/external/libldac/src/ldac.h (revision aef9bcd9217ad2365ebc8e70efaf94b64e04df14)
1*aef9bcd9SKiyoung Kim /*
2*aef9bcd9SKiyoung Kim  * Copyright (C) 2003 - 2016 Sony Corporation
3*aef9bcd9SKiyoung Kim  *
4*aef9bcd9SKiyoung Kim  * Licensed under the Apache License, Version 2.0 (the "License");
5*aef9bcd9SKiyoung Kim  * you may not use this file except in compliance with the License.
6*aef9bcd9SKiyoung Kim  * You may obtain a copy of the License at
7*aef9bcd9SKiyoung Kim  *
8*aef9bcd9SKiyoung Kim  *      http://www.apache.org/licenses/LICENSE-2.0
9*aef9bcd9SKiyoung Kim  *
10*aef9bcd9SKiyoung Kim  * Unless required by applicable law or agreed to in writing, software
11*aef9bcd9SKiyoung Kim  * distributed under the License is distributed on an "AS IS" BASIS,
12*aef9bcd9SKiyoung Kim  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*aef9bcd9SKiyoung Kim  * See the License for the specific language governing permissions and
14*aef9bcd9SKiyoung Kim  * limitations under the License.
15*aef9bcd9SKiyoung Kim  */
16*aef9bcd9SKiyoung Kim 
17*aef9bcd9SKiyoung Kim #ifndef _LDAC_H
18*aef9bcd9SKiyoung Kim #define _LDAC_H
19*aef9bcd9SKiyoung Kim 
20*aef9bcd9SKiyoung Kim #include "ldaclib.h"
21*aef9bcd9SKiyoung Kim #include "struct_ldac.h"
22*aef9bcd9SKiyoung Kim 
23*aef9bcd9SKiyoung Kim 
24*aef9bcd9SKiyoung Kim 
25*aef9bcd9SKiyoung Kim 
26*aef9bcd9SKiyoung Kim 
27*aef9bcd9SKiyoung Kim /***************************************************************************************************
28*aef9bcd9SKiyoung Kim     Macro Definitions
29*aef9bcd9SKiyoung Kim ***************************************************************************************************/
30*aef9bcd9SKiyoung Kim /* Configuration */
31*aef9bcd9SKiyoung Kim #define LDAC_SYNCWORDBITS      8
32*aef9bcd9SKiyoung Kim #define LDAC_SYNCWORD       0xAA
33*aef9bcd9SKiyoung Kim /** Sampling Rate **/
34*aef9bcd9SKiyoung Kim #define LDAC_SMPLRATEBITS      3
35*aef9bcd9SKiyoung Kim #define LDAC_NSMPLRATEID       6
36*aef9bcd9SKiyoung Kim #define LDAC_NSUPSMPLRATEID    4
37*aef9bcd9SKiyoung Kim #define LDAC_SMPLRATEID_0    0x0
38*aef9bcd9SKiyoung Kim #define LDAC_SMPLRATEID_1    0x1
39*aef9bcd9SKiyoung Kim #define LDAC_SMPLRATEID_2    0x2
40*aef9bcd9SKiyoung Kim #define LDAC_SMPLRATEID_3    0x3
41*aef9bcd9SKiyoung Kim /** Channel **/
42*aef9bcd9SKiyoung Kim #define LDAC_CHCONFIG1BITS     3
43*aef9bcd9SKiyoung Kim #define LDAC_CHCONFIG2BITS     2
44*aef9bcd9SKiyoung Kim #define LDAC_NCHCONFIGID       8
45*aef9bcd9SKiyoung Kim #define LDAC_MAXNCH            2
46*aef9bcd9SKiyoung Kim #define LDAC_CHANNEL_1CH       1
47*aef9bcd9SKiyoung Kim #define LDAC_CHANNEL_2CH       2
48*aef9bcd9SKiyoung Kim #define LDAC_CHCONFIGID_MN     0
49*aef9bcd9SKiyoung Kim #define LDAC_CHCONFIGID_DL     1
50*aef9bcd9SKiyoung Kim #define LDAC_CHCONFIGID_ST     2
51*aef9bcd9SKiyoung Kim /** Frame Length **/
52*aef9bcd9SKiyoung Kim #define LDAC_FRAMELEN1BITS    11
53*aef9bcd9SKiyoung Kim #define LDAC_FRAMELEN2BITS     9
54*aef9bcd9SKiyoung Kim #define LDAC_MAXNBYTES      1024
55*aef9bcd9SKiyoung Kim #define LDAC_MAXSUPNBYTES    512
56*aef9bcd9SKiyoung Kim #define LDAC_MINSUPNBYTES     22
57*aef9bcd9SKiyoung Kim /** Frame Status **/
58*aef9bcd9SKiyoung Kim #define LDAC_FRAMESTATBITS     2
59*aef9bcd9SKiyoung Kim #define LDAC_FRMSTAT_LEV_0     0
60*aef9bcd9SKiyoung Kim #define LDAC_FRMSTAT_LEV_1     1
61*aef9bcd9SKiyoung Kim #define LDAC_FRMSTAT_LEV_2     2
62*aef9bcd9SKiyoung Kim #define LDAC_FRMSTAT_LEV_3     3
63*aef9bcd9SKiyoung Kim /** Other **/
64*aef9bcd9SKiyoung Kim #define LDAC_RESERVE1BITS      2
65*aef9bcd9SKiyoung Kim #define LDAC_RESERVE2BITS      5
66*aef9bcd9SKiyoung Kim #define LDAC_DUMMYCODE      0x00
67*aef9bcd9SKiyoung Kim 
68*aef9bcd9SKiyoung Kim /* Signal Processing */
69*aef9bcd9SKiyoung Kim #define LDAC_NFRAME            2
70*aef9bcd9SKiyoung Kim #define LDAC_NSFTSTEP          5
71*aef9bcd9SKiyoung Kim /** Frame Samples (log base 2 of) **/
72*aef9bcd9SKiyoung Kim #define LDAC_NUMLNN            2
73*aef9bcd9SKiyoung Kim #define LDAC_MAXLNN            8
74*aef9bcd9SKiyoung Kim #define LDAC_2FSLNN            8
75*aef9bcd9SKiyoung Kim #define LDAC_1FSLNN            7
76*aef9bcd9SKiyoung Kim /** Frame Samples **/
77*aef9bcd9SKiyoung Kim #define LDAC_MAXLSU (1<<LDAC_MAXLNN)
78*aef9bcd9SKiyoung Kim #define LDAC_2FSLSU (1<<LDAC_2FSLNN)
79*aef9bcd9SKiyoung Kim #define LDAC_1FSLSU (1<<LDAC_1FSLNN)
80*aef9bcd9SKiyoung Kim /** Band **/
81*aef9bcd9SKiyoung Kim #define LDAC_MAXNBANDS        16
82*aef9bcd9SKiyoung Kim #define LDAC_2FSNBANDS        16
83*aef9bcd9SKiyoung Kim #define LDAC_1FSNBANDS        12
84*aef9bcd9SKiyoung Kim /** QU **/
85*aef9bcd9SKiyoung Kim #define LDAC_MAXGRADQU        50
86*aef9bcd9SKiyoung Kim #define LDAC_MAXNQUS          34
87*aef9bcd9SKiyoung Kim #define LDAC_2FSNQUS          34
88*aef9bcd9SKiyoung Kim #define LDAC_1FSNQUS          26
89*aef9bcd9SKiyoung Kim #define LDAC_MAXNSPS          16
90*aef9bcd9SKiyoung Kim /** Frame Status Analysis **/
91*aef9bcd9SKiyoung Kim #define LDAC_NSP_PSEUDOANA   128
92*aef9bcd9SKiyoung Kim #define LDAC_NSP_LOWENERGY    12
93*aef9bcd9SKiyoung Kim #define LDAC_TH_ZCROSNUM      90
94*aef9bcd9SKiyoung Kim #define LDAC_MAXCNT_FRMANA    10
95*aef9bcd9SKiyoung Kim 
96*aef9bcd9SKiyoung Kim /* Stream Syntax */
97*aef9bcd9SKiyoung Kim #define LDAC_BLKID_MONO        0
98*aef9bcd9SKiyoung Kim #define LDAC_BLKID_STEREO      1
99*aef9bcd9SKiyoung Kim #define LDAC_FILLCODE       0x01
100*aef9bcd9SKiyoung Kim /** Band Info **/
101*aef9bcd9SKiyoung Kim #define LDAC_NBANDBITS         4
102*aef9bcd9SKiyoung Kim #define LDAC_BAND_OFFSET       2
103*aef9bcd9SKiyoung Kim /** Gradient Data **/
104*aef9bcd9SKiyoung Kim #define LDAC_GRADMODEBITS      2
105*aef9bcd9SKiyoung Kim #define LDAC_GRADOSBITS        5
106*aef9bcd9SKiyoung Kim #define LDAC_MAXGRADOS        31
107*aef9bcd9SKiyoung Kim #define LDAC_DEFGRADOSH       31
108*aef9bcd9SKiyoung Kim #define LDAC_GRADQU0BITS       6
109*aef9bcd9SKiyoung Kim #define LDAC_GRADQU1BITS       5
110*aef9bcd9SKiyoung Kim #define LDAC_DEFGRADQUH       26
111*aef9bcd9SKiyoung Kim #define LDAC_NADJQUBITS        5
112*aef9bcd9SKiyoung Kim #define LDAC_MAXNADJQUS       32
113*aef9bcd9SKiyoung Kim /** Scale Factor Data **/
114*aef9bcd9SKiyoung Kim #define LDAC_IDSFBITS          5
115*aef9bcd9SKiyoung Kim #define LDAC_NIDSF            32
116*aef9bcd9SKiyoung Kim #define LDAC_SFCMODEBITS       1
117*aef9bcd9SKiyoung Kim #define LDAC_NSFCMODE          2
118*aef9bcd9SKiyoung Kim #define LDAC_SFCWTBLBITS       3
119*aef9bcd9SKiyoung Kim #define LDAC_NSFCWTBL          8
120*aef9bcd9SKiyoung Kim #define LDAC_SFCBLENBITS       2
121*aef9bcd9SKiyoung Kim #define LDAC_MINSFCBLEN_0      3
122*aef9bcd9SKiyoung Kim #define LDAC_MAXSFCBLEN_0      6
123*aef9bcd9SKiyoung Kim #define LDAC_MINSFCBLEN_1      2
124*aef9bcd9SKiyoung Kim #define LDAC_MAXSFCBLEN_1      5
125*aef9bcd9SKiyoung Kim #define LDAC_MINSFCBLEN_2      2
126*aef9bcd9SKiyoung Kim #define LDAC_MAXSFCBLEN_2      5
127*aef9bcd9SKiyoung Kim /** Spectrum/Residual Data **/
128*aef9bcd9SKiyoung Kim #define LDAC_NIDWL            16
129*aef9bcd9SKiyoung Kim #define LDAC_MINIDWL1          1
130*aef9bcd9SKiyoung Kim #define LDAC_MAXIDWL1         15
131*aef9bcd9SKiyoung Kim #define LDAC_MAXIDWL2         15
132*aef9bcd9SKiyoung Kim #define LDAC_2DIMSPECBITS      3
133*aef9bcd9SKiyoung Kim #define LDAC_N2DIMSPECENCTBL  16
134*aef9bcd9SKiyoung Kim #define LDAC_N2DIMSPECDECTBL   8
135*aef9bcd9SKiyoung Kim #define LDAC_4DIMSPECBITS      7
136*aef9bcd9SKiyoung Kim #define LDAC_N4DIMSPECENCTBL 256
137*aef9bcd9SKiyoung Kim #define LDAC_N4DIMSPECDECTBL  81
138*aef9bcd9SKiyoung Kim /** Bit Operation **/
139*aef9bcd9SKiyoung Kim #define LDAC_LOC_SHIFT         3
140*aef9bcd9SKiyoung Kim #define LDAC_LOC_MASK        0x7
141*aef9bcd9SKiyoung Kim #define LDAC_BYTESIZE          8
142*aef9bcd9SKiyoung Kim #define LDAC_MAXBITNUM      8192
143*aef9bcd9SKiyoung Kim 
144*aef9bcd9SKiyoung Kim /* Flag */
145*aef9bcd9SKiyoung Kim #define LDAC_FLAGBITS          1
146*aef9bcd9SKiyoung Kim #define LDAC_TRUE              1
147*aef9bcd9SKiyoung Kim #define LDAC_FALSE             0
148*aef9bcd9SKiyoung Kim 
149*aef9bcd9SKiyoung Kim /* Mode */
150*aef9bcd9SKiyoung Kim #define LDAC_MODE_0            0
151*aef9bcd9SKiyoung Kim #define LDAC_MODE_1            1
152*aef9bcd9SKiyoung Kim #define LDAC_MODE_2            2
153*aef9bcd9SKiyoung Kim #define LDAC_MODE_3            3
154*aef9bcd9SKiyoung Kim 
155*aef9bcd9SKiyoung Kim /***************************************************************************************************
156*aef9bcd9SKiyoung Kim     Structure Definitions
157*aef9bcd9SKiyoung Kim ***************************************************************************************************/
158*aef9bcd9SKiyoung Kim typedef struct _sfinfo_ldac SFINFO;
159*aef9bcd9SKiyoung Kim typedef struct _config_info_ldac CFG;
160*aef9bcd9SKiyoung Kim typedef struct _audio_block_ldac AB;
161*aef9bcd9SKiyoung Kim typedef struct _audio_channel_ldac AC;
162*aef9bcd9SKiyoung Kim typedef struct _audio_channel_sub_ldac ACSUB;
163*aef9bcd9SKiyoung Kim 
164*aef9bcd9SKiyoung Kim /* Configuration Information Structure */
165*aef9bcd9SKiyoung Kim struct _config_info_ldac {
166*aef9bcd9SKiyoung Kim     int syncword;
167*aef9bcd9SKiyoung Kim     int smplrate_id;
168*aef9bcd9SKiyoung Kim     int chconfig_id;
169*aef9bcd9SKiyoung Kim     int ch;
170*aef9bcd9SKiyoung Kim     int frame_length;
171*aef9bcd9SKiyoung Kim     int frame_status;
172*aef9bcd9SKiyoung Kim };
173*aef9bcd9SKiyoung Kim 
174*aef9bcd9SKiyoung Kim /* Audio Channel (AC) Sub Structure */
175*aef9bcd9SKiyoung Kim #ifndef _32BIT_FIXED_POINT
176*aef9bcd9SKiyoung Kim struct _audio_channel_sub_ldac {
177*aef9bcd9SKiyoung Kim     SCALAR a_time[LDAC_MAXLSU*LDAC_NFRAME];
178*aef9bcd9SKiyoung Kim     SCALAR a_spec[LDAC_MAXLSU];
179*aef9bcd9SKiyoung Kim };
180*aef9bcd9SKiyoung Kim #else /* _32BIT_FIXED_POINT */
181*aef9bcd9SKiyoung Kim struct _audio_channel_sub_ldac {
182*aef9bcd9SKiyoung Kim     INT32 a_time[LDAC_MAXLSU*LDAC_NFRAME];
183*aef9bcd9SKiyoung Kim     INT32 a_spec[LDAC_MAXLSU];
184*aef9bcd9SKiyoung Kim };
185*aef9bcd9SKiyoung Kim #endif /* _32BIT_FIXED_POINT */
186*aef9bcd9SKiyoung Kim 
187*aef9bcd9SKiyoung Kim /* Audio Channel (AC) Structure */
188*aef9bcd9SKiyoung Kim struct _audio_channel_ldac {
189*aef9bcd9SKiyoung Kim     int ich;
190*aef9bcd9SKiyoung Kim     int frmana_cnt;
191*aef9bcd9SKiyoung Kim     int sfc_mode;
192*aef9bcd9SKiyoung Kim     int sfc_bitlen;
193*aef9bcd9SKiyoung Kim     int sfc_offset;
194*aef9bcd9SKiyoung Kim     int sfc_weight;
195*aef9bcd9SKiyoung Kim     int a_idsf[LDAC_MAXNQUS];
196*aef9bcd9SKiyoung Kim     int a_idwl1[LDAC_MAXNQUS];
197*aef9bcd9SKiyoung Kim     int a_idwl2[LDAC_MAXNQUS];
198*aef9bcd9SKiyoung Kim     int a_addwl[LDAC_MAXNQUS];
199*aef9bcd9SKiyoung Kim     int a_tmp[LDAC_MAXNQUS];
200*aef9bcd9SKiyoung Kim     int a_qspec[LDAC_MAXLSU];
201*aef9bcd9SKiyoung Kim     int a_rspec[LDAC_MAXLSU];
202*aef9bcd9SKiyoung Kim     AB *p_ab;
203*aef9bcd9SKiyoung Kim     ACSUB *p_acsub;
204*aef9bcd9SKiyoung Kim };
205*aef9bcd9SKiyoung Kim 
206*aef9bcd9SKiyoung Kim /* Audio Block (AB) Structure */
207*aef9bcd9SKiyoung Kim struct _audio_block_ldac {
208*aef9bcd9SKiyoung Kim     int blk_type;
209*aef9bcd9SKiyoung Kim     int blk_nchs;
210*aef9bcd9SKiyoung Kim     int nbands;
211*aef9bcd9SKiyoung Kim     int nqus;
212*aef9bcd9SKiyoung Kim     int grad_mode;
213*aef9bcd9SKiyoung Kim     int grad_qu_l;
214*aef9bcd9SKiyoung Kim     int grad_qu_h;
215*aef9bcd9SKiyoung Kim     int grad_os_l;
216*aef9bcd9SKiyoung Kim     int grad_os_h;
217*aef9bcd9SKiyoung Kim     int a_grad[LDAC_MAXGRADQU];
218*aef9bcd9SKiyoung Kim     int nadjqus;
219*aef9bcd9SKiyoung Kim     int abc_status;
220*aef9bcd9SKiyoung Kim     int nbits_ab;
221*aef9bcd9SKiyoung Kim     int nbits_band;
222*aef9bcd9SKiyoung Kim     int nbits_grad;
223*aef9bcd9SKiyoung Kim     int nbits_scfc;
224*aef9bcd9SKiyoung Kim     int nbits_spec;
225*aef9bcd9SKiyoung Kim     int nbits_avail;
226*aef9bcd9SKiyoung Kim     int nbits_used;
227*aef9bcd9SKiyoung Kim     int *p_smplrate_id;
228*aef9bcd9SKiyoung Kim     int *p_error_code;
229*aef9bcd9SKiyoung Kim     AC  *ap_ac[2];
230*aef9bcd9SKiyoung Kim };
231*aef9bcd9SKiyoung Kim 
232*aef9bcd9SKiyoung Kim /* Sound Frame Structure */
233*aef9bcd9SKiyoung Kim struct _sfinfo_ldac {
234*aef9bcd9SKiyoung Kim     CFG cfg;
235*aef9bcd9SKiyoung Kim     AB *p_ab;
236*aef9bcd9SKiyoung Kim     AC *ap_ac[LDAC_MAXNCH];
237*aef9bcd9SKiyoung Kim     char *p_mempos;
238*aef9bcd9SKiyoung Kim     int error_code;
239*aef9bcd9SKiyoung Kim };
240*aef9bcd9SKiyoung Kim 
241*aef9bcd9SKiyoung Kim /* LDAC Handle */
242*aef9bcd9SKiyoung Kim typedef struct _handle_ldac_struct {
243*aef9bcd9SKiyoung Kim     int nlnn;
244*aef9bcd9SKiyoung Kim     int nbands;
245*aef9bcd9SKiyoung Kim     int grad_mode;
246*aef9bcd9SKiyoung Kim     int grad_qu_l;
247*aef9bcd9SKiyoung Kim     int grad_qu_h;
248*aef9bcd9SKiyoung Kim     int grad_os_l;
249*aef9bcd9SKiyoung Kim     int grad_os_h;
250*aef9bcd9SKiyoung Kim     int abc_status;
251*aef9bcd9SKiyoung Kim     int error_code;
252*aef9bcd9SKiyoung Kim     SFINFO sfinfo;
253*aef9bcd9SKiyoung Kim } HANDLE_LDAC_STRUCT;
254*aef9bcd9SKiyoung Kim 
255*aef9bcd9SKiyoung Kim /* Huffman Codeword */
256*aef9bcd9SKiyoung Kim typedef struct {
257*aef9bcd9SKiyoung Kim     unsigned char word;
258*aef9bcd9SKiyoung Kim     unsigned char len;
259*aef9bcd9SKiyoung Kim } HC;
260*aef9bcd9SKiyoung Kim 
261*aef9bcd9SKiyoung Kim /* Huffman Encoding Structure */
262*aef9bcd9SKiyoung Kim typedef struct _hcenc_ldac HCENC;
263*aef9bcd9SKiyoung Kim struct _hcenc_ldac {
264*aef9bcd9SKiyoung Kim     const HC *p_tbl;
265*aef9bcd9SKiyoung Kim     unsigned char ncodes;
266*aef9bcd9SKiyoung Kim     unsigned char wl;
267*aef9bcd9SKiyoung Kim     unsigned char mask;
268*aef9bcd9SKiyoung Kim };
269*aef9bcd9SKiyoung Kim 
270*aef9bcd9SKiyoung Kim 
271*aef9bcd9SKiyoung Kim /*******************************************************************************
272*aef9bcd9SKiyoung Kim     Function Declarations
273*aef9bcd9SKiyoung Kim *******************************************************************************/
274*aef9bcd9SKiyoung Kim #define npow2_ldac(n)  (1 << (n))
275*aef9bcd9SKiyoung Kim #define min_ldac(a, b) (((a)<(b)) ? (a) : (b))
276*aef9bcd9SKiyoung Kim #define max_ldac(a, b) (((a)>(b)) ? (a) : (b))
277*aef9bcd9SKiyoung Kim 
278*aef9bcd9SKiyoung Kim /* Get Huffman Codeword Property */
279*aef9bcd9SKiyoung Kim #define hc_len_ldac(p)  ((p)->len)
280*aef9bcd9SKiyoung Kim #define hc_word_ldac(p) ((p)->word)
281*aef9bcd9SKiyoung Kim 
282*aef9bcd9SKiyoung Kim /* Convert a Signed Number with nbits to a Signed Integer */
283*aef9bcd9SKiyoung Kim #define bs_to_int_ldac(bs, nbits) (((bs)&(0x1<<((nbits)-1))) ? ((bs)|((~0x0)<<(nbits))) : bs)
284*aef9bcd9SKiyoung Kim 
285*aef9bcd9SKiyoung Kim #ifdef _32BIT_FIXED_POINT
286*aef9bcd9SKiyoung Kim #include "fixp_ldac.h"
287*aef9bcd9SKiyoung Kim #endif /* _32BIT_FIXED_POINT */
288*aef9bcd9SKiyoung Kim #include "proto_ldac.h"
289*aef9bcd9SKiyoung Kim 
290*aef9bcd9SKiyoung Kim 
291*aef9bcd9SKiyoung Kim #endif /* _LDAC_H */
292*aef9bcd9SKiyoung Kim 
293