12c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*
22c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2004-2010 NXP Software
32c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2010 The Android Open Source Project
42c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *
52c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
62c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * you may not use this file except in compliance with the License.
72c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * You may obtain a copy of the License at
82c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *
92c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *
112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Unless required by applicable law or agreed to in writing, software
122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * See the License for the specific language governing permissions and
152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * limitations under the License.
162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */
172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifndef __LVEQNB_PRIVATE_H__
192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define __LVEQNB_PRIVATE_H__
202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus
222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" {
232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */
242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Includes                                                                            */
292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVEQNB.h"                                     /* Calling or Application layer definitions */
332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "BIQUAD.h"
342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVC_Mixer.h"
352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Defines                                                                             */
392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* General */
432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVEQNB_INVALID              0xFFFF              /* Invalid init parameter */
442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory */
462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVEQNB_INSTANCE_ALIGN       4                   /* 32-bit alignment for instance structures */
472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVEQNB_DATA_ALIGN           4                   /* 32-bit alignment for structures */
482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVEQNB_COEF_ALIGN           4                   /* 32-bit alignment for long words */
492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVEQNB_SCRATCHBUFFERS       4                   /* Number of buffers required for inplace processing */
502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVEQNB_SCRATCH_ALIGN        4                   /* 32-bit alignment for long data */
512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVEQNB_BYPASS_MIXER_TC      100                 /* Bypass Mixer TC */
532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Types                                                                               */
572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Filter biquad types */
612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum
622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_SinglePrecision = 0,
642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_DoublePrecision = 1,
652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_OutOfRange      = 2,
662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_BIQUADTYPE_MAX  = LVM_MAXINT_32
672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVEQNB_BiquadType_en;
682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Structures                                                                          */
732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Instance structure */
792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Public parameters */
822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_MemTab_t                 MemoryTable;        /* Instance memory allocation table */
832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_Params_t                 Params;             /* Instance parameters */
842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_Capabilities_t           Capabilities;       /* Instance capabilities */
852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Aligned memory pointers */
872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16                      *pFastTemporary;        /* Fast temporary data base address */
882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Process variables */
902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_2I_Order2_Taps_t         *pEQNB_Taps;        /* Equaliser Taps */
912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_Instance_t               *pEQNB_FilterState; /* State for each filter band */
922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Filter definitions and call back */
942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_UINT16                      NBands;             /* Number of bands */
952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_BandDef_t                *pBandDefinitions;  /* Filter band definitions */
962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVEQNB_BiquadType_en            *pBiquadType;       /* Filter biquad types */
972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Bypass variable */
992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVMixer3_2St_st           BypassMixer;              /* Bypass mixer used in transitions */
1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               bInOperatingModeTransition; /* Operating mode transition flag */
1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVEQNB_Instance_t;
1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Function prototypes                                                                  */
1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVEQNB_SetFilters(LVEQNB_Instance_t   *pInstance,
1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                          LVEQNB_Params_t     *pParams);
1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVEQNB_SetCoefficients(LVEQNB_Instance_t    *pInstance);
1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVEQNB_ClearFilterHistory(LVEQNB_Instance_t *pInstance);
1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVEQNB_ReturnStatus_en LVEQNB_SinglePrecCoefs(LVM_UINT16        Fs,
1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                              LVEQNB_BandDef_t  *pFilterDefinition,
1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                              PK_C16_Coefs_t    *pCoefficients);
1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVEQNB_ReturnStatus_en LVEQNB_DoublePrecCoefs(LVM_UINT16        Fs,
1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                              LVEQNB_BandDef_t  *pFilterDefinition,
1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                              PK_C32_Coefs_t    *pCoefficients);
1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_INT32 LVEQNB_BypassMixerCallBack (void* hInstance, void *pGeneralPurpose, LVM_INT16 CallbackParam);
1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus
1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}
1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */
1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __LVEQNB_PRIVATE_H__ */
1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
134