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