LVEQNB_Private.h revision d918324d44aa48b3b064ea9b87d0c520c38f15a9
1/*
2 * Copyright (C) 2004-2010 NXP Software
3 * Copyright (C) 2010 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef __LVEQNB_PRIVATE_H__
19#define __LVEQNB_PRIVATE_H__
20
21#ifdef __cplusplus
22extern "C" {
23#endif /* __cplusplus */
24
25
26/****************************************************************************************/
27/*                                                                                      */
28/*  Includes                                                                            */
29/*                                                                                      */
30/****************************************************************************************/
31
32#include "LVEQNB.h"                                     /* Calling or Application layer definitions */
33#include "BIQUAD.h"
34#include "LVC_Mixer.h"
35
36/****************************************************************************************/
37/*                                                                                      */
38/*  Defines                                                                             */
39/*                                                                                      */
40/****************************************************************************************/
41
42/* General */
43#define LVEQNB_INVALID              0xFFFF              /* Invalid init parameter */
44
45/* Memory */
46#define LVEQNB_INSTANCE_ALIGN       4                   /* 32-bit alignment for instance structures */
47#define LVEQNB_DATA_ALIGN           4                   /* 32-bit alignment for structures */
48#define LVEQNB_COEF_ALIGN           4                   /* 32-bit alignment for long words */
49#define LVEQNB_SCRATCHBUFFERS       4                   /* Number of buffers required for inplace processing */
50#define LVEQNB_SCRATCH_ALIGN        4                   /* 32-bit alignment for long data */
51
52#define LVEQNB_BYPASS_MIXER_TC      100                 /* Bypass Mixer TC */
53
54/****************************************************************************************/
55/*                                                                                      */
56/*  Types                                                                               */
57/*                                                                                      */
58/****************************************************************************************/
59
60/* Filter biquad types */
61typedef enum
62{
63    LVEQNB_SinglePrecision = 0,
64    LVEQNB_DoublePrecision = 1,
65    LVEQNB_OutOfRange      = 2,
66    LVEQNB_BIQUADTYPE_MAX  = LVM_MAXINT_32
67} LVEQNB_BiquadType_en;
68
69
70/****************************************************************************************/
71/*                                                                                      */
72/*  Structures                                                                          */
73/*                                                                                      */
74/****************************************************************************************/
75
76
77
78/* Instance structure */
79typedef struct
80{
81    /* Public parameters */
82    LVEQNB_MemTab_t                 MemoryTable;        /* Instance memory allocation table */
83    LVEQNB_Params_t                 Params;             /* Instance parameters */
84    LVEQNB_Capabilities_t           Capabilities;       /* Instance capabilities */
85
86    /* Aligned memory pointers */
87    LVM_INT16                      *pFastTemporary;        /* Fast temporary data base address */
88
89    /* Process variables */
90    Biquad_2I_Order2_Taps_t         *pEQNB_Taps;        /* Equaliser Taps */
91    Biquad_Instance_t               *pEQNB_FilterState; /* State for each filter band */
92
93    /* Filter definitions and call back */
94    LVM_UINT16                      NBands;             /* Number of bands */
95    LVEQNB_BandDef_t                *pBandDefinitions;  /* Filter band definitions */
96    LVEQNB_BiquadType_en            *pBiquadType;       /* Filter biquad types */
97
98    /* Bypass variable */
99    LVMixer3_2St_st           BypassMixer;              /* Bypass mixer used in transitions */
100    LVM_INT16               bInOperatingModeTransition; /* Operating mode transition flag */
101
102} LVEQNB_Instance_t;
103
104
105/****************************************************************************************/
106/*                                                                                      */
107/* Function prototypes                                                                  */
108/*                                                                                      */
109/****************************************************************************************/
110
111void    LVEQNB_SetFilters(LVEQNB_Instance_t   *pInstance,
112                          LVEQNB_Params_t     *pParams);
113
114void    LVEQNB_SetCoefficients(LVEQNB_Instance_t    *pInstance);
115
116void    LVEQNB_ClearFilterHistory(LVEQNB_Instance_t *pInstance);
117
118LVEQNB_ReturnStatus_en LVEQNB_SinglePrecCoefs(LVM_UINT16        Fs,
119                                              LVEQNB_BandDef_t  *pFilterDefinition,
120                                              PK_C16_Coefs_t    *pCoefficients);
121
122LVEQNB_ReturnStatus_en LVEQNB_DoublePrecCoefs(LVM_UINT16        Fs,
123                                              LVEQNB_BandDef_t  *pFilterDefinition,
124                                              PK_C32_Coefs_t    *pCoefficients);
125
126LVM_INT32 LVEQNB_BypassMixerCallBack (void* hInstance, void *pGeneralPurpose, LVM_INT16 CallbackParam);
127
128#ifdef __cplusplus
129}
130#endif /* __cplusplus */
131
132#endif /* __LVEQNB_PRIVATE_H__ */
133
134