/* * Copyright (C) 2003 - 2016 Sony Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _LDAC_H #define _LDAC_H #include "ldaclib.h" #include "struct_ldac.h" /*************************************************************************************************** Macro Definitions ***************************************************************************************************/ /* Configuration */ #define LDAC_SYNCWORDBITS 8 #define LDAC_SYNCWORD 0xAA /** Sampling Rate **/ #define LDAC_SMPLRATEBITS 3 #define LDAC_NSMPLRATEID 6 #define LDAC_NSUPSMPLRATEID 4 #define LDAC_SMPLRATEID_0 0x0 #define LDAC_SMPLRATEID_1 0x1 #define LDAC_SMPLRATEID_2 0x2 #define LDAC_SMPLRATEID_3 0x3 /** Channel **/ #define LDAC_CHCONFIG1BITS 3 #define LDAC_CHCONFIG2BITS 2 #define LDAC_NCHCONFIGID 8 #define LDAC_MAXNCH 2 #define LDAC_CHANNEL_1CH 1 #define LDAC_CHANNEL_2CH 2 #define LDAC_CHCONFIGID_MN 0 #define LDAC_CHCONFIGID_DL 1 #define LDAC_CHCONFIGID_ST 2 /** Frame Length **/ #define LDAC_FRAMELEN1BITS 11 #define LDAC_FRAMELEN2BITS 9 #define LDAC_MAXNBYTES 1024 #define LDAC_MAXSUPNBYTES 512 #define LDAC_MINSUPNBYTES 22 /** Frame Status **/ #define LDAC_FRAMESTATBITS 2 #define LDAC_FRMSTAT_LEV_0 0 #define LDAC_FRMSTAT_LEV_1 1 #define LDAC_FRMSTAT_LEV_2 2 #define LDAC_FRMSTAT_LEV_3 3 /** Other **/ #define LDAC_RESERVE1BITS 2 #define LDAC_RESERVE2BITS 5 #define LDAC_DUMMYCODE 0x00 /* Signal Processing */ #define LDAC_NFRAME 2 #define LDAC_NSFTSTEP 5 /** Frame Samples (log base 2 of) **/ #define LDAC_NUMLNN 2 #define LDAC_MAXLNN 8 #define LDAC_2FSLNN 8 #define LDAC_1FSLNN 7 /** Frame Samples **/ #define LDAC_MAXLSU (1<<LDAC_MAXLNN) #define LDAC_2FSLSU (1<<LDAC_2FSLNN) #define LDAC_1FSLSU (1<<LDAC_1FSLNN) /** Band **/ #define LDAC_MAXNBANDS 16 #define LDAC_2FSNBANDS 16 #define LDAC_1FSNBANDS 12 /** QU **/ #define LDAC_MAXGRADQU 50 #define LDAC_MAXNQUS 34 #define LDAC_2FSNQUS 34 #define LDAC_1FSNQUS 26 #define LDAC_MAXNSPS 16 /** Frame Status Analysis **/ #define LDAC_NSP_PSEUDOANA 128 #define LDAC_NSP_LOWENERGY 12 #define LDAC_TH_ZCROSNUM 90 #define LDAC_MAXCNT_FRMANA 10 /* Stream Syntax */ #define LDAC_BLKID_MONO 0 #define LDAC_BLKID_STEREO 1 #define LDAC_FILLCODE 0x01 /** Band Info **/ #define LDAC_NBANDBITS 4 #define LDAC_BAND_OFFSET 2 /** Gradient Data **/ #define LDAC_GRADMODEBITS 2 #define LDAC_GRADOSBITS 5 #define LDAC_MAXGRADOS 31 #define LDAC_DEFGRADOSH 31 #define LDAC_GRADQU0BITS 6 #define LDAC_GRADQU1BITS 5 #define LDAC_DEFGRADQUH 26 #define LDAC_NADJQUBITS 5 #define LDAC_MAXNADJQUS 32 /** Scale Factor Data **/ #define LDAC_IDSFBITS 5 #define LDAC_NIDSF 32 #define LDAC_SFCMODEBITS 1 #define LDAC_NSFCMODE 2 #define LDAC_SFCWTBLBITS 3 #define LDAC_NSFCWTBL 8 #define LDAC_SFCBLENBITS 2 #define LDAC_MINSFCBLEN_0 3 #define LDAC_MAXSFCBLEN_0 6 #define LDAC_MINSFCBLEN_1 2 #define LDAC_MAXSFCBLEN_1 5 #define LDAC_MINSFCBLEN_2 2 #define LDAC_MAXSFCBLEN_2 5 /** Spectrum/Residual Data **/ #define LDAC_NIDWL 16 #define LDAC_MINIDWL1 1 #define LDAC_MAXIDWL1 15 #define LDAC_MAXIDWL2 15 #define LDAC_2DIMSPECBITS 3 #define LDAC_N2DIMSPECENCTBL 16 #define LDAC_N2DIMSPECDECTBL 8 #define LDAC_4DIMSPECBITS 7 #define LDAC_N4DIMSPECENCTBL 256 #define LDAC_N4DIMSPECDECTBL 81 /** Bit Operation **/ #define LDAC_LOC_SHIFT 3 #define LDAC_LOC_MASK 0x7 #define LDAC_BYTESIZE 8 #define LDAC_MAXBITNUM 8192 /* Flag */ #define LDAC_FLAGBITS 1 #define LDAC_TRUE 1 #define LDAC_FALSE 0 /* Mode */ #define LDAC_MODE_0 0 #define LDAC_MODE_1 1 #define LDAC_MODE_2 2 #define LDAC_MODE_3 3 /*************************************************************************************************** Structure Definitions ***************************************************************************************************/ typedef struct _sfinfo_ldac SFINFO; typedef struct _config_info_ldac CFG; typedef struct _audio_block_ldac AB; typedef struct _audio_channel_ldac AC; typedef struct _audio_channel_sub_ldac ACSUB; /* Configuration Information Structure */ struct _config_info_ldac { int syncword; int smplrate_id; int chconfig_id; int ch; int frame_length; int frame_status; }; /* Audio Channel (AC) Sub Structure */ #ifndef _32BIT_FIXED_POINT struct _audio_channel_sub_ldac { SCALAR a_time[LDAC_MAXLSU*LDAC_NFRAME]; SCALAR a_spec[LDAC_MAXLSU]; }; #else /* _32BIT_FIXED_POINT */ struct _audio_channel_sub_ldac { INT32 a_time[LDAC_MAXLSU*LDAC_NFRAME]; INT32 a_spec[LDAC_MAXLSU]; }; #endif /* _32BIT_FIXED_POINT */ /* Audio Channel (AC) Structure */ struct _audio_channel_ldac { int ich; int frmana_cnt; int sfc_mode; int sfc_bitlen; int sfc_offset; int sfc_weight; int a_idsf[LDAC_MAXNQUS]; int a_idwl1[LDAC_MAXNQUS]; int a_idwl2[LDAC_MAXNQUS]; int a_addwl[LDAC_MAXNQUS]; int a_tmp[LDAC_MAXNQUS]; int a_qspec[LDAC_MAXLSU]; int a_rspec[LDAC_MAXLSU]; AB *p_ab; ACSUB *p_acsub; }; /* Audio Block (AB) Structure */ struct _audio_block_ldac { int blk_type; int blk_nchs; int nbands; int nqus; int grad_mode; int grad_qu_l; int grad_qu_h; int grad_os_l; int grad_os_h; int a_grad[LDAC_MAXGRADQU]; int nadjqus; int abc_status; int nbits_ab; int nbits_band; int nbits_grad; int nbits_scfc; int nbits_spec; int nbits_avail; int nbits_used; int *p_smplrate_id; int *p_error_code; AC *ap_ac[2]; }; /* Sound Frame Structure */ struct _sfinfo_ldac { CFG cfg; AB *p_ab; AC *ap_ac[LDAC_MAXNCH]; char *p_mempos; int error_code; }; /* LDAC Handle */ typedef struct _handle_ldac_struct { int nlnn; int nbands; int grad_mode; int grad_qu_l; int grad_qu_h; int grad_os_l; int grad_os_h; int abc_status; int error_code; SFINFO sfinfo; } HANDLE_LDAC_STRUCT; /* Huffman Codeword */ typedef struct { unsigned char word; unsigned char len; } HC; /* Huffman Encoding Structure */ typedef struct _hcenc_ldac HCENC; struct _hcenc_ldac { const HC *p_tbl; unsigned char ncodes; unsigned char wl; unsigned char mask; }; /******************************************************************************* Function Declarations *******************************************************************************/ #define npow2_ldac(n) (1 << (n)) #define min_ldac(a, b) (((a)<(b)) ? (a) : (b)) #define max_ldac(a, b) (((a)>(b)) ? (a) : (b)) /* Get Huffman Codeword Property */ #define hc_len_ldac(p) ((p)->len) #define hc_word_ldac(p) ((p)->word) /* Convert a Signed Number with nbits to a Signed Integer */ #define bs_to_int_ldac(bs, nbits) (((bs)&(0x1<<((nbits)-1))) ? ((bs)|((~0x0)<<(nbits))) : bs) #ifdef _32BIT_FIXED_POINT #include "fixp_ldac.h" #endif /* _32BIT_FIXED_POINT */ #include "proto_ldac.h" #endif /* _LDAC_H */