• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_EFFECTSFACTORYAPI_H_
18 #define ANDROID_EFFECTSFACTORYAPI_H_
19 
20 #include <cutils/compiler.h>
21 #include <errno.h>
22 #include <stdint.h>
23 #include <sys/types.h>
24 #include <hardware/audio_effect.h>
25 
26 #if __cplusplus
27 extern "C" {
28 #endif
29 
30 /////////////////////////////////////////////////
31 //      Effect factory interface
32 /////////////////////////////////////////////////
33 
34 ////////////////////////////////////////////////////////////////////////////////
35 //
36 //    Function:       EffectQueryNumberEffects
37 //
38 //    Description:    Returns the number of different effects in all loaded libraries.
39 //          Each effect must have a different effect uuid (see
40 //          effect_descriptor_t). This function together with EffectQueryEffect()
41 //          is used to enumerate all effects present in all loaded libraries.
42 //          Each time EffectQueryNumberEffects() is called, the factory must
43 //          reset the index of the effect descriptor returned by next call to
44 //          EffectQueryEffect() to restart enumeration from the beginning.
45 //
46 //    Input/Output:
47 //          pNumEffects:    address where the number of effects should be returned.
48 //
49 //    Output:
50 //        returned value:    0          successful operation.
51 //                          -ENODEV     factory failed to initialize
52 //                          -EINVAL     invalid pNumEffects
53 //        *pNumEffects:     updated with number of effects in factory
54 //
55 ////////////////////////////////////////////////////////////////////////////////
56 ANDROID_API
57 int EffectQueryNumberEffects(uint32_t *pNumEffects);
58 
59 ////////////////////////////////////////////////////////////////////////////////
60 //
61 //    Function:       EffectQueryEffect
62 //
63 //    Description:    Returns a descriptor of the next available effect.
64 //          See effect_descriptor_t for a details on effect descriptor.
65 //          This function together with EffectQueryNumberEffects() is used to enumerate all
66 //          effects present in all loaded libraries. The enumeration sequence is:
67 //              EffectQueryNumberEffects(&num_effects);
68 //              for (i = 0; i < num_effects; i++)
69 //                  EffectQueryEffect(i,...);
70 //
71 //    Input/Output:
72 //          pDescriptor:    address where to return the effect descriptor.
73 //
74 //    Output:
75 //        returned value:    0          successful operation.
76 //                          -ENOENT     no more effect available
77 //                          -ENODEV     factory failed to initialize
78 //                          -EINVAL     invalid pDescriptor
79 //                          -ENOSYS     effect list has changed since last execution of
80 //                                      EffectQueryNumberEffects()
81 //        *pDescriptor:     updated with the effect descriptor.
82 //
83 ////////////////////////////////////////////////////////////////////////////////
84 ANDROID_API
85 int EffectQueryEffect(uint32_t index, effect_descriptor_t *pDescriptor);
86 
87 ////////////////////////////////////////////////////////////////////////////////
88 //
89 //    Function:       EffectCreate
90 //
91 //    Description:    Creates an effect engine of the specified type and returns an
92 //          effect control interface on this engine. The function will allocate the
93 //          resources for an instance of the requested effect engine and return
94 //          a handle on the effect control interface.
95 //
96 //    Input:
97 //          pEffectUuid:    pointer to the effect uuid.
98 //          sessionId:  audio session to which this effect instance will be attached. All effects
99 //              created with the same session ID are connected in series and process the same signal
100 //              stream.  Knowing that two effects are part of the same effect chain can help the
101 //              library implement some kind of optimizations.
102 //          ioId:   identifies the output or input stream this effect is directed to at audio HAL.
103 //              For future use especially with tunneled HW accelerated effects
104 //
105 //    Input/Output:
106 //          pHandle:        address where to return the effect handle.
107 //
108 //    Output:
109 //        returned value:    0          successful operation.
110 //                          -ENODEV     factory failed to initialize
111 //                          -EINVAL     invalid pEffectUuid or pHandle
112 //                          -ENOENT     no effect with this uuid found
113 //        *pHandle:         updated with the effect handle.
114 //
115 ////////////////////////////////////////////////////////////////////////////////
116 ANDROID_API
117 int EffectCreate(const effect_uuid_t *pEffectUuid, int32_t sessionId, int32_t ioId,
118         effect_handle_t *pHandle);
119 
120 ////////////////////////////////////////////////////////////////////////////////
121 //
122 //    Function:       EffectRelease
123 //
124 //    Description:    Releases the effect engine whose handle is given as argument.
125 //          All resources allocated to this particular instance of the effect are
126 //          released.
127 //
128 //    Input:
129 //          handle:    handle on the effect interface to be released.
130 //
131 //    Output:
132 //        returned value:    0          successful operation.
133 //                          -ENODEV     factory failed to initialize
134 //                          -EINVAL     invalid interface handle
135 //
136 ////////////////////////////////////////////////////////////////////////////////
137 ANDROID_API
138 int EffectRelease(effect_handle_t handle);
139 
140 ////////////////////////////////////////////////////////////////////////////////
141 //
142 //    Function:       EffectGetDescriptor
143 //
144 //    Description:    Returns the descriptor of the effect which uuid is pointed
145 //          to by first argument.
146 //
147 //    Input:
148 //          pEffectUuid:    pointer to the effect uuid.
149 //
150 //    Input/Output:
151 //          pDescriptor:    address where to return the effect descriptor.
152 //
153 //    Output:
154 //        returned value:    0          successful operation.
155 //                          -ENODEV     factory failed to initialize
156 //                          -EINVAL     invalid pEffectUuid or pDescriptor
157 //                          -ENOENT     no effect with this uuid found
158 //        *pDescriptor:     updated with the effect descriptor.
159 //
160 ////////////////////////////////////////////////////////////////////////////////
161 ANDROID_API
162 int EffectGetDescriptor(const effect_uuid_t *pEffectUuid, effect_descriptor_t *pDescriptor);
163 
164 ////////////////////////////////////////////////////////////////////////////////
165 //
166 //    Function:       EffectIsNullUuid
167 //
168 //    Description:    Helper function to compare effect uuid to EFFECT_UUID_NULL
169 //
170 //    Input:
171 //          pEffectUuid: pointer to effect uuid to compare to EFFECT_UUID_NULL.
172 //
173 //    Output:
174 //        returned value:    0 if uuid is different from EFFECT_UUID_NULL.
175 //                           1 if uuid is equal to EFFECT_UUID_NULL.
176 //
177 ////////////////////////////////////////////////////////////////////////////////
178 ANDROID_API
179 int EffectIsNullUuid(const effect_uuid_t *pEffectUuid);
180 
181 ANDROID_API
182 int EffectDumpEffects(int fd);
183 
184 #if __cplusplus
185 }  // extern "C"
186 #endif
187 
188 
189 #endif /*ANDROID_EFFECTSFACTORYAPI_H_*/
190