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