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/* */ 29c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* FUNCTION: LVREV_GetInstanceHandle */ 30c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 31c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* DESCRIPTION: */ 32c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* This function is used to create a LVREV module instance. It returns the created */ 33c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* instance handle through phInstance. All parameters are set to their default, */ 34c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* inactive state. */ 35c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 36c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* PARAMETERS: */ 37c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* phInstance pointer to the instance handle */ 38c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* pMemoryTable Pointer to the memory definition table */ 39c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* pInstanceParams Pointer to the instance parameters */ 40c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 41c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* RETURNS: */ 42c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* LVREV_SUCCESS Succeeded */ 43c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* LVREV_NULLADDRESS When phInstance or pMemoryTable or pInstanceParams is NULL */ 44c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* LVREV_NULLADDRESS When one of the memory regions has a NULL pointer */ 45c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 46c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* NOTES: */ 47c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* */ 48c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/ 49c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric LaurentLVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t *phInstance, 50c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVREV_MemoryTable_st *pMemoryTable, 51c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVREV_InstanceParams_st *pInstanceParams) 52c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent{ 53c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 54c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent INST_ALLOC SlowData; 55c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent INST_ALLOC FastData; 56c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent INST_ALLOC FastCoef; 57c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent INST_ALLOC Temporary; 58c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVREV_Instance_st *pLVREV_Private; 59c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVM_INT16 i; 60c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVM_UINT16 MaxBlockSize; 61c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 62c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 63c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 64c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Check for error conditions 65c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 66c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Check for NULL pointers */ 67c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if((phInstance == LVM_NULL) || (pMemoryTable == LVM_NULL) || (pInstanceParams == LVM_NULL)) 68c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 69c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return LVREV_NULLADDRESS; 70c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 71c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Check the memory table for NULL pointers */ 72c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent for (i = 0; i < LVREV_NR_MEMORY_REGIONS; i++) 73c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 74c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (pMemoryTable->Region[i].Size!=0) 75c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 76c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (pMemoryTable->Region[i].pBaseAddress==LVM_NULL) 77c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 78c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return(LVREV_NULLADDRESS); 79c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 80c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 81c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 82c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 83c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 84c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Check all instance parameters are in range 85c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 86c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Check for a non-zero block size */ 87c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (pInstanceParams->MaxBlockSize == 0) 88c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 89c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return LVREV_OUTOFRANGE; 90c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 91c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 92c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Check for a valid number of delay lines */ 93c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if ((pInstanceParams->NumDelays != LVREV_DELAYLINES_1)&& 94c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent (pInstanceParams->NumDelays != LVREV_DELAYLINES_2)&& 95c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent (pInstanceParams->NumDelays != LVREV_DELAYLINES_4)) 96c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 97c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return LVREV_OUTOFRANGE; 98c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 99c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 100c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 101c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Initialise the InstAlloc instances 102c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 103c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_Init(&SlowData, pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress); 104c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_Init(&FastData, pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress); 105c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_Init(&FastCoef, pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress); 106c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent InstAlloc_Init(&Temporary, pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress); 107c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 108c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 109c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Zero all memory regions 110c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 111d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifdef BUILD_FLOAT 112d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, 113d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri (LVM_FLOAT *)pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress, 114d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri (LVM_INT16)((pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Size) / \ 115d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT))); 116d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, 117d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri (LVM_FLOAT *)pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress, 118d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri (LVM_INT16)((pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size) / \ 119d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT))); 120d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, 121d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri (LVM_FLOAT *)pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress, 122d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri (LVM_INT16)((pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Size) / \ 123d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT))); 124d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, 125d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri (LVM_FLOAT *)pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress, 126d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri (LVM_INT16)((pMemoryTable->Region[LVM_TEMPORARY_FAST].Size) / \ 127d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT))); 128d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#else 129d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_16(0, (LVM_INT16 *)pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress, (LVM_INT16)((pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Size)/sizeof(LVM_INT16))); 130d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_16(0, (LVM_INT16 *)pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress, (LVM_INT16)((pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size)/sizeof(LVM_INT16))); 131d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_16(0, (LVM_INT16 *)pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress, (LVM_INT16)((pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Size)/sizeof(LVM_INT16))); 132d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_16(0, (LVM_INT16 *)pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress, (LVM_INT16)((pMemoryTable->Region[LVM_TEMPORARY_FAST].Size)/sizeof(LVM_INT16))); 133d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 134c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 135c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Set the instance handle if not already initialised 136c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 137c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if (*phInstance == LVM_NULL) 138c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 139c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent *phInstance = InstAlloc_AddMember(&SlowData, sizeof(LVREV_Instance_st)); 140c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 141c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private =(LVREV_Instance_st *)*phInstance; 142c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->MemoryTable = *pMemoryTable; 143c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 144c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays ==LVREV_DELAYLINES_4) 145c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 146c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent MaxBlockSize = LVREV_MAX_AP3_DELAY; 147c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 148c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent else if(pInstanceParams->NumDelays ==LVREV_DELAYLINES_2) 149c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 150c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent MaxBlockSize = LVREV_MAX_AP1_DELAY; 151c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 152c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent else 153c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 154c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent MaxBlockSize = LVREV_MAX_AP0_DELAY; 155c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 156c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 157c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(MaxBlockSize>pInstanceParams->MaxBlockSize) 158c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 159c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent MaxBlockSize=pInstanceParams->MaxBlockSize; 160c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 161c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 162c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 163c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 164c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Set the data, coefficient and temporary memory pointers 165c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 166c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pFastData = InstAlloc_AddMember(&FastData, sizeof(LVREV_FastData_st)); /* Fast data memory base address */ 167d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifndef BUILD_FLOAT 168c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_4) 169c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 170c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pDelay_T[3] = InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY * sizeof(LVM_INT32)); 171c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pDelay_T[2] = InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY * sizeof(LVM_INT32)); 172c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pDelay_T[1] = InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_INT32)); 173c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pDelay_T[0] = InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); 174c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 175c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent for( i = 0; i < 4; i++) 176c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 177c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pScratchDelayLine[i] = InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* Scratch for each delay line output */ 178c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 179c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 180c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LoadConst_32(0,pLVREV_Private->pDelay_T[3] ,(LVM_INT16)LVREV_MAX_T3_DELAY); 181c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LoadConst_32(0,pLVREV_Private->pDelay_T[2] ,(LVM_INT16)LVREV_MAX_T2_DELAY); 182c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LoadConst_32(0,pLVREV_Private->pDelay_T[1] ,(LVM_INT16)LVREV_MAX_T1_DELAY); 183c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LoadConst_32(0,pLVREV_Private->pDelay_T[0] ,(LVM_INT16)LVREV_MAX_T0_DELAY); 184c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 185c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 186c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_2) 187c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 188c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pDelay_T[1] = InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_INT32)); 189c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pDelay_T[0] = InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); 190c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 191c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent for( i = 0; i < 2; i++) 192c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 193c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pScratchDelayLine[i] = InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* Scratch for each delay line output */ 194c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 195c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 196c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LoadConst_32(0,pLVREV_Private->pDelay_T[1] , (LVM_INT16)LVREV_MAX_T1_DELAY); 197c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LoadConst_32(0,pLVREV_Private->pDelay_T[0] , (LVM_INT16)LVREV_MAX_T0_DELAY); 198c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 199c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 200c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent if(pInstanceParams->NumDelays == LVREV_DELAYLINES_1) 201c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 202c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pDelay_T[0] = InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32)); 203c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 204c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent for( i = 0; i < 1; i++) 205c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 206c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pScratchDelayLine[i] = InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* Scratch for each delay line output */ 207c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 208c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 209c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LoadConst_32(0,pLVREV_Private->pDelay_T[0] , (LVM_INT16)LVREV_MAX_T0_DELAY); 210c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 211d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#else 212d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri if(pInstanceParams->NumDelays == LVREV_DELAYLINES_4) 213d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 214d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pDelay_T[3] = InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY * \ 215d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT)); 216d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pDelay_T[2] = InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY * \ 217d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT)); 218d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pDelay_T[1] = InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * \ 219d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT)); 220d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pDelay_T[0] = InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * \ 221d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT)); 222d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 223d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri for(i = 0; i < 4; i++) 224d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 225d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri /* Scratch for each delay line output */ 226d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pScratchDelayLine[i] = InstAlloc_AddMember(&Temporary, 227d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT) * \ 228d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri MaxBlockSize); 229d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 230c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 231d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, pLVREV_Private->pDelay_T[3], LVREV_MAX_T3_DELAY); 232d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, pLVREV_Private->pDelay_T[2], LVREV_MAX_T2_DELAY); 233d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY); 234d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); 235d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 236d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 237d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri if(pInstanceParams->NumDelays == LVREV_DELAYLINES_2) 238d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 239d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pDelay_T[1] = InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * \ 240d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT)); 241d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pDelay_T[0] = InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * \ 242d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT)); 243d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 244d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri for(i = 0; i < 2; i++) 245d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 246d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri /* Scratch for each delay line output */ 247d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pScratchDelayLine[i] = InstAlloc_AddMember(&Temporary, 248d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT) * \ 249d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri MaxBlockSize); 250d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 251d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 252d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, pLVREV_Private->pDelay_T[1], (LVM_INT16)LVREV_MAX_T1_DELAY); 253d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY); 254d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 255d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 256d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri if(pInstanceParams->NumDelays == LVREV_DELAYLINES_1) 257d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 258d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pDelay_T[0] = InstAlloc_AddMember(&FastData, 259d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); 260d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 261d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri for(i = 0; i < 1; i++) 262d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 263d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri /* Scratch for each delay line output */ 264d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pScratchDelayLine[i] = InstAlloc_AddMember(&Temporary, 265d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri sizeof(LVM_FLOAT) * \ 266d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri MaxBlockSize); 267d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 268d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 269d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY); 270d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 271d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 272c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* All-pass delay buffer addresses and sizes */ 273c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->T[0] = LVREV_MAX_T0_DELAY; 274c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->T[1] = LVREV_MAX_T1_DELAY; 275c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->T[2] = LVREV_MAX_T2_DELAY; 276c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->T[3] = LVREV_MAX_T3_DELAY; 277c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->AB_Selection = 1; /* Select smoothing A to B */ 278c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 279c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 280c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pFastCoef = InstAlloc_AddMember(&FastCoef, sizeof(LVREV_FastCoef_st)); /* Fast coefficient memory base address */ 281d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifndef BUILD_FLOAT 282c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pScratch = InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize); /* General purpose scratch */ 283c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pInputSave = InstAlloc_AddMember(&Temporary, 2 * sizeof(LVM_INT32) * MaxBlockSize); /* Mono->stereo input save for end mix */ 284c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LoadConst_32(0, pLVREV_Private->pInputSave, (LVM_INT16)(MaxBlockSize*2)); 285d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#else 286d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri /* General purpose scratch */ 287d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pScratch = InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * \ 288d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri MaxBlockSize); 289d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri /* Mono->stereo input save for end mix */ 290d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->pInputSave = InstAlloc_AddMember(&Temporary, 2 * sizeof(LVM_FLOAT) * \ 291d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri MaxBlockSize); 292d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LoadConst_Float(0, pLVREV_Private->pInputSave, (LVM_INT16)(MaxBlockSize * 2)); 293d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 294c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 295c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 296c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Save the instance parameters in the instance structure 297c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 298c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->InstanceParams = *pInstanceParams; 299c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 300c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 301c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 302c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Set the parameters to invalid 303c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 304c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->CurrentParams.SampleRate = LVM_FS_INVALID; 305c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->CurrentParams.OperatingMode = LVM_MODE_DUMMY; 306c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->CurrentParams.SourceFormat = LVM_SOURCE_DUMMY; 307c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 308c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->bControlPending = LVM_FALSE; 309c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->bFirstControl = LVM_TRUE; 310c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->bDisableReverb = LVM_FALSE; 311c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 312c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 313c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 314c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Set mixer parameters 315c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 316c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.CallbackParam2 = 0; 317c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.pCallbackHandle2 = pLVREV_Private; 318c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.pGeneralPurpose2 = LVM_NULL; 319c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.pCallBack2 = BypassMixer_Callback; 320c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.CallbackSet2 = LVM_FALSE; 321c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.Current2 = 0; 322c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.Target2 = 0; 323c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.CallbackParam1 = 0; 324c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.pCallbackHandle1 = LVM_NULL; 325c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.pGeneralPurpose1 = LVM_NULL; 326c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.pCallBack1 = LVM_NULL; 327c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->BypassMixer.CallbackSet1 = LVM_FALSE; 3282d3bf535004f7310fe04a4b5f46b6747cdb3c93fEric Laurent pLVREV_Private->BypassMixer.Current1 = 0x00000000; 3292d3bf535004f7310fe04a4b5f46b6747cdb3c93fEric Laurent pLVREV_Private->BypassMixer.Target1 = 0x00000000; 330c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 331c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->RoomSizeInms = 100; // 100 msec 332c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 333c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 334c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 335c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Set the output gain mixer parameters 336c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 337c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->GainMixer.CallbackParam = 0; 338c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->GainMixer.pCallbackHandle = LVM_NULL; 339c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->GainMixer.pGeneralPurpose = LVM_NULL; 340c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->GainMixer.pCallBack = LVM_NULL; 341c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->GainMixer.CallbackSet = LVM_FALSE; 342d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifndef BUILD_FLOAT 343c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->GainMixer.Current = 0x03ffffff; 344c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->GainMixer.Target = 0x03ffffff; 345d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#else 346d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->GainMixer.Current = 0.03125f;//0x03ffffff; 347d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->GainMixer.Target = 0.03125f;//0x03ffffff; 348d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 349c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 350c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* 351c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Set the All-Pass Filter mixers 352c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */ 353c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent for (i=0; i<4; i++) 354c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent { 355c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pOffsetA[i] = pLVREV_Private->pDelay_T[i]; 356c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->pOffsetB[i] = pLVREV_Private->pDelay_T[i]; 357c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Delay tap selection mixer */ 358c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].CallbackParam2 = 0; 359c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].pCallbackHandle2 = LVM_NULL; 360c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].pGeneralPurpose2 = LVM_NULL; 361c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].pCallBack2 = LVM_NULL; 362c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].CallbackSet2 = LVM_FALSE; 363c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].Current2 = 0; 364c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].Target2 = 0; 365c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].CallbackParam1 = 0; 366c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].pCallbackHandle1 = LVM_NULL; 367c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].pGeneralPurpose1 = LVM_NULL; 368c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].pCallBack1 = LVM_NULL; 369c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].CallbackSet1 = LVM_FALSE; 370c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].Current1 = 0; 371d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifndef BUILD_FLOAT 372c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_APTaps[i].Target1 = 0x7fffffff; 373d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#else 374d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri pLVREV_Private->Mixer_APTaps[i].Target1 = 1; 375d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 376c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Feedforward mixer */ 377c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedforward[i].CallbackParam = 0; 378c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedforward[i].pCallbackHandle = LVM_NULL; 379c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedforward[i].pGeneralPurpose = LVM_NULL; 380c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedforward[i].pCallBack = LVM_NULL; 381c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedforward[i].CallbackSet = LVM_FALSE; 382c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedforward[i].Current = 0; 383c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedforward[i].Target = 0; 384c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Feedback mixer */ 385c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedback[i].CallbackParam = 0; 386c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedback[i].pCallbackHandle = LVM_NULL; 387c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedback[i].pGeneralPurpose = LVM_NULL; 388c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedback[i].pCallBack = LVM_NULL; 389c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedback[i].CallbackSet = LVM_FALSE; 390c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedback[i].Current = 0; 391c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->Mixer_SGFeedback[i].Target = 0; 392c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Feedback gain mixer */ 393c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->FeedbackMixer[i].CallbackParam = 0; 394c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->FeedbackMixer[i].pCallbackHandle = LVM_NULL; 395c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->FeedbackMixer[i].pGeneralPurpose = LVM_NULL; 396c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->FeedbackMixer[i].pCallBack = LVM_NULL; 397c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->FeedbackMixer[i].CallbackSet = LVM_FALSE; 398c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->FeedbackMixer[i].Current = 0; 399c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->FeedbackMixer[i].Target = 0; 400c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent } 401c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent /* Delay tap index */ 402c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->A_DelaySize[0] = LVREV_MAX_AP0_DELAY; 403c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->B_DelaySize[0] = LVREV_MAX_AP0_DELAY; 404c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->A_DelaySize[1] = LVREV_MAX_AP1_DELAY; 405c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->B_DelaySize[1] = LVREV_MAX_AP1_DELAY; 406c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->A_DelaySize[2] = LVREV_MAX_AP2_DELAY; 407c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->B_DelaySize[2] = LVREV_MAX_AP2_DELAY; 408c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->A_DelaySize[3] = LVREV_MAX_AP3_DELAY; 409c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent pLVREV_Private->B_DelaySize[3] = LVREV_MAX_AP3_DELAY; 410c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 411c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 412c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent LVREV_ClearAudioBuffers(*phInstance); 413c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 414c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent return LVREV_SUCCESS; 415c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent} 416c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent 417c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* End of file */ 418