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/* Includes */ 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVDBE.h" 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVDBE_Private.h" 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVDBE_Memory */ 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function is used for memory allocation and free. It can be called in */ 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* two ways: */ 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance = NULL Returns the memory requirements */ 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance = Instance handle Returns the memory requirements and */ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* allocated base addresses for the instance */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* When this function is called for memory allocation (hInstance=NULL) the memory */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* base address pointers are NULL on return. */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* When the function is called for free (hInstance = Instance Handle) the memory */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* table returns the allocated memory and base addresses used during initialisation. */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance Handle */ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pMemoryTable Pointer to an empty memory definition table */ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pCapabilities Pointer to the instance capabilities */ 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVDBE_SUCCESS Succeeded */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVDBE_Process function */ 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVDBE_ReturnStatus_en LVDBE_Memory(LVDBE_Handle_t hInstance, 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_MemTab_t *pMemoryTable, 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Capabilities_t *pCapabilities) 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT32 ScratchSize; 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Instance_t *pInstance = (LVDBE_Instance_t *)hInstance; 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Fill in the memory table 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (hInstance == LVM_NULL) 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Instance memory 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_INSTANCE].Size = sizeof(LVDBE_Instance_t); 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_INSTANCE].Alignment = LVDBE_INSTANCE_ALIGN; 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_INSTANCE].Type = LVDBE_PERSISTENT; 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_INSTANCE].pBaseAddress = LVM_NULL; 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Data memory 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_DATA].Size = sizeof(LVDBE_Data_t); 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_DATA].Alignment = LVDBE_PERSISTENT_DATA_ALIGN; 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_DATA].Type = LVDBE_PERSISTENT_DATA; 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_DATA].pBaseAddress = LVM_NULL; 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Coef memory 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_COEF].Size = sizeof(LVDBE_Coef_t); 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_COEF].Alignment = LVDBE_PERSISTENT_COEF_ALIGN; 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_COEF].Type = LVDBE_PERSISTENT_COEF; 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_COEF].pBaseAddress = LVM_NULL; 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Scratch memory 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ScratchSize = (LVM_UINT32)(LVDBE_SCRATCHBUFFERS_INPLACE*sizeof(LVM_INT16)*pCapabilities->MaxBlockSize); 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_SCRATCH].Size = ScratchSize; 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_SCRATCH].Alignment = LVDBE_SCRATCH_ALIGN; 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_SCRATCH].Type = LVDBE_SCRATCH; 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVDBE_MEMREGION_SCRATCH].pBaseAddress = LVM_NULL; 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Read back memory allocation table */ 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pMemoryTable = pInstance->MemoryTable; 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVDBE_SUCCESS); 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVDBE_Init */ 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Create and initialisation function for the Dynamic Bass Enhancement module */ 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function can be used to create an algorithm instance by calling with */ 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance set to NULL. In this case the algorithm returns the new instance */ 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* handle. */ 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function can be used to force a full re-initialisation of the algorithm */ 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* by calling with hInstance = Instance Handle. In this case the memory table */ 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* should be correct for the instance, this can be ensured by calling the function */ 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DBE_Memory before calling this function. */ 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pMemoryTable Pointer to the memory definition table */ 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pCapabilities Pointer to the instance capabilities */ 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVDBE_SUCCESS Initialisation succeeded */ 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVDBE_ALIGNMENTERROR Instance or scratch memory on incorrect alignment */ 1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVDBE_NULLADDRESS Instance or scratch memory has a NULL pointer */ 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. The instance handle is the pointer to the base address of the first memory */ 1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* region. */ 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 2. This function must not be interrupted by the LVDBE_Process function */ 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVDBE_ReturnStatus_en LVDBE_Init(LVDBE_Handle_t *phInstance, 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_MemTab_t *pMemoryTable, 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Capabilities_t *pCapabilities) 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Instance_t *pInstance; 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVMixer3_1St_st *pMixer_Instance; 155c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVMixer3_2St_st *pBypassMixer_Instance; 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 i; 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 MixGain; 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the instance handle if not already initialised 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*phInstance == LVM_NULL) 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *phInstance = (LVDBE_Handle_t)pMemoryTable->Region[LVDBE_MEMREGION_INSTANCE].pBaseAddress; 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance =(LVDBE_Instance_t *)*phInstance; 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check the memory table for NULL pointers and incorrectly aligned data 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (i=0; i<LVDBE_NR_MEMORY_REGIONS; i++) 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pMemoryTable->Region[i].Size!=0) 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pMemoryTable->Region[i].pBaseAddress==LVM_NULL) 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVDBE_NULLADDRESS); 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 181b302bd5d288be2d3363b80053ca2392560b00b25Ashok Bhat if (((uintptr_t)pMemoryTable->Region[i].pBaseAddress % pMemoryTable->Region[i].Alignment)!=0){ 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVDBE_ALIGNMENTERROR); 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Save the memory table in the instance structure 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Capabilities = *pCapabilities; 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Save the memory table in the instance structure 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->MemoryTable = *pMemoryTable; 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the default instance parameters 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.CentreFrequency = LVDBE_CENTRE_55HZ; 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.EffectLevel = 0; 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.HeadroomdB = 0; 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.HPFSelect = LVDBE_HPF_OFF; 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.OperatingMode = LVDBE_OFF; 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.SampleRate = LVDBE_FS_8000; 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.VolumeControl = LVDBE_VOLUME_OFF; 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.VolumedB = 0; 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set pointer to data and coef memory 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pData = pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_DATA].pBaseAddress; 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pCoef = pMemoryTable->Region[LVDBE_MEMREGION_PERSISTENT_COEF].pBaseAddress; 2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the filters 2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 223c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVDBE_SetFilters(pInstance, /* Set the filter taps and coefficients */ 2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->Params); 2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the AGC 2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_SetAGC(pInstance, /* Set the AGC gain */ 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->Params); 232c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pInstance->pData->AGCInstance.AGC_Gain = pInstance->pData->AGCInstance.AGC_MaxGain; 233c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Default to the bass boost setting */ 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23597bb6e89845cb6d85f4d34a4efcc1de2ce585336Marco Nelissen // initialize the mixer with some fixes values since otherwise LVDBE_SetVolume ends up 23697bb6e89845cb6d85f4d34a4efcc1de2ce585336Marco Nelissen // reading uninitialized data 23797bb6e89845cb6d85f4d34a4efcc1de2ce585336Marco Nelissen pMixer_Instance = &pInstance->pData->BypassVolume; 23897bb6e89845cb6d85f4d34a4efcc1de2ce585336Marco Nelissen LVC_Mixer_Init(&pMixer_Instance->MixerStream[0],0x00007FFF,0x00007FFF); 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the volume 2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_SetVolume(pInstance, /* Set the Volume */ 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->Params); 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 246c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pInstance->pData->AGCInstance.Volume = pInstance->pData->AGCInstance.Target; 247c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Initialise as the target */ 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MixGain = LVC_Mixer_GetTarget(&pMixer_Instance->MixerStream[0]); 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pMixer_Instance->MixerStream[0],MixGain,MixGain); 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Configure the mixer process path */ 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMixer_Instance->MixerStream[0].CallbackParam = 0; 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMixer_Instance->MixerStream[0].pCallbackHandle = LVM_NULL; 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMixer_Instance->MixerStream[0].pCallBack = LVM_NULL; 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMixer_Instance->MixerStream[0].CallbackSet = 0; 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 259c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Initialise the clicks minimisation BypassMixer 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 261c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 262c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance = &pInstance->pData->BypassMixer; 263c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 264c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 265c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Setup the mixer gain for the processed path 266c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 267c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance->MixerStream[0].CallbackParam = 0; 268c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance->MixerStream[0].pCallbackHandle = LVM_NULL; 269c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance->MixerStream[0].pCallBack = LVM_NULL; 270c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance->MixerStream[0].CallbackSet=0; 271c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVC_Mixer_Init(&pBypassMixer_Instance->MixerStream[0],0,0); 272c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVC_Mixer_SetTimeConstant(&pBypassMixer_Instance->MixerStream[0], 273c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVDBE_BYPASS_MIXER_TC,pInstance->Params.SampleRate,2); 274c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 275c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Setup the mixer gain for the unprocessed path 276c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 277c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance->MixerStream[1].CallbackParam = 0; 278c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance->MixerStream[1].pCallbackHandle = LVM_NULL; 279c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance->MixerStream[1].pCallBack = LVM_NULL; 280c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pBypassMixer_Instance->MixerStream[1].CallbackSet=0; 281c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVC_Mixer_Init(&pBypassMixer_Instance->MixerStream[1],0x00007FFF,0x00007FFF); 282c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVC_Mixer_SetTimeConstant(&pBypassMixer_Instance->MixerStream[1], 283c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVDBE_BYPASS_MIXER_TC,pInstance->Params.SampleRate,2); 2842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVDBE_SUCCESS); 2862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 288