1135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*
2135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Copyright (C) 2010 The Android Open Source Project
3135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *
4135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
5135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * you may not use this file except in compliance with the License.
6135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * You may obtain a copy of the License at
7135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *
8135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
9135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *
10135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Unless required by applicable law or agreed to in writing, software
11135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
12135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * See the License for the specific language governing permissions and
14135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * limitations under the License.
15135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent */
16135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
17ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent#ifndef ANDROID_EFFECTSFACTORYAPI_H_
18ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent#define ANDROID_EFFECTSFACTORYAPI_H_
19135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
20135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#include <errno.h>
21135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#include <stdint.h>
22135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#include <sys/types.h>
23e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent#include <hardware/audio_effect.h>
24135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
25135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#if __cplusplus
26135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentextern "C" {
27135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#endif
28135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
29135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/////////////////////////////////////////////////
30135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//      Effect factory interface
31135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/////////////////////////////////////////////////
32135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
33135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
34135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
35135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Function:       EffectQueryNumberEffects
36135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
37be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent//    Description:    Returns the number of different effects in all loaded libraries.
38135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          Each effect must have a different effect uuid (see
39ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent//          effect_descriptor_t). This function together with EffectQueryEffect()
40135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          is used to enumerate all effects present in all loaded libraries.
41135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          Each time EffectQueryNumberEffects() is called, the factory must
42135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          reset the index of the effect descriptor returned by next call to
43ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent//          EffectQueryEffect() to restart enumeration from the beginning.
44135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
45135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Input/Output:
46135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          pNumEffects:    address where the number of effects should be returned.
47135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
48135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Output:
49135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        returned value:    0          successful operation.
50135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                          -ENODEV     factory failed to initialize
51135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                          -EINVAL     invalid pNumEffects
52135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        *pNumEffects:     updated with number of effects in factory
53135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
54135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
55be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurentint EffectQueryNumberEffects(uint32_t *pNumEffects);
56135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
57135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
58135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
59ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent//    Function:       EffectQueryEffect
60135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
61135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Description:    Returns a descriptor of the next available effect.
62135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          See effect_descriptor_t for a details on effect descriptor.
63ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent//          This function together with EffectQueryNumberEffects() is used to enumerate all
64135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          effects present in all loaded libraries. The enumeration sequence is:
65135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//              EffectQueryNumberEffects(&num_effects);
66ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent//              for (i = 0; i < num_effects; i++)
67ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent//                  EffectQueryEffect(i,...);
68135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
69135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Input/Output:
70135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          pDescriptor:    address where to return the effect descriptor.
71135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
72135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Output:
73135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        returned value:    0          successful operation.
74ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent//                          -ENOENT     no more effect available
75135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                          -ENODEV     factory failed to initialize
76135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                          -EINVAL     invalid pDescriptor
778af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten//                          -ENOSYS     effect list has changed since last execution of
788af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten//                                      EffectQueryNumberEffects()
79135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        *pDescriptor:     updated with the effect descriptor.
80135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
81135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
82ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurentint EffectQueryEffect(uint32_t index, effect_descriptor_t *pDescriptor);
83135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
84135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
85135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
86135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Function:       EffectCreate
87135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
88135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Description:    Creates an effect engine of the specified type and returns an
89135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          effect control interface on this engine. The function will allocate the
90135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          resources for an instance of the requested effect engine and return
9199e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten//          a handle on the effect control interface.
92135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
93135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Input:
94135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          pEffectUuid:    pointer to the effect uuid.
958af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten//          sessionId:  audio session to which this effect instance will be attached. All effects
968af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten//              created with the same session ID are connected in series and process the same signal
978af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten//              stream.  Knowing that two effects are part of the same effect chain can help the
988af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten//              library implement some kind of optimizations.
998af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten//          ioId:   identifies the output or input stream this effect is directed to at audio HAL.
1008af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten//              For future use especially with tunneled HW accelerated effects
101135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
102135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Input/Output:
103e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent//          pHandle:        address where to return the effect handle.
104135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
105135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Output:
106135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        returned value:    0          successful operation.
107135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                          -ENODEV     factory failed to initialize
108e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent//                          -EINVAL     invalid pEffectUuid or pHandle
109be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent//                          -ENOENT     no effect with this uuid found
110e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent//        *pHandle:         updated with the effect handle.
111135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
112135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
1138af901cdea0af7e536579dee6d56e69987035a01Glenn Kastenint EffectCreate(const effect_uuid_t *pEffectUuid, int32_t sessionId, int32_t ioId,
1148af901cdea0af7e536579dee6d56e69987035a01Glenn Kasten        effect_handle_t *pHandle);
115135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
116135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
117135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
118135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Function:       EffectRelease
119135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
12099e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten//    Description:    Releases the effect engine whose handle is given as argument.
121135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          All resources allocated to this particular instance of the effect are
122135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          released.
123135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
124135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Input:
12599e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten//          handle:    handle on the effect interface to be released.
126135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
127135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Output:
128135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        returned value:    0          successful operation.
129135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                          -ENODEV     factory failed to initialize
13099e53b86eebb605b70dd7591b89bf61a9414ed0eGlenn Kasten//                          -EINVAL     invalid interface handle
131135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
132135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
133e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurentint EffectRelease(effect_handle_t handle);
134135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
135135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
136135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
137135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Function:       EffectGetDescriptor
138135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
139135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Description:    Returns the descriptor of the effect which uuid is pointed
140135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          to by first argument.
141135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
142135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Input:
143135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          pEffectUuid:    pointer to the effect uuid.
144135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
145135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Input/Output:
146135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          pDescriptor:    address where to return the effect descriptor.
147135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
148135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Output:
149135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        returned value:    0          successful operation.
150135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                          -ENODEV     factory failed to initialize
151135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                          -EINVAL     invalid pEffectUuid or pDescriptor
152be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent//                          -ENOENT     no effect with this uuid found
153135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        *pDescriptor:     updated with the effect descriptor.
154135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
155135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
1565e92a7861196ddae14638d4b7a63fc4892b7ef59Glenn Kastenint EffectGetDescriptor(const effect_uuid_t *pEffectUuid, effect_descriptor_t *pDescriptor);
157135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
158135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
159135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
160135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Function:       EffectIsNullUuid
161135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
162135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Description:    Helper function to compare effect uuid to EFFECT_UUID_NULL
163135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
164135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Input:
165135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//          pEffectUuid: pointer to effect uuid to compare to EFFECT_UUID_NULL.
166135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
167135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//    Output:
168135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//        returned value:    0 if uuid is different from EFFECT_UUID_NULL.
169135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//                           1 if uuid is equal to EFFECT_UUID_NULL.
170135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//
171135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent////////////////////////////////////////////////////////////////////////////////
1725e92a7861196ddae14638d4b7a63fc4892b7ef59Glenn Kastenint EffectIsNullUuid(const effect_uuid_t *pEffectUuid);
173135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
174135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#if __cplusplus
175135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent}  // extern "C"
176135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#endif
177135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
178135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent
179ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent#endif /*ANDROID_EFFECTSFACTORYAPI_H_*/
180