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