/*
* 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 */