140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov/*
240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * Copyright (C) 2016 The Android Open Source Project
340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov *
440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License");
540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * you may not use this file except in compliance with the License.
640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * You may obtain a copy of the License at
740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov *
840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov *      http://www.apache.org/licenses/LICENSE-2.0
940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov *
1040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * Unless required by applicable law or agreed to in writing, software
1140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS,
1240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * See the License for the specific language governing permissions and
1440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov * limitations under the License.
1540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov */
1640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
1740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganovpackage android.hardware.audio.effect@2.0;
1840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
1940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganovimport android.hardware.audio.common@2.0;
2040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganovimport IEffectBufferProviderCallback;
2140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
2240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganovinterface IEffect {
2340d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
2440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Initialize effect engine--all configurations return to default.
2540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
2640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
2740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
2840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @entry
2940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
3040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    init() generates (Result retval);
3140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
3240d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
3340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Apply new audio parameters configurations for input and output buffers.
3440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * The provider callbacks may be empty, but in this case the buffer
3540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * must be provided in the EffectConfig structure.
3640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
3740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param config configuration descriptor.
3840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param inputBufferProvider optional buffer provider reference.
3940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param outputBufferProvider optional buffer provider reference.
4040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
4140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
4240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
4340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    setConfig(EffectConfig config,
4440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            IEffectBufferProviderCallback inputBufferProvider,
4540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            IEffectBufferProviderCallback outputBufferProvider)
4640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval);
4740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
4840d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
4940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Reset the effect engine. Keep configuration but resets state and buffer
5040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * content.
517cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
527cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
5340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
5440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
557cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    reset() generates (Result retval);
5640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
5740d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
5840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Enable processing.
5940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
6040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
6140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
629f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov    @callflow(next={"prepareForProcessing"})
6340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    enable() generates (Result retval);
6440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
6540d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
6640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Disable processing.
6740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
6840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
6940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
709f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov    @callflow(next={"close"})
7140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    disable() generates (Result retval);
7240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
7340d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
7440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set the rendering device the audio output path is connected to.  The
7540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its
7640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * descriptor to receive this command when the device changes.
7740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
789f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     * Note: this method is only supported for effects inserted into
799f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     *       the output chain.
809f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     *
8140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param device output device specification.
827cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
8340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
8440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
857cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setDevice(AudioDevice device) generates (Result retval);
8640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
8740d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
8840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set and get volume. Used by audio framework to delegate volume control to
89f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * effect engine. The effect implementation must set EFFECT_FLAG_VOLUME_CTRL
90f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * flag in its descriptor to receive this command. The effect engine must
91f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * return the volume that should be applied before the effect is
92f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * processed. The overall volume (the volume actually applied by the effect
93f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * engine multiplied by the returned value) should match the value indicated
94f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * in the command.
9540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
9640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param volumes vector containing volume for each channel defined in
9740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *                EffectConfig for output buffer expressed in 8.24 fixed
9840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *                point format.
99f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * @return result updated volume values.
1007cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
10140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
10240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1037cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setAndGetVolume(vec<uint32_t> volumes)
1047cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval, vec<uint32_t> result);
10540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
10640d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
107f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * Notify the effect of the volume change. The effect implementation must
108f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * set EFFECT_FLAG_VOLUME_IND flag in its descriptor to receive this
109f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * command.
110f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     *
111f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * @param volumes vector containing volume for each channel defined in
112f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     *                EffectConfig for output buffer expressed in 8.24 fixed
113f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     *                point format.
114f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     * @return retval operation completion status.
115f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov     */
116f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov    volumeChangeNotification(vec<uint32_t> volumes)
117f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov            generates (Result retval);
118f4f2ff39746a36b3d657e34ec1724589051b1ec8Mikhail Naganov
11940d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
12040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set the audio mode. The effect implementation must set
12140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * EFFECT_FLAG_AUDIO_MODE_IND flag in its descriptor to receive this command
12240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * when the audio mode changes.
12340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
12440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param mode desired audio mode.
1257cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
12640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
12740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1287cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setAudioMode(AudioMode mode) generates (Result retval);
12940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
13040d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
13140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Apply new audio parameters configurations for input and output buffers of
13240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * reverse stream.  An example of reverse stream is the echo reference
13340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * supplied to an Acoustic Echo Canceler.
13440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
13540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param config configuration descriptor.
13640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param inputBufferProvider optional buffer provider reference.
13740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param outputBufferProvider optional buffer provider reference.
13840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
13940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
14040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
14140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    setConfigReverse(EffectConfig config,
14240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            IEffectBufferProviderCallback inputBufferProvider,
14340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            IEffectBufferProviderCallback outputBufferProvider)
14440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval);
14540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
14640d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
14740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set the capture device the audio input path is connected to. The effect
14840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to
14940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * receive this command when the device changes.
15040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
1519f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     * Note: this method is only supported for effects inserted into
1529f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     *       the input chain.
1539f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     *
15440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param device input device specification.
1557cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
15640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
15740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1587cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setInputDevice(AudioDevice device) generates (Result retval);
15940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
16040d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
16140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Read audio parameters configurations for input and output buffers.
16240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
1637cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
16440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return config configuration descriptor.
16540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
16640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1677cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getConfig() generates (Result retval, EffectConfig config);
16840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
16940d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
17040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Read audio parameters configurations for input and output buffers of
17140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * reverse stream.
17240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
1737cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
17440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return config configuration descriptor.
17540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
17640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1777cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getConfigReverse() generates (Result retval, EffectConfig config);
17840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
17940d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
1807cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Queries for supported combinations of main and auxiliary channels
1817cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * (e.g. for a multi-microphone noise suppressor).
18240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
1837cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param maxConfigs maximum number of the combinations to return.
18440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval absence of the feature support is indicated using
1857cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *                NOT_SUPPORTED code. RESULT_TOO_BIG is returned if
1867cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *                the number of supported combinations exceeds 'maxConfigs'.
18740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result list of configuration descriptors.
18840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
18940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1907cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getSupportedAuxChannelsConfigs(uint32_t maxConfigs)
1917cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval, vec<EffectAuxChannelsConfig> result);
19240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
19340d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
1947cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Retrieves the current configuration of main and auxiliary channels.
19540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
19640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval absence of the feature support is indicated using
19740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *                NOT_SUPPORTED code.
19840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result configuration descriptor.
19940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
20040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
2017cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getAuxChannelsConfig()
2027cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval, EffectAuxChannelsConfig result);
20340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
20440d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
2057cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Sets the current configuration of main and auxiliary channels.
20640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
2077cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status; absence of the feature
2087cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *                support is indicated using NOT_SUPPORTED code.
20940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
21040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
2117cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setAuxChannelsConfig(EffectAuxChannelsConfig config)
21240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval);
21340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
21440d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
21540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set the audio source the capture path is configured for (Camcorder, voice
21640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * recognition...).
21740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
2189f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     * Note: this method is only supported for effects inserted into
2199f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     *       the input chain.
2209f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov     *
22140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param source source descriptor.
2227cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
22340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
22440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
2257cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setAudioSource(AudioSource source) generates (Result retval);
22640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
22740d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
22840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * This command indicates if the playback thread the effect is attached to
22940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * is offloaded or not, and updates the I/O handle of the playback thread
23040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * the effect is attached to.
23140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
23240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param param effect offload descriptor.
23340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
23440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
23540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
23640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    offload(EffectOffloadParameter param) generates (Result retval);
23740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
23840d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
23940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Returns the effect descriptor.
24040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
2417cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
24240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return descriptor effect descriptor.
24340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
24440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
2457cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getDescriptor() generates (Result retval, EffectDescriptor descriptor);
24640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
24740d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
248a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * Set up required transports for passing audio buffers to the effect.
249a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *
250a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * The transport consists of shared memory and a message queue for reporting
251a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * effect processing operation status. The shared memory is set up
252a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * separately using 'setProcessBuffers' method.
253a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *
254a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * Processing is requested by setting 'REQUEST_PROCESS' or
255a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * 'REQUEST_PROCESS_REVERSE' EventFlags associated with the status message
256a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * queue. The result of processing may be one of the following:
257a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *   OK if there were no errors during processing;
258a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *   INVALID_ARGUMENTS if audio buffers are invalid;
259a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *   INVALID_STATE if the engine has finished the disable phase;
260a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *   NOT_INITIALIZED if the audio buffers were not set;
261a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *   NOT_SUPPORTED if the requested processing type is not supported by
262a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *                 the effect.
263a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *
264a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * @return retval OK if both message queues were created successfully.
265a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *                INVALID_STATE if the method was already called.
266a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *                INVALID_ARGUMENTS if there was a problem setting up
267a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *                                  the queue.
268a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * @return statusMQ a message queue used for passing status from the effect.
26940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
2709f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov    @callflow(next={"setProcessBuffers"})
271a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov    prepareForProcessing() generates (Result retval, fmq_sync<Result> statusMQ);
27240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
27340d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
274a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * Set up input and output buffers for processing audio data. The effect
275a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * may modify both the input and the output buffer during the operation.
276a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * Buffers may be set multiple times during effect lifetime.
27740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
278a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * The input and the output buffer may be reused between different effects,
279a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * and the input buffer may be used as an output buffer. Buffers are
280a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * distinguished using 'AudioBuffer.id' field.
2817cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
28240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param inBuffer input audio buffer.
283a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * @param outBuffer output audio buffer.
284a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * @return retval OK if both buffers were mapped successfully.
285a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *                INVALID_ARGUMENTS if there was a problem with mapping
286a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *                                  any of the buffers.
28740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
2889f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov    @callflow(next={"*"})
289a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov    setProcessBuffers(AudioBuffer inBuffer, AudioBuffer outBuffer) generates (
290a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov            Result retval);
29140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
29240d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
29340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Execute a vendor specific command on the effect. The command code
29440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * and data, as well as result data are not interpreted by Android
29540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Framework and are passed as-is between the application and the effect.
29640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
29740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * The effect must use standard POSIX.1-2001 error codes for the operation
29840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * completion status.
29940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
30040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Use this method only if the effect is provided by a third party, and
30140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * there is no interface defined for it. This method only works for effects
30240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * implemented in software.
30340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
30440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param commandId the ID of the command.
30540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param data command data.
3067cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param resultMaxSize maximum size in bytes of the result; can be 0.
30740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return status command completion status.
30840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result result data.
30940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
3107cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    command(uint32_t commandId, vec<uint8_t> data, uint32_t resultMaxSize)
31140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (int32_t status, vec<uint8_t> result);
31240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
31340d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
31440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set a vendor-specific parameter and apply it immediately. The parameter
31540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * code and data are not interpreted by Android Framework and are passed
31640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * as-is between the application and the effect.
31740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
31840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the parameter ID is
31940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * unknown or if provided parameter data is invalid. If the effect does not
32040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * support setting vendor-specific parameters, it must return NOT_SUPPORTED.
32140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
32240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Use this method only if the effect is provided by a third party, and
32340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * there is no interface defined for it. This method only works for effects
32440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * implemented in software.
32540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
32640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param parameter identifying data of the parameter.
32740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param value the value of the parameter.
32840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
32940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
33040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
33140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    setParameter(vec<uint8_t> parameter, vec<uint8_t> value)
33240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval);
33340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
33440d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
33540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Get a vendor-specific parameter value. The parameter code and returned
33640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * data are not interpreted by Android Framework and are passed as-is
33740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * between the application and the effect.
33840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
33940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the parameter ID is
34040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * unknown. If the effect does not support setting vendor-specific
34140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * parameters, it must return NOT_SUPPORTED.
34240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
34340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Use this method only if the effect is provided by a third party, and
34440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * there is no interface defined for it.  This method only works for effects
34540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * implemented in software.
34640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
34740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param parameter identifying data of the parameter.
3487cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param valueMaxSize maximum size in bytes of the value.
34940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
35040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result the value of the parameter.
35140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
35240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
3537cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getParameter(vec<uint8_t> parameter, uint32_t valueMaxSize)
35440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval, vec<uint8_t> value);
3557cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov
35640d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
3577cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Get supported configs for a vendor-specific feature. The configs returned
3587cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * are not interpreted by Android Framework and are passed as-is between the
3597cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * application and the effect.
3607cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3617cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the feature ID is
3627cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * unknown. If the effect does not support getting vendor-specific feature
3637cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * configs, it must return NOT_SUPPORTED. If the feature is supported but
3647cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * the total number of supported configurations exceeds the maximum number
3657cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * indicated by the caller, the method must return RESULT_TOO_BIG.
3667cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3677cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Use this method only if the effect is provided by a third party, and
3687cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * there is no interface defined for it.  This method only works for effects
3697cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * implemented in software.
3707cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3717cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param featureId feature identifier.
3727cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param maxConfigs maximum number of configs to return.
3737cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param configSize size of each config in bytes.
3747cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
3757cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return configsCount number of configs returned.
3767cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return configsData data for all the configs returned.
3777cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     */
3787cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    @callflow(next={"*"})
3797cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getSupportedConfigsForFeature(
3807cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            uint32_t featureId,
3817cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            uint32_t maxConfigs,
3827cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            uint32_t configSize) generates (
3837cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov                    Result retval,
3847cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov                    uint32_t configsCount,
3857cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov                    vec<uint8_t> configsData);
3867cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov
38740d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
3887cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Get the current config for a vendor-specific feature. The config returned
3897cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * is not interpreted by Android Framework and is passed as-is between the
3907cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * application and the effect.
3917cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3927cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the feature ID is
3937cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * unknown. If the effect does not support getting vendor-specific
3947cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * feature configs, it must return NOT_SUPPORTED.
3957cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3967cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Use this method only if the effect is provided by a third party, and
3977cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * there is no interface defined for it.  This method only works for effects
3987cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * implemented in software.
3997cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
4007cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param featureId feature identifier.
4017cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param configSize size of the config in bytes.
4027cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
4037cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return configData config data.
4047cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     */
4057cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    @callflow(next={"*"})
4067cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getCurrentConfigForFeature(uint32_t featureId, uint32_t configSize)
4077cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval, vec<uint8_t> configData);
4087cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov
40940d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
4107cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Set the current config for a vendor-specific feature. The config data
4117cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * is not interpreted by Android Framework and is passed as-is between the
4127cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * application and the effect.
4137cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
4147cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the feature ID is
4157cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * unknown. If the effect does not support getting vendor-specific
4167cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * feature configs, it must return NOT_SUPPORTED.
4177cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
4187cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Use this method only if the effect is provided by a third party, and
4197cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * there is no interface defined for it.  This method only works for effects
4207cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * implemented in software.
4217cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
4227cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param featureId feature identifier.
4237cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param configData config data.
4247cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
4257cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     */
4267cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setCurrentConfigForFeature(uint32_t featureId, vec<uint8_t> configData)
4277cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval);
428a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov
42940d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
430a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * Called by the framework to deinitialize the effect and free up
431a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * all the currently allocated resources. It is recommended to close
432a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * the effect on the client side as soon as it is becomes unused.
433a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *
434a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     * @return retval OK in case the success.
435a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     *                INVALID_STATE if the effect was already closed.
436a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov     */
4379f2890458a2e0b9fa09ceeba64c869bf3f1560c3Mikhail Naganov    @exit
438a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov    close() generates (Result retval);
43940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov};
440