1c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* 2c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Copyright (C) 2004-2010 NXP Software 3c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Copyright (C) 2010 The Android Open Source Project 4c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * 5c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 6c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * you may not use this file except in compliance with the License. 7c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * You may obtain a copy of the License at 8c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * 9c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 10c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * 11c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Unless required by applicable law or agreed to in writing, software 12c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 13c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * See the License for the specific language governing permissions and 15c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * limitations under the License. 16c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 17c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 18c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/ 19c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 20c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* Includes */ 21c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 22c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/ 23c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent#include "LVREV_Private.h" 24c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent#include "InstAlloc.h" 25c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 26c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/ 27c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 28c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* FUNCTION: LVREV_GetMemoryTable */ 29c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 30c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* DESCRIPTION: */ 31c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* This function is used for memory allocation and free. It can be called in */ 32c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* two ways: */ 33c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 34c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* hInstance = NULL Returns the memory requirements */ 35c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* hInstance = Instance handle Returns the memory requirements and allocated */ 36c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* base addresses. */ 37c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 38c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* When this function is called for memory allocation (hInstance=NULL) the memory */ 39c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* base address pointers are NULL on return. */ 40c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 41c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* When the function is called for free (hInstance = Instance Handle) the memory */ 42c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* table returns the allocated memory and base addresses used during initialisation. */ 43c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 44c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* PARAMETERS: */ 45c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* hInstance Instance Handle */ 46c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* pMemoryTable Pointer to an empty memory table */ 47c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* pInstanceParams Pointer to the instance parameters */ 48c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 49c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* RETURNS: */ 50c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* LVREV_Success Succeeded */ 51c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* LVREV_NULLADDRESS When pMemoryTable is NULL */ 52c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* LVREV_NULLADDRESS When requesting memory requirements and pInstanceParams */ 53c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* is NULL */ 54c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 55c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* NOTES: */ 56c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* 1. This function may be interrupted by the LVREV_Process function */ 57c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 58c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/ 59c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric LaurentLVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, 60c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVREV_MemoryTable_st *pMemoryTable, 61c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVREV_InstanceParams_st *pInstanceParams) 62c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent{ 63c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 64c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent INST_ALLOC SlowData; 65c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent INST_ALLOC FastData; 66c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent INST_ALLOC FastCoef; 67c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent INST_ALLOC Temporary; 68c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVM_INT16 i; 69c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVM_UINT16 MaxBlockSize; 70c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 71c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 72c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 73c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Check for error conditions 74c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 75c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Check for NULL pointer */ 76c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (pMemoryTable == LVM_NULL) 77c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 78c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return(LVREV_NULLADDRESS); 79c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 80c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 81c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 82c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Check all instance parameters are in range 83c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 84c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (pInstanceParams != LVM_NULL) 85c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 86c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 87c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Call for memory allocation, so check the parameters 88c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 89c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Check for a non-zero block size */ 90c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (pInstanceParams->MaxBlockSize == 0) 91c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 92c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return LVREV_OUTOFRANGE; 93c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 94c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 95c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Check for a valid number of delay lines */ 96c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if ((pInstanceParams->NumDelays != LVREV_DELAYLINES_1) && 97c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent (pInstanceParams->NumDelays != LVREV_DELAYLINES_2) && 98c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent (pInstanceParams->NumDelays != LVREV_DELAYLINES_4)) 99c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 100c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return LVREV_OUTOFRANGE; 101c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 102c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 103c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 104c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 105c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Initialise the InstAlloc instances 106c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 107c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_Init(&SlowData, (void *)LVM_NULL); 108c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_Init(&FastData, (void *)LVM_NULL); 109c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_Init(&FastCoef, (void *)LVM_NULL); 110c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_Init(&Temporary, (void *)LVM_NULL); 111c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 112c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 113c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 114c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Fill in the memory table 115c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 116c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (hInstance == LVM_NULL) 117c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 118c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 119c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Check for null pointers 120c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 121c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (pInstanceParams == LVM_NULL) 122c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 123c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return(LVREV_NULLADDRESS); 124c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 125c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 126c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 127c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 128c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Select the maximum internal block size 129c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 130c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays ==LVREV_DELAYLINES_4) 131c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 132c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent MaxBlockSize = LVREV_MAX_AP3_DELAY; 133c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 134c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent else if(pInstanceParams->NumDelays ==LVREV_DELAYLINES_2) 135c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 136c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent MaxBlockSize = LVREV_MAX_AP1_DELAY; 137c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 138c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent else 139c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 140c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent MaxBlockSize = LVREV_MAX_AP0_DELAY; 141c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 142c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 143c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(MaxBlockSize>pInstanceParams->MaxBlockSize) 144c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 145c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent MaxBlockSize=pInstanceParams->MaxBlockSize; 146c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 147c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 148c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 149c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 150c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Slow data memory 151c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 152c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&SlowData, sizeof(LVREV_Instance_st)); 153c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Size = InstAlloc_GetTotal(&SlowData); 154c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Type = LVM_PERSISTENT_SLOW_DATA; 155c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress = LVM_NULL; 156c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 157c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 158c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 159c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Persistent fast data memory 160c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 161c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastData, sizeof(LVREV_FastData_st)); 162c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_4) 163c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 164c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY * sizeof(LVM_INT32)); 165c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY * sizeof(LVM_INT32)); 166c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_INT32)); 167c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); 168c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 169c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 170c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_2) 171c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 172c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_INT32)); 173c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); 174c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 175c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 176c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_1) 177c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 178c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); 179c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 180c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 181c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size = InstAlloc_GetTotal(&FastData); 182c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Type = LVM_PERSISTENT_FAST_DATA; 183c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress = LVM_NULL; 184c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 185c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 186c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 187c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Persistent fast coefficient memory 188c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 189c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&FastCoef, sizeof(LVREV_FastCoef_st)); 190c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Size = InstAlloc_GetTotal(&FastCoef); 191c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Type = LVM_PERSISTENT_FAST_COEF; 192c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL; 193c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 194c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 195c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 196c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Temporary fast memory 197c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 198c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* General purpose scratch memory */ 199c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&Temporary, 2*sizeof(LVM_INT32) * MaxBlockSize); /* Mono->stereo input saved for end mix */ 200c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 201c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_4) 202c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 203c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent for(i=0; i<4; i++) 204c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 205c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* A Scratch buffer for each delay line */ 206c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 207c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 208c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 209c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_2) 210c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 211c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent for(i=0; i<2; i++) 212c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 213c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* A Scratch buffer for each delay line */ 214c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 215c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 216c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 217c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_1) 218c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 219c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent for(i=0; i<1; i++) 220c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 221c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* A Scratch buffer for each delay line */ 222c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 223c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 224c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 225c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_TEMPORARY_FAST].Size = InstAlloc_GetTotal(&Temporary); 226c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_TEMPORARY_FAST].Type = LVM_TEMPORARY_FAST; 227c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress = LVM_NULL; 228c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 229c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 230c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent else 231c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 232c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVREV_Instance_st *pLVREV_Private = (LVREV_Instance_st *)hInstance; 233c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 234c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 235c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 236c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Read back memory allocation table 237c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 238c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent *pMemoryTable = pLVREV_Private->MemoryTable; 239c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 240c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 241c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 242c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return(LVREV_SUCCESS); 243c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent} 244c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 245c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* End of file */ 246