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 "LVM_Private.h" 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Tables.h" 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "VectorArithmetic.h" 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "InstAlloc.h" 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_GetMemoryTable */ 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function is used for memory allocation and free. It can be called in */ 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* two ways: */ 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance = NULL Returns the memory requirements */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance = Instance handle Returns the memory requirements and */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* allocated base addresses for the instance */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* When this function is called for memory allocation (hInstance=NULL) the memory */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* base address pointers are NULL on return. */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* When the function is called for free (hInstance = Instance Handle) the memory */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* table returns the allocated memory and base addresses used during initialisation. */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance Handle */ 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pMemoryTable Pointer to an empty memory definition table */ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pCapabilities Pointer to the default capabilities */ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_SUCCESS Succeeded */ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_NULLADDRESS When one of pMemoryTable or pInstParams is NULL */ 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_OUTOFRANGE When any of the Instance parameters are out of range */ 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVM_Process function */ 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 2. The scratch memory is the largest required by any of the sub-modules plus any */ 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* additional scratch requirements of the bundle */ 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_GetMemoryTable(LVM_Handle_t hInstance, 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_MemTab_t *pMemoryTable, 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_InstParams_t *pInstParams) 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance = (LVM_Instance_t *)hInstance; 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT32 AlgScratchSize; 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT32 BundleScratchSize; 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT16 InternalBlockSize; 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent INST_ALLOC AllocMem[LVM_NR_MEMORY_REGIONS]; 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 i; 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check parameters 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pMemoryTable == LVM_NULL) 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return LVM_NULLADDRESS; 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Return memory table if the instance has already been created 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (hInstance != LVM_NULL) 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Read back memory allocation table */ 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pMemoryTable = pInstance->MemoryTable; 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstParams == LVM_NULL) 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return LVM_NULLADDRESS; 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Power Spectrum Analyser 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstParams->PSA_Included > LVM_PSA_ON) 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check the instance parameters 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( (pInstParams->BufferMode != LVM_MANAGED_BUFFERS) && (pInstParams->BufferMode != LVM_UNMANAGED_BUFFERS) ) 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* N-Band Equalizer */ 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( pInstParams->EQNB_NumBands > 32 ) 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstParams->BufferMode == LVM_MANAGED_BUFFERS) 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( (pInstParams->MaxBlockSize < LVM_MIN_MAXBLOCKSIZE ) || (pInstParams->MaxBlockSize > LVM_MANAGED_MAX_MAXBLOCKSIZE ) ) 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( (pInstParams->MaxBlockSize < LVM_MIN_MAXBLOCKSIZE ) || (pInstParams->MaxBlockSize > LVM_UNMANAGED_MAX_MAXBLOCKSIZE) ) 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the AllocMem structures 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (i=0; i<LVM_NR_MEMORY_REGIONS; i++) 1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_Init(&AllocMem[i], LVM_NULL); 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InternalBlockSize = (LVM_UINT16)((pInstParams->MaxBlockSize) & MIN_INTERNAL_BLOCKMASK); /* Force to a multiple of MIN_INTERNAL_BLOCKSIZE */ 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (InternalBlockSize < MIN_INTERNAL_BLOCKSIZE) 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InternalBlockSize = MIN_INTERNAL_BLOCKSIZE; 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Maximum Internal Black Size should not be more than MAX_INTERNAL_BLOCKSIZE*/ 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(InternalBlockSize > MAX_INTERNAL_BLOCKSIZE) 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InternalBlockSize = MAX_INTERNAL_BLOCKSIZE; 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Bundle requirements 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent sizeof(LVM_Instance_t)); 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the algorithm and bundle scratch requirements 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent AlgScratchSize = 0; 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstParams->BufferMode == LVM_MANAGED_BUFFERS) 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BundleScratchSize = 6 * (MIN_INTERNAL_BLOCKSIZE + InternalBlockSize) * sizeof(LVM_INT16); 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST], /* Scratch buffer */ 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BundleScratchSize); 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent sizeof(LVM_Buffer_t)); 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Treble Enhancement requirements 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent sizeof(LVM_TE_Data_t)); 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent sizeof(LVM_TE_Coefs_t)); 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * N-Band Equalizer requirements 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], /* Local storage */ 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstParams->EQNB_NumBands * sizeof(LVM_EQNB_BandDef_t))); 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], /* User storage */ 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstParams->EQNB_NumBands * sizeof(LVM_EQNB_BandDef_t))); 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Concert Sound requirements 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_MemTab_t CS_MemTab; 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Capabilities_t CS_Capabilities; 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the capabilities 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Capabilities.MaxBlockSize = InternalBlockSize; 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the memory requirements 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Memory(LVM_NULL, 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &CS_MemTab, 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &CS_Capabilities); 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the memory allocation structures 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size); 2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size); 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (CS_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size > AlgScratchSize) AlgScratchSize = CS_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size; 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Dynamic Bass Enhancement requirements 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_MemTab_t DBE_MemTab; 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Capabilities_t DBE_Capabilities; 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the capabilities 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Capabilities.SampleRate = LVDBE_CAP_FS_8000 | LVDBE_CAP_FS_11025 | LVDBE_CAP_FS_12000 | LVDBE_CAP_FS_16000 | LVDBE_CAP_FS_22050 | LVDBE_CAP_FS_24000 | LVDBE_CAP_FS_32000 | LVDBE_CAP_FS_44100 | LVDBE_CAP_FS_48000; 2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Capabilities.CentreFrequency = LVDBE_CAP_CENTRE_55Hz | LVDBE_CAP_CENTRE_55Hz | LVDBE_CAP_CENTRE_66Hz | LVDBE_CAP_CENTRE_78Hz | LVDBE_CAP_CENTRE_90Hz; 2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Capabilities.MaxBlockSize = InternalBlockSize; 2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the memory requirements 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Memory(LVM_NULL, 2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &DBE_MemTab, 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &DBE_Capabilities); 2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the bundle table 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size); 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size); 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (DBE_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size > AlgScratchSize) AlgScratchSize = DBE_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size; 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * N-Band equaliser requirements 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_MemTab_t EQNB_MemTab; /* For N-Band Equaliser */ 2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Capabilities_t EQNB_Capabilities; 2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the capabilities 2672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.SampleRate = LVEQNB_CAP_FS_8000 | LVEQNB_CAP_FS_11025 | LVEQNB_CAP_FS_12000 | LVEQNB_CAP_FS_16000 | LVEQNB_CAP_FS_22050 | LVEQNB_CAP_FS_24000 | LVEQNB_CAP_FS_32000 | LVEQNB_CAP_FS_44100 | LVEQNB_CAP_FS_48000; 2692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.SourceFormat = LVEQNB_CAP_STEREO | LVEQNB_CAP_MONOINSTEREO; 2702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.MaxBlockSize = InternalBlockSize; 2712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.MaxBands = pInstParams->EQNB_NumBands; 2722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the memory requirements 2752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Memory(LVM_NULL, 2772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &EQNB_MemTab, 2782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &EQNB_Capabilities); 2792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the bundle table 2822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 2842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size); 2852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 2862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size); 2872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (EQNB_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size > AlgScratchSize) AlgScratchSize = EQNB_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size; 2882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Headroom management memory allocation 2932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 2952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_HEADROOM_MAX_NBANDS * sizeof(LVM_HeadroomBandDef_t))); 2962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 2972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_HEADROOM_MAX_NBANDS * sizeof(LVM_HeadroomBandDef_t))); 2982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Spectrum Analyzer memory requirements 3022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVPSA_Handle_t hPSAInst = LVM_NULL; 3052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_MemTab_t PSA_MemTab; 3062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_InitParams_t PSA_InitParams; 3072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_FilterParam_t FiltersParams[9]; 3082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_RETURN PSA_Status; 3092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstParams->PSA_Included == LVM_PSA_ON) 3112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_InitParams.SpectralDataBufferDuration = (LVM_UINT16) 500; 3132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_InitParams.MaxInputBlockSize = (LVM_UINT16) 1000; 3142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_InitParams.nBands = (LVM_UINT16) 9; 3152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_InitParams.pFiltersParams = &FiltersParams[0]; 3172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for(i = 0; i < PSA_InitParams.nBands; i++) 3182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FiltersParams[i].CenterFrequency = (LVM_UINT16) 1000; 3202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FiltersParams[i].QFactor = (LVM_UINT16) 25; 3212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FiltersParams[i].PostGain = (LVM_INT16) 0; 3222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the memory requirements 3262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_Status = LVPSA_Memory (hPSAInst, 3282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &PSA_MemTab, 3292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &PSA_InitParams); 3302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (PSA_Status != LVPSA_OK) 3322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return((LVM_ReturnStatus_en) LVM_ALGORITHMPSA); 3342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the bundle table 3382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Slow Data */ 3402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], 3412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_SLOW_DATA].Size); 3422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Fast Data */ 3442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 3452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_FAST_DATA].Size); 3462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Fast Coef */ 3482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 3492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_FAST_COEF].Size); 3502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Fast Temporary */ 3522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_TEMPORARY_FAST], 3532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MAX_INTERNAL_BLOCKSIZE * sizeof(LVM_INT16)); 3542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (PSA_MemTab.Region[LVM_TEMPORARY_FAST].Size > AlgScratchSize) 3562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent AlgScratchSize = PSA_MemTab.Region[LVM_TEMPORARY_FAST].Size; 3582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Return the memory table 3642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_SLOW_DATA].Size = InstAlloc_GetTotal(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA]); 3662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_SLOW_DATA].Type = LVM_PERSISTENT_SLOW_DATA; 3672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_SLOW_DATA].pBaseAddress = LVM_NULL; 3682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size = InstAlloc_GetTotal(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA]); 3702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Type = LVM_PERSISTENT_FAST_DATA; 3712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].pBaseAddress = LVM_NULL; 3722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size < 4) 3732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size = 0; 3752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size = InstAlloc_GetTotal(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF]); 3782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Type = LVM_PERSISTENT_FAST_COEF; 3792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL; 3802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size < 4) 3812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size = 0; 3832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST], 3862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent AlgScratchSize); 3872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].Size = InstAlloc_GetTotal(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST]); 3882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].Type = LVM_TEMPORARY_FAST; 3892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].pBaseAddress = LVM_NULL; 3902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].Size < 4) 3912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].Size = 0; 3932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 3962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 3982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 4012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_GetInstanceHandle */ 4032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 4052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function is used to create a bundle instance. It returns the created instance */ 4062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* handle through phInstance. All parameters are set to their default, inactive state. */ 4072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 4092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* phInstance pointer to the instance handle */ 4102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pMemoryTable Pointer to the memory definition table */ 4112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pInstParams Pointer to the initialisation capabilities */ 4122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 4142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_SUCCESS Initialisation succeeded */ 4152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_OUTOFRANGE When any of the Instance parameters are out of range */ 4162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_NULLADDRESS When one of phInstance, pMemoryTable or pInstParams are NULL*/ 4172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 4192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function must not be interrupted by the LVM_Process function */ 4202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 4222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4232c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_GetInstanceHandle(LVM_Handle_t *phInstance, 4242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_MemTab_t *pMemoryTable, 4252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_InstParams_t *pInstParams) 4262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 4272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en Status = LVM_SUCCESS; 4292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance; 4302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent INST_ALLOC AllocMem[LVM_NR_MEMORY_REGIONS]; 4312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 i; 4322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT16 InternalBlockSize; 4332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 BundleScratchSize; 4342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 4372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check valid points have been given 4382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 4392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((phInstance == LVM_NULL) || (pMemoryTable == LVM_NULL) || (pInstParams == LVM_NULL)) 4402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_NULLADDRESS); 4422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 4452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check the memory table for NULL pointers 4462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 4472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (i=0; i<LVM_NR_MEMORY_REGIONS; i++) 4482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pMemoryTable->Region[i].Size != 0) && 4502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pMemoryTable->Region[i].pBaseAddress==LVM_NULL)) 4512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_NULLADDRESS); 4532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 4572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check the instance parameters 4582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 4592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( (pInstParams->BufferMode != LVM_MANAGED_BUFFERS) && (pInstParams->BufferMode != LVM_UNMANAGED_BUFFERS) ) 4602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 4622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( pInstParams->EQNB_NumBands > 32 ) 4652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 4672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstParams->BufferMode == LVM_MANAGED_BUFFERS) 4702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( (pInstParams->MaxBlockSize < LVM_MIN_MAXBLOCKSIZE ) || (pInstParams->MaxBlockSize > LVM_MANAGED_MAX_MAXBLOCKSIZE ) ) 4722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 4742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 4772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( (pInstParams->MaxBlockSize < LVM_MIN_MAXBLOCKSIZE ) || (pInstParams->MaxBlockSize > LVM_UNMANAGED_MAX_MAXBLOCKSIZE) ) 4792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 4812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstParams->PSA_Included > LVM_PSA_ON) 4852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 4872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 4902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the AllocMem structures 4912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 4922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (i=0; i<LVM_NR_MEMORY_REGIONS; i++) 4932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstAlloc_Init(&AllocMem[i], 4952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pMemoryTable->Region[i].pBaseAddress); 4962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the instance handle 5012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *phInstance = (LVM_Handle_t)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], 5032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent sizeof(LVM_Instance_t)); 5042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance =(LVM_Instance_t *)*phInstance; 5052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Save the memory table, parameters and capabilities 5092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->MemoryTable = *pMemoryTable; 5112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->InstParams = *pInstParams; 5122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the bundle scratch memory and initialse the buffer management 5162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InternalBlockSize = (LVM_UINT16)((pInstParams->MaxBlockSize) & MIN_INTERNAL_BLOCKMASK); /* Force to a multiple of MIN_INTERNAL_BLOCKSIZE */ 5182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (InternalBlockSize < MIN_INTERNAL_BLOCKSIZE) 5192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InternalBlockSize = MIN_INTERNAL_BLOCKSIZE; 5212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Maximum Internal Black Size should not be more than MAX_INTERNAL_BLOCKSIZE*/ 5242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(InternalBlockSize > MAX_INTERNAL_BLOCKSIZE) 5252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InternalBlockSize = MAX_INTERNAL_BLOCKSIZE; 5272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->InternalBlockSize = (LVM_INT16)InternalBlockSize; 5292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Common settings for managed and unmanaged buffers 5332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->SamplesToProcess = 0; /* No samples left to process */ 5352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstParams->BufferMode == LVM_MANAGED_BUFFERS) 5362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Managed buffers required 5392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pBufferManagement = InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], 5412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent sizeof(LVM_Buffer_t)); 5422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BundleScratchSize = (LVM_INT32)(6 * (MIN_INTERNAL_BLOCKSIZE + InternalBlockSize) * sizeof(LVM_INT16)); 5432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pBufferManagement->pScratch = InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST], /* Scratch 1 buffer */ 5442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_UINT32)BundleScratchSize); 5452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LoadConst_16(0, /* Clear the input delay buffer */ 5472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16 *)&pInstance->pBufferManagement->InDelayBuffer, 5482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16)(2 * MIN_INTERNAL_BLOCKSIZE)); 5492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pBufferManagement->InDelaySamples = MIN_INTERNAL_BLOCKSIZE; /* Set the number of delay samples */ 5502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pBufferManagement->OutDelaySamples = 0; /* No samples in the output buffer */ 5512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pBufferManagement->BufferState = LVM_FIRSTCALL; /* Set the state ready for the first call */ 5522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set default parameters 5572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.OperatingMode = LVM_MODE_OFF; 5592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.SampleRate = LVM_FS_8000; 560f6c7a40f8cbbd2fa1a4131ef91b30cf7c5c2d0d7Eric Laurent pInstance->Params.SourceFormat = LVM_MONO; 5612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.SpeakerType = LVM_HEADPHONES; 5622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.VC_EffectLevel = 0; 5632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.VC_Balance = 0; 5642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set callback 5672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->CallBack = LVM_AlgoCallBack; 5692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * DC removal filter 5732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DC_2I_D16_TRC_WRA_01_Init(&pInstance->DC_RemovalInstance); 5752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Treble Enhancement 5792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pTE_Taps = (LVM_TE_Data_t *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 5812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent sizeof(LVM_TE_Data_t)); 5822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pTE_State = (LVM_TE_Coefs_t *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 5842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent sizeof(LVM_TE_Coefs_t)); 5852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.TE_OperatingMode = LVM_TE_OFF; 5862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.TE_EffectLevel = 0; 5872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TE_Active = LVM_FALSE; 5882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the volume control and initialise Current to Target 5922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_Volume.MixerStream[0].CallbackParam = 0; 5942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_Volume.MixerStream[0].CallbackSet = 0; 5952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_Volume.MixerStream[0].pCallbackHandle = pInstance; 5962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_Volume.MixerStream[0].pCallBack = LVM_VCCallBack; 5972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* In managed buffering, start with low signal level as delay in buffer management causes a click*/ 5992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstParams->BufferMode == LVM_MANAGED_BUFFERS) 6002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->VC_Volume.MixerStream[0],0,0); 6022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 6042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->VC_Volume.MixerStream[0],LVM_MAXINT_16,LVM_MAXINT_16); 6062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTimeConstant(&pInstance->VC_Volume.MixerStream[0],0,LVM_FS_8000,2); 6092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_VolumedB = 0; 6112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_AVLFixedVolume = 0; 6122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_Active = LVM_FALSE; 6132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_BalanceMix.MixerStream[0].CallbackParam = 0; 6152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_BalanceMix.MixerStream[0].CallbackSet = 0; 6162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_BalanceMix.MixerStream[0].pCallbackHandle = pInstance; 6172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_BalanceMix.MixerStream[0].pCallBack = LVM_VCCallBack; 6182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->VC_BalanceMix.MixerStream[0],LVM_MAXINT_16,LVM_MAXINT_16); 6192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[0],LVM_VC_MIXER_TIME,LVM_FS_8000,2); 6202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_BalanceMix.MixerStream[1].CallbackParam = 0; 6222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_BalanceMix.MixerStream[1].CallbackSet = 0; 6232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_BalanceMix.MixerStream[1].pCallbackHandle = pInstance; 6242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_BalanceMix.MixerStream[1].pCallBack = LVM_VCCallBack; 6252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_Init(&pInstance->VC_BalanceMix.MixerStream[1],LVM_MAXINT_16,LVM_MAXINT_16); 6262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[1],LVM_VC_MIXER_TIME,LVM_FS_8000,2); 6272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the default EQNB pre-gain and pointer to the band definitions 6292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pEQNB_BandDefs = InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 6312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstParams->EQNB_NumBands * sizeof(LVM_EQNB_BandDef_t))); 6322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pEQNB_UserDefs = InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 6332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstParams->EQNB_NumBands * sizeof(LVM_EQNB_BandDef_t))); 6342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the Concert Sound module 6382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Handle_t hCSInstance; /* Instance handle */ 6412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_MemTab_t CS_MemTab; /* Memory table */ 6422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Capabilities_t CS_Capabilities; /* Initial capabilities */ 6432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_ReturnStatus_en LVCS_Status; /* Function call status */ 6442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set default parameters 6472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.VirtualizerReverbLevel = 100; 6492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.VirtualizerType = LVM_CONCERTSOUND; 6502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.VirtualizerOperatingMode = LVM_MODE_OFF; 6512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->CS_Active = LVM_FALSE; 6522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the initialisation capabilities 6552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Capabilities.MaxBlockSize = (LVM_UINT16)InternalBlockSize; 6572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Capabilities.CallBack = pInstance->CallBack; 6582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Capabilities.pBundleInstance = (void*)pInstance; 6592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the memory requirements and then set the address pointers, forcing alignment 6632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Status = LVCS_Memory(LVM_NULL, /* Get the memory requirements */ 6652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &CS_MemTab, 6662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &CS_Capabilities); 6672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_MemTab.Region[LVCS_MEMREGION_PERSISTENT_SLOW_DATA].pBaseAddress = &pInstance->CS_Instance; 6682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_MemTab.Region[LVCS_MEMREGION_PERSISTENT_FAST_DATA].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 6692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_MemTab.Region[LVCS_MEMREGION_PERSISTENT_FAST_DATA].Size); 6702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_MemTab.Region[LVCS_MEMREGION_PERSISTENT_FAST_COEF].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 6712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_MemTab.Region[LVCS_MEMREGION_PERSISTENT_FAST_COEF].Size); 6722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_MemTab.Region[LVCS_MEMREGION_TEMPORARY_FAST].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST], 6732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0); 6742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the Concert Sound instance and save the instance handle 6772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent hCSInstance = LVM_NULL; /* Set to NULL to return handle */ 6792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Status = LVCS_Init(&hCSInstance, /* Initiailse */ 6802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &CS_MemTab, 6812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &CS_Capabilities); 6822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LVCS_Status != LVCS_SUCCESS) return((LVM_ReturnStatus_en)LVCS_Status); 6832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->hCSInstance = hCSInstance; /* Save the instance handle */ 6842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the Bass Enhancement module 6892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Handle_t hDBEInstance; /* Instance handle */ 6922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_MemTab_t DBE_MemTab; /* Memory table */ 6932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Capabilities_t DBE_Capabilities; /* Initial capabilities */ 6942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_ReturnStatus_en LVDBE_Status; /* Function call status */ 6952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the initialisation parameters 6992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.BE_OperatingMode = LVM_BE_OFF; 7012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.BE_CentreFreq = LVM_BE_CENTRE_55Hz; 7022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.BE_EffectLevel = 0; 7032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.BE_HPF = LVM_BE_HPF_OFF; 7042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->DBE_Active = LVM_FALSE; 7062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the initialisation capabilities 7112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Capabilities.SampleRate = LVDBE_CAP_FS_8000 | LVDBE_CAP_FS_11025 | LVDBE_CAP_FS_12000 | LVDBE_CAP_FS_16000 | LVDBE_CAP_FS_22050 | LVDBE_CAP_FS_24000 | LVDBE_CAP_FS_32000 | LVDBE_CAP_FS_44100 | LVDBE_CAP_FS_48000; 7132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Capabilities.CentreFrequency = LVDBE_CAP_CENTRE_55Hz | LVDBE_CAP_CENTRE_55Hz | LVDBE_CAP_CENTRE_66Hz | LVDBE_CAP_CENTRE_78Hz | LVDBE_CAP_CENTRE_90Hz; 7142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Capabilities.MaxBlockSize = (LVM_UINT16)InternalBlockSize; 7152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the memory requirements and then set the address pointers 7192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Status = LVDBE_Memory(LVM_NULL, /* Get the memory requirements */ 7212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &DBE_MemTab, 7222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &DBE_Capabilities); 7232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_MemTab.Region[LVDBE_MEMREGION_INSTANCE].pBaseAddress = &pInstance->DBE_Instance; 7242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_MemTab.Region[LVDBE_MEMREGION_PERSISTENT_DATA].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 7252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_MemTab.Region[LVDBE_MEMREGION_PERSISTENT_DATA].Size); 7262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_MemTab.Region[LVDBE_MEMREGION_PERSISTENT_COEF].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 7272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_MemTab.Region[LVDBE_MEMREGION_PERSISTENT_COEF].Size); 7282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_MemTab.Region[LVDBE_MEMREGION_SCRATCH].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST], 7292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0); 7302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the Dynamic Bass Enhancement instance and save the instance handle 7342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent hDBEInstance = LVM_NULL; /* Set to NULL to return handle */ 7362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Status = LVDBE_Init(&hDBEInstance, /* Initiailse */ 7372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &DBE_MemTab, 7382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &DBE_Capabilities); 7392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LVDBE_Status != LVDBE_SUCCESS) return((LVM_ReturnStatus_en)LVDBE_Status); 7402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->hDBEInstance = hDBEInstance; /* Save the instance handle */ 7412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the N-Band Equaliser module 7462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Handle_t hEQNBInstance; /* Instance handle */ 7492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_MemTab_t EQNB_MemTab; /* Memory table */ 7502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Capabilities_t EQNB_Capabilities; /* Initial capabilities */ 7512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_ReturnStatus_en LVEQNB_Status; /* Function call status */ 7522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the initialisation parameters 7562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.EQNB_OperatingMode = LVM_EQNB_OFF; 7582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.EQNB_NBands = 0; 7592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.pEQNB_BandDefinition = LVM_NULL; 7602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->EQNB_Active = LVM_FALSE; 7612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the initialisation capabilities 7652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.SampleRate = LVEQNB_CAP_FS_8000 | LVEQNB_CAP_FS_11025 | LVEQNB_CAP_FS_12000 | LVEQNB_CAP_FS_16000 | LVEQNB_CAP_FS_22050 | LVEQNB_CAP_FS_24000 | LVEQNB_CAP_FS_32000 | LVEQNB_CAP_FS_44100 | LVEQNB_CAP_FS_48000; 7672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.MaxBlockSize = (LVM_UINT16)InternalBlockSize; 7682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.MaxBands = pInstParams->EQNB_NumBands; 7692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.SourceFormat = LVEQNB_CAP_STEREO | LVEQNB_CAP_MONOINSTEREO; 7702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.CallBack = pInstance->CallBack; 7712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Capabilities.pBundleInstance = (void*)pInstance; 7722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the memory requirements and then set the address pointers, forcing alignment 7762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Status = LVEQNB_Memory(LVM_NULL, /* Get the memory requirements */ 7782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &EQNB_MemTab, 7792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &EQNB_Capabilities); 7802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_MemTab.Region[LVEQNB_MEMREGION_INSTANCE].pBaseAddress = &pInstance->EQNB_Instance; 7812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_MemTab.Region[LVEQNB_MEMREGION_PERSISTENT_DATA].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 7822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_MemTab.Region[LVEQNB_MEMREGION_PERSISTENT_DATA].Size); 7832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_MemTab.Region[LVEQNB_MEMREGION_PERSISTENT_COEF].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 7842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_MemTab.Region[LVEQNB_MEMREGION_PERSISTENT_COEF].Size); 7852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_MemTab.Region[LVEQNB_MEMREGION_SCRATCH].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST], 7862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0); 7872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the Dynamic Bass Enhancement instance and save the instance handle 7912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent hEQNBInstance = LVM_NULL; /* Set to NULL to return handle */ 7932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Status = LVEQNB_Init(&hEQNBInstance, /* Initiailse */ 7942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &EQNB_MemTab, 7952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &EQNB_Capabilities); 7962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LVEQNB_Status != LVEQNB_SUCCESS) return((LVM_ReturnStatus_en)LVEQNB_Status); 7972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->hEQNBInstance = hEQNBInstance; /* Save the instance handle */ 7982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 8012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Headroom management memory allocation 8022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 8032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pHeadroom_BandDefs = InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 8052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_HEADROOM_MAX_NBANDS * sizeof(LVM_HeadroomBandDef_t))); 8062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pHeadroom_UserDefs = InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 8072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_HEADROOM_MAX_NBANDS * sizeof(LVM_HeadroomBandDef_t))); 8082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Headroom management parameters initialisation */ 8102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.NHeadroomBands = 2; 8112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.pHeadroomDefinition = pInstance->pHeadroom_BandDefs; 8122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.pHeadroomDefinition[0].Limit_Low = 20; 8132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.pHeadroomDefinition[0].Limit_High = 4999; 8142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.pHeadroomDefinition[0].Headroom_Offset = 3; 8152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.pHeadroomDefinition[1].Limit_Low = 5000; 8162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.pHeadroomDefinition[1].Limit_High = 24000; 8172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.pHeadroomDefinition[1].Headroom_Offset = 4; 8182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.Headroom_OperatingMode = LVM_HEADROOM_ON; 8192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Headroom =0; 8212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 8252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Initialise the PSA module 8262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 8272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVPSA_Handle_t hPSAInstance = LVM_NULL; /* Instance handle */ 8292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_MemTab_t PSA_MemTab; 8302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_RETURN PSA_Status; /* Function call status */ 8312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_FilterParam_t FiltersParams[9]; 8322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstParams->PSA_Included==LVM_PSA_ON) 8342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_InitParams.SpectralDataBufferDuration = (LVM_UINT16) 500; 8362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_InitParams.MaxInputBlockSize = (LVM_UINT16) 2048; 8372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_InitParams.nBands = (LVM_UINT16) 9; 8382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_InitParams.pFiltersParams = &FiltersParams[0]; 8392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for(i = 0; i < pInstance->PSA_InitParams.nBands; i++) 8402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FiltersParams[i].CenterFrequency = (LVM_UINT16) 1000; 8422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FiltersParams[i].QFactor = (LVM_UINT16) 100; 8432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FiltersParams[i].PostGain = (LVM_INT16) 0; 8442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /*Get the memory requirements and then set the address pointers*/ 8472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_Status = LVPSA_Memory (hPSAInstance, 8482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &PSA_MemTab, 8492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->PSA_InitParams); 8502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (PSA_Status != LVPSA_OK) 8522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return((LVM_ReturnStatus_en) LVM_ALGORITHMPSA); 8542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Slow Data */ 8572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], 8582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_SLOW_DATA].Size); 8592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Fast Data */ 8622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], 8632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_FAST_DATA].Size); 8642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Fast Coef */ 8672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], 8682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_PERSISTENT_FAST_COEF].Size); 8692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Fast Temporary */ 8712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pPSAInput = InstAlloc_AddMember(&AllocMem[LVM_TEMPORARY_FAST], 8722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_UINT32) MAX_INTERNAL_BLOCKSIZE * sizeof(LVM_INT16)); 8732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_MemTab.Region[LVM_TEMPORARY_FAST].pBaseAddress = (void *)InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST],0); 8752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /*Initialise PSA instance and save the instance handle*/ 8782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_ControlParams.Fs = LVM_FS_48000; 8792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_ControlParams.LevelDetectionSpeed = LVPSA_SPEED_MEDIUM; 8802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_Status = LVPSA_Init (&hPSAInstance, 8812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->PSA_InitParams, 8822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->PSA_ControlParams, 8832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &PSA_MemTab); 8842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (PSA_Status != LVPSA_OK) 8862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return((LVM_ReturnStatus_en) LVM_ALGORITHMPSA); 8882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->hPSAInstance = hPSAInstance; /* Save the instance handle */ 8912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_GainOffset = 0; 8922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 8942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->hPSAInstance = LVM_NULL; 8962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 8992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the initialisation parameters. 9002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 9012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.PSA_PeakDecayRate = LVM_PSA_SPEED_MEDIUM; 9022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.PSA_Enable = LVM_PSA_OFF; 9032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 9062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copy the initial parameters to the new parameters for correct readback of 9072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * the settings. 9082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 9092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewParams = pInstance->Params; 9102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 9132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Create configuration number 9142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 9152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ConfigurationNumber = 0x00000000; 9162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ConfigurationNumber += LVM_CS_MASK; 9172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ConfigurationNumber += LVM_EQNB_MASK; 9182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ConfigurationNumber += LVM_DBE_MASK; 9192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ConfigurationNumber += LVM_VC_MASK; 9202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ConfigurationNumber += LVM_PSA_MASK; 9212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(((pInstance->ConfigurationNumber & LVM_CS_MASK)!=0) || 9232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pInstance->ConfigurationNumber & LVM_DBE_MASK)!=0) || 9242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pInstance->ConfigurationNumber & LVM_EQNB_MASK)!=0)|| 9252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pInstance->ConfigurationNumber & LVM_TE_MASK)!=0) || 9262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pInstance->ConfigurationNumber & LVM_VC_MASK)!=0)) 9272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 9282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->BlickSizeMultiple = 4; 9292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 9312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 9322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->BlickSizeMultiple = 1; 9332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(Status); 9362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 9372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 9402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_ClearAudioBuffers */ 9422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 9442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function is used to clear the internal audio buffers of the bundle. */ 9452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 9472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 9482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 9502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_SUCCESS Initialisation succeeded */ 9512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_NULLADDRESS Instance or scratch memory has a NULL pointer */ 9522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 9542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function must not be interrupted by the LVM_Process function */ 9552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 9572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9582c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_ClearAudioBuffers(LVM_Handle_t hInstance) 9592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 9602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_MemTab_t MemTab; /* Memory table */ 9612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_InstParams_t InstParams; /* Instance parameters */ 9622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t Params; /* Control Parameters */ 9632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance = (LVM_Instance_t *)hInstance; /* Pointer to Instance */ 964f6c7a40f8cbbd2fa1a4131ef91b30cf7c5c2d0d7Eric Laurent LVM_HeadroomParams_t HeadroomParams; 9652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(hInstance == LVM_NULL){ 9682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return LVM_NULLADDRESS; 9692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Save the control parameters */ /* coverity[unchecked_value] */ /* Do not check return value internal function calls */ 9722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_GetControlParameters(hInstance, &Params); 9732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 974f6c7a40f8cbbd2fa1a4131ef91b30cf7c5c2d0d7Eric Laurent /*Save the headroom parameters*/ 975f6c7a40f8cbbd2fa1a4131ef91b30cf7c5c2d0d7Eric Laurent LVM_GetHeadroomParams(hInstance, &HeadroomParams); 976f6c7a40f8cbbd2fa1a4131ef91b30cf7c5c2d0d7Eric Laurent 9772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Retrieve allocated buffers in memtab */ 9782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_GetMemoryTable(hInstance, &MemTab, LVM_NULL); 9792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Save the instance parameters */ 9812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstParams = pInstance->InstParams; 9822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Call LVM_GetInstanceHandle to re-initialise the bundle */ 9842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_GetInstanceHandle( &hInstance, 9852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &MemTab, 9862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &InstParams); 9872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Restore control parameters */ /* coverity[unchecked_value] */ /* Do not check return value internal function calls */ 9892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_SetControlParameters(hInstance, &Params); 9902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 991f6c7a40f8cbbd2fa1a4131ef91b30cf7c5c2d0d7Eric Laurent /*Restore the headroom parameters*/ 992f6c7a40f8cbbd2fa1a4131ef91b30cf7c5c2d0d7Eric Laurent LVM_SetHeadroomParams(hInstance, &HeadroomParams); 993f6c7a40f8cbbd2fa1a4131ef91b30cf7c5c2d0d7Eric Laurent 9942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* DC removal filter */ 9952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DC_2I_D16_TRC_WRA_01_Init(&pInstance->DC_RemovalInstance); 9962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return LVM_SUCCESS; 9992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 10002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1003