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