From c59c6fd7f859b4010d788db89b8d4d76bbb70e57 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Wed, 4 Aug 2010 06:33:52 -0700 Subject: LVM release 1.05 delivery - Click have been removed from the HP filter activation in the BassBosst Effect. - SessionId is now stored as a SessionNo - Effects now stop being called after a delay - Unix EOL fixed for .java and .xml - Updated lines limited to 100 characters. - Removed the remaining warnings from the wrapper code - Added reverb Change-Id: I03a2b3b5ee2286958f4901acc8d9b0daf9e2d7c6 --- .../lvm/lib/Reverb/src/LVREV_GetMemoryTable.c | 254 +++++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100755 media/libeffects/lvm/lib/Reverb/src/LVREV_GetMemoryTable.c (limited to 'media/libeffects/lvm/lib/Reverb/src/LVREV_GetMemoryTable.c') diff --git a/media/libeffects/lvm/lib/Reverb/src/LVREV_GetMemoryTable.c b/media/libeffects/lvm/lib/Reverb/src/LVREV_GetMemoryTable.c new file mode 100755 index 0000000..e16a3d3 --- /dev/null +++ b/media/libeffects/lvm/lib/Reverb/src/LVREV_GetMemoryTable.c @@ -0,0 +1,254 @@ +/* + * Copyright (C) 2004-2010 NXP Software + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/****************************************************************************************/ +/* */ +/* Project:: */ +/* $Author: beq07716 $*/ +/* $Revision: 1007 $*/ +/* $Date: 2010-06-28 14:06:36 +0200 (Mon, 28 Jun 2010) $*/ +/* */ +/****************************************************************************************/ + +/****************************************************************************************/ +/* */ +/* Includes */ +/* */ +/****************************************************************************************/ +#include "LVREV_Private.h" +#include "InstAlloc.h" + +/****************************************************************************************/ +/* */ +/* FUNCTION: LVREV_GetMemoryTable */ +/* */ +/* DESCRIPTION: */ +/* This function is used for memory allocation and free. It can be called in */ +/* two ways: */ +/* */ +/* hInstance = NULL Returns the memory requirements */ +/* hInstance = Instance handle Returns the memory requirements and allocated */ +/* base addresses. */ +/* */ +/* When this function is called for memory allocation (hInstance=NULL) the memory */ +/* base address pointers are NULL on return. */ +/* */ +/* When the function is called for free (hInstance = Instance Handle) the memory */ +/* table returns the allocated memory and base addresses used during initialisation. */ +/* */ +/* PARAMETERS: */ +/* hInstance Instance Handle */ +/* pMemoryTable Pointer to an empty memory table */ +/* pInstanceParams Pointer to the instance parameters */ +/* */ +/* RETURNS: */ +/* LVREV_Success Succeeded */ +/* LVREV_NULLADDRESS When pMemoryTable is NULL */ +/* LVREV_NULLADDRESS When requesting memory requirements and pInstanceParams */ +/* is NULL */ +/* */ +/* NOTES: */ +/* 1. This function may be interrupted by the LVREV_Process function */ +/* */ +/****************************************************************************************/ +LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, + LVREV_MemoryTable_st *pMemoryTable, + LVREV_InstanceParams_st *pInstanceParams) +{ + + INST_ALLOC SlowData; + INST_ALLOC FastData; + INST_ALLOC FastCoef; + INST_ALLOC Temporary; + LVM_INT16 i; + LVM_UINT16 MaxBlockSize; + + + /* + * Check for error conditions + */ + /* Check for NULL pointer */ + if (pMemoryTable == LVM_NULL) + { + return(LVREV_NULLADDRESS); + } + + /* + * Check all instance parameters are in range + */ + if (pInstanceParams != LVM_NULL) + { + /* + * Call for memory allocation, so check the parameters + */ + /* Check for a non-zero block size */ + if (pInstanceParams->MaxBlockSize == 0) + { + return LVREV_OUTOFRANGE; + } + + /* Check for a valid number of delay lines */ + if ((pInstanceParams->NumDelays != LVREV_DELAYLINES_1) && + (pInstanceParams->NumDelays != LVREV_DELAYLINES_2) && + (pInstanceParams->NumDelays != LVREV_DELAYLINES_4)) + { + return LVREV_OUTOFRANGE; + } + } + + /* + * Initialise the InstAlloc instances + */ + InstAlloc_Init(&SlowData, (void *)LVM_NULL); + InstAlloc_Init(&FastData, (void *)LVM_NULL); + InstAlloc_Init(&FastCoef, (void *)LVM_NULL); + InstAlloc_Init(&Temporary, (void *)LVM_NULL); + + + /* + * Fill in the memory table + */ + if (hInstance == LVM_NULL) + { + /* + * Check for null pointers + */ + if (pInstanceParams == LVM_NULL) + { + return(LVREV_NULLADDRESS); + } + + + /* + * Select the maximum internal block size + */ + if(pInstanceParams->NumDelays ==LVREV_DELAYLINES_4) + { + MaxBlockSize = LVREV_MAX_AP3_DELAY; + } + else if(pInstanceParams->NumDelays ==LVREV_DELAYLINES_2) + { + MaxBlockSize = LVREV_MAX_AP1_DELAY; + } + else + { + MaxBlockSize = LVREV_MAX_AP0_DELAY; + } + + if(MaxBlockSize>pInstanceParams->MaxBlockSize) + { + MaxBlockSize=pInstanceParams->MaxBlockSize; + } + + + /* + * Slow data memory + */ + InstAlloc_AddMember(&SlowData, sizeof(LVREV_Instance_st)); + pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Size = InstAlloc_GetTotal(&SlowData); + pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Type = LVM_PERSISTENT_SLOW_DATA; + pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress = LVM_NULL; + + + /* + * Persistent fast data memory + */ + InstAlloc_AddMember(&FastData, sizeof(LVREV_FastData_st)); + if(pInstanceParams->NumDelays == LVREV_DELAYLINES_4) + { + InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY * sizeof(LVM_INT32)); + InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY * sizeof(LVM_INT32)); + InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_INT32)); + InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); + } + + if(pInstanceParams->NumDelays == LVREV_DELAYLINES_2) + { + InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_INT32)); + InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); + } + + if(pInstanceParams->NumDelays == LVREV_DELAYLINES_1) + { + InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); + } + + pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size = InstAlloc_GetTotal(&FastData); + pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Type = LVM_PERSISTENT_FAST_DATA; + pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress = LVM_NULL; + + + /* + * Persistent fast coefficient memory + */ + InstAlloc_AddMember(&FastCoef, sizeof(LVREV_FastCoef_st)); + pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Size = InstAlloc_GetTotal(&FastCoef); + pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Type = LVM_PERSISTENT_FAST_COEF; + pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL; + + + /* + * Temporary fast memory + */ + InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* General purpose scratch memory */ + InstAlloc_AddMember(&Temporary, 2*sizeof(LVM_INT32) * MaxBlockSize); /* Mono->stereo input saved for end mix */ + + if(pInstanceParams->NumDelays == LVREV_DELAYLINES_4) + { + for(i=0; i<4; i++) + { + InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* A Scratch buffer for each delay line */ + } + } + + if(pInstanceParams->NumDelays == LVREV_DELAYLINES_2) + { + for(i=0; i<2; i++) + { + InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* A Scratch buffer for each delay line */ + } + } + + if(pInstanceParams->NumDelays == LVREV_DELAYLINES_1) + { + for(i=0; i<1; i++) + { + InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* A Scratch buffer for each delay line */ + } + } + + pMemoryTable->Region[LVM_TEMPORARY_FAST].Size = InstAlloc_GetTotal(&Temporary); + pMemoryTable->Region[LVM_TEMPORARY_FAST].Type = LVM_TEMPORARY_FAST; + pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress = LVM_NULL; + + } + else + { + LVREV_Instance_st *pLVREV_Private = (LVREV_Instance_st *)hInstance; + + + /* + * Read back memory allocation table + */ + *pMemoryTable = pLVREV_Private->MemoryTable; + } + + + return(LVREV_SUCCESS); +} + +/* End of file */ -- cgit v1.1