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