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/****************************************************************************************/
192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*    Header file for the private layer interface of Dynamic Bass Enhancement module    */
212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  This files includes all definitions, types, structures and function                 */
232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  prototypes required by the execution layer.                                         */
242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifndef __LVDBE_PRIVATE_H__
282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define __LVDBE_PRIVATE_H__
292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus
312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" {
322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */
332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*    Includes                                                                          */
382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVDBE.h"                                /* Calling or Application layer definitions */
422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "BIQUAD.h"
432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVC_Mixer.h"
442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "AGC.h"
452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*    Defines                                                                           */
502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* General */
542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define    LVDBE_INVALID            0xFFFF        /* Invalid init parameter */
552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory */
572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_MEMREGION_INSTANCE         0       /* Offset to the instance memory region */
582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_MEMREGION_PERSISTENT_DATA  1       /* Offset to persistent data memory region */
592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_MEMREGION_PERSISTENT_COEF  2       /* Offset to persistent coefficient region */
602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_MEMREGION_SCRATCH          3       /* Offset to data scratch memory region */
612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_INSTANCE_ALIGN             4       /* 32-bit alignment for structures */
632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_PERSISTENT_DATA_ALIGN      4       /* 32-bit alignment for data */
642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_PERSISTENT_COEF_ALIGN      4       /* 32-bit alignment for coef */
652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_SCRATCH_ALIGN              4       /* 32-bit alignment for long data */
662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
675185b0138aaeffeecc93b958cb9cd9821f260fafEric Laurent#define LVDBE_SCRATCHBUFFERS_INPLACE     6       /* Number of buffers required for inplace processing */
682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVDBE_MIXER_TC                   5       /* Mixer time  */
70c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent#define LVDBE_BYPASS_MIXER_TC            100     /* Bypass mixer time */
71c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*    Structures                                                                        */
762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Data structure */
802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* AGC parameters */
832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    AGC_MIX_VOL_2St1Mon_D32_t   AGCInstance;        /* AGC instance parameters */
842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Process variables */
862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_2I_Order2_Taps_t     HPFTaps;            /* High pass filter taps */
872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_1I_Order2_Taps_t     BPFTaps;            /* Band pass filter taps */
882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVMixer3_1St_st             BypassVolume;       /* Bypass volume scaler */
89c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    LVMixer3_2St_st             BypassMixer;        /* Bypass Mixer for Click Removal */
902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVDBE_Data_t;
922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Coefs structure */
942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Process variables */
972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_Instance_t           HPFInstance;        /* High pass filter instance */
982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    Biquad_Instance_t           BPFInstance;        /* Band pass filter instance */
992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVDBE_Coef_t;
1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Instance structure */
1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Public parameters */
1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVDBE_MemTab_t                MemoryTable;        /* Instance memory allocation table */
1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVDBE_Params_t                Params;             /* Instance parameters */
1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVDBE_Capabilities_t        Capabilities;         /* Instance capabilities */
1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Data and coefficient pointers */
1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVDBE_Data_t                *pData;                /* Instance data */
1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVDBE_Coef_t                *pCoef;                /* Instance coefficients */
1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVDBE_Instance_t;
1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Function prototypes                                                                  */
1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVDBE_SetAGC(LVDBE_Instance_t       *pInstance,
1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                     LVDBE_Params_t         *pParams);
1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVDBE_SetVolume(LVDBE_Instance_t    *pInstance,
1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                        LVDBE_Params_t      *pParams);
1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid    LVDBE_SetFilters(LVDBE_Instance_t   *pInstance,
1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                         LVDBE_Params_t     *pParams);
1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus
1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}
1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */
1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif      /* __LVDBE_PRIVATE_H__ */
1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
141