1 /*
2 * Copyright (C) 2004-2010 NXP Software
3 * Copyright (C) 2010 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 /****************************************************************************************/
19 /* */
20 /* Includes */
21 /* */
22 /****************************************************************************************/
23 #include "LVREV_Private.h"
24 #include "VectorArithmetic.h"
25
26
27 /****************************************************************************************/
28 /* */
29 /* FUNCTION: LVREV_ClearAudioBuffers */
30 /* */
31 /* DESCRIPTION: */
32 /* This function is used to clear the internal audio buffers of the module. */
33 /* */
34 /* PARAMETERS: */
35 /* hInstance Instance handle */
36 /* */
37 /* RETURNS: */
38 /* LVREV_SUCCESS Initialisation succeeded */
39 /* LVREV_NULLADDRESS Instance is NULL */
40 /* */
41 /* NOTES: */
42 /* 1. This function must not be interrupted by the LVM_Process function */
43 /* */
44 /****************************************************************************************/
LVREV_ClearAudioBuffers(LVREV_Handle_t hInstance)45 LVREV_ReturnStatus_en LVREV_ClearAudioBuffers(LVREV_Handle_t hInstance)
46 {
47
48 LVREV_Instance_st *pLVREV_Private = (LVREV_Instance_st *)hInstance;
49
50
51 /*
52 * Check for error conditions
53 */
54 /* Check for NULL pointers */
55 if(hInstance == LVM_NULL)
56 {
57 return LVREV_NULLADDRESS;
58 }
59
60 /*
61 * Clear all filter tap data, delay-lines and other signal related data
62 */
63
64 #ifdef BUILD_FLOAT
65 LoadConst_Float(0,
66 (void *)&pLVREV_Private->pFastData->HPTaps, /* Destination Cast to void: \
67 no dereferencing in function*/
68 2);
69 LoadConst_Float(0,
70 (void *)&pLVREV_Private->pFastData->LPTaps, /* Destination Cast to void: \
71 no dereferencing in function*/
72 2);
73 #else
74 LoadConst_32(0,
75 (void *)&pLVREV_Private->pFastData->HPTaps, /* Destination Cast to void: no dereferencing in function*/
76 2);
77 LoadConst_32(0,
78 (void *)&pLVREV_Private->pFastData->LPTaps, /* Destination Cast to void: no dereferencing in function*/
79 2);
80 #endif
81 if((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays == LVREV_DELAYLINES_4)
82 {
83 #ifndef BUILD_FLOAT
84 LoadConst_32(0, (LVM_INT32 *)&pLVREV_Private->pFastData->RevLPTaps[3], 2);
85 LoadConst_32(0, (LVM_INT32 *)&pLVREV_Private->pFastData->RevLPTaps[2], 2);
86 LoadConst_32(0, (LVM_INT32 *)&pLVREV_Private->pFastData->RevLPTaps[1], 2);
87 LoadConst_32(0, (LVM_INT32 *)&pLVREV_Private->pFastData->RevLPTaps[0], 2);
88
89 LoadConst_32(0,pLVREV_Private->pDelay_T[3], (LVM_INT16)LVREV_MAX_T3_DELAY);
90 LoadConst_32(0,pLVREV_Private->pDelay_T[2], (LVM_INT16)LVREV_MAX_T2_DELAY);
91 LoadConst_32(0,pLVREV_Private->pDelay_T[1], (LVM_INT16)LVREV_MAX_T1_DELAY);
92 LoadConst_32(0,pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY);
93 #else
94 LoadConst_Float(0, (LVM_FLOAT *)&pLVREV_Private->pFastData->RevLPTaps[3], 2);
95 LoadConst_Float(0, (LVM_FLOAT *)&pLVREV_Private->pFastData->RevLPTaps[2], 2);
96 LoadConst_Float(0, (LVM_FLOAT *)&pLVREV_Private->pFastData->RevLPTaps[1], 2);
97 LoadConst_Float(0, (LVM_FLOAT *)&pLVREV_Private->pFastData->RevLPTaps[0], 2);
98
99 LoadConst_Float(0, pLVREV_Private->pDelay_T[3], LVREV_MAX_T3_DELAY);
100 LoadConst_Float(0, pLVREV_Private->pDelay_T[2], LVREV_MAX_T2_DELAY);
101 LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY);
102 LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY);
103 #endif
104 }
105
106 if((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays >= LVREV_DELAYLINES_2)
107 {
108 #ifndef BUILD_FLOAT
109 LoadConst_32(0, (LVM_INT32 *)&pLVREV_Private->pFastData->RevLPTaps[1], 2);
110 LoadConst_32(0, (LVM_INT32 *)&pLVREV_Private->pFastData->RevLPTaps[0], 2);
111
112 LoadConst_32(0,pLVREV_Private->pDelay_T[1], (LVM_INT16)LVREV_MAX_T1_DELAY);
113 LoadConst_32(0,pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY);
114 #else
115 LoadConst_Float(0, (LVM_FLOAT *)&pLVREV_Private->pFastData->RevLPTaps[1], 2);
116 LoadConst_Float(0, (LVM_FLOAT *)&pLVREV_Private->pFastData->RevLPTaps[0], 2);
117
118 LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY);
119 LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY);
120 #endif
121 }
122
123 if((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays >= LVREV_DELAYLINES_1)
124 {
125 #ifndef BUILD_FLOAT
126 LoadConst_32(0, (LVM_INT32 *)&pLVREV_Private->pFastData->RevLPTaps[0], 2);
127 LoadConst_32(0,pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY);
128 #else
129 LoadConst_Float(0, (LVM_FLOAT *)&pLVREV_Private->pFastData->RevLPTaps[0], 2);
130 LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY);
131 #endif
132 }
133 return LVREV_SUCCESS;
134 }
135
136 /* End of file */
137