IEffect.hal revision 7cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3
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 {
2340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
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
3240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
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
4840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
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
5740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
5840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Enable processing.
5940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
6040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
6140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
6240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"process"})
6340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    enable() generates (Result retval);
6440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
6540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
6640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Disable processing.
6740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
6840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
6940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
7040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @exit
7140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    disable() generates (Result retval);
7240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
7340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
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     *
7840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param device output device specification.
797cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
8040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
8140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
827cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setDevice(AudioDevice device) generates (Result retval);
8340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
8440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
8540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set and get volume. Used by audio framework to delegate volume control to
8640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * effect engine.  The effect implementation must set EFFECT_FLAG_VOLUME_IND
8740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * or EFFECT_FLAG_VOLUME_CTRL flag in its descriptor to receive this command
8840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * before every call to 'process' function If EFFECT_FLAG_VOLUME_CTRL flag
8940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * is set in the effect descriptor, the effect engine must return the volume
9040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * that should be applied before the effect is processed. The overall volume
9140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * (the volume actually applied by the effect engine multiplied by the
9240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * returned value) should match the value indicated in the command.
9340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
9440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param volumes vector containing volume for each channel defined in
9540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *                EffectConfig for output buffer expressed in 8.24 fixed
9640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *                point format.
9740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result updated volume values. It is OK to receive an empty vector
9840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *                as a result in which case the effect framework has
9940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *                delegated volume control to another effect.
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
10640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
10740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set the audio mode. The effect implementation must set
10840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * EFFECT_FLAG_AUDIO_MODE_IND flag in its descriptor to receive this command
10940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * when the audio mode changes.
11040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
11140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param mode desired audio mode.
1127cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
11340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
11440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1157cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setAudioMode(AudioMode mode) generates (Result retval);
11640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
11740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
11840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Apply new audio parameters configurations for input and output buffers of
11940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * reverse stream.  An example of reverse stream is the echo reference
12040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * supplied to an Acoustic Echo Canceler.
12140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
12240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param config configuration descriptor.
12340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param inputBufferProvider optional buffer provider reference.
12440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param outputBufferProvider optional buffer provider reference.
12540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
12640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
12740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
12840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    setConfigReverse(EffectConfig config,
12940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            IEffectBufferProviderCallback inputBufferProvider,
13040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            IEffectBufferProviderCallback outputBufferProvider)
13140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval);
13240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
13340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
13440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set the capture device the audio input path is connected to. The effect
13540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to
13640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * receive this command when the device changes.
13740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
13840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param device input device specification.
1397cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
14040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
14140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1427cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setInputDevice(AudioDevice device) generates (Result retval);
14340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
14440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
14540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Read audio parameters configurations for input and output buffers.
14640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
1477cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
14840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return config configuration descriptor.
14940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
15040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1517cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getConfig() generates (Result retval, EffectConfig config);
15240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
15340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
15440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Read audio parameters configurations for input and output buffers of
15540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * reverse stream.
15640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
1577cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
15840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return config configuration descriptor.
15940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
16040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1617cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getConfigReverse() generates (Result retval, EffectConfig config);
16240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
16340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
1647cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Queries for supported combinations of main and auxiliary channels
1657cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * (e.g. for a multi-microphone noise suppressor).
16640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
1677cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param maxConfigs maximum number of the combinations to return.
16840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval absence of the feature support is indicated using
1697cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *                NOT_SUPPORTED code. RESULT_TOO_BIG is returned if
1707cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *                the number of supported combinations exceeds 'maxConfigs'.
17140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result list of configuration descriptors.
17240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
17340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1747cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getSupportedAuxChannelsConfigs(uint32_t maxConfigs)
1757cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval, vec<EffectAuxChannelsConfig> result);
17640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
17740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
1787cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Retrieves the current configuration of main and auxiliary channels.
17940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
18040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval absence of the feature support is indicated using
18140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *                NOT_SUPPORTED code.
18240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result configuration descriptor.
18340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
18440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1857cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getAuxChannelsConfig()
1867cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval, EffectAuxChannelsConfig result);
18740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
18840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
1897cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Sets the current configuration of main and auxiliary channels.
19040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
1917cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status; absence of the feature
1927cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *                support is indicated using NOT_SUPPORTED code.
19340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
19440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
1957cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setAuxChannelsConfig(EffectAuxChannelsConfig config)
19640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval);
19740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
19840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
19940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set the audio source the capture path is configured for (Camcorder, voice
20040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * recognition...).
20140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
20240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param source source descriptor.
2037cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
20440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
20540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
2067cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setAudioSource(AudioSource source) generates (Result retval);
20740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
20840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
20940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * This command indicates if the playback thread the effect is attached to
21040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * is offloaded or not, and updates the I/O handle of the playback thread
21140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * the effect is attached to.
21240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
21340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param param effect offload descriptor.
21440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
21540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
21640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
21740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    offload(EffectOffloadParameter param) generates (Result retval);
21840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
21940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
22040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Returns the effect descriptor.
22140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
2227cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
22340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return descriptor effect descriptor.
22440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
22540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
2267cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getDescriptor() generates (Result retval, EffectDescriptor descriptor);
22740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
22840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
22940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Effect process function. Takes input samples as specified (count and
23040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * location) in input buffer and returns processed samples as specified in
23140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * output buffer. If the buffer descriptor is empty the function must use
23240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * either the buffer or the buffer provider callback installed by the
23340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * setConfig command.  The effect framework must call the 'process' function
23440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * after the 'enable' command is received and until the 'disable' is
23540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * received. When the engine receives the 'disable' command it should turn
23640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * off the effect gracefully and when done indicate that it is OK to stop
23740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * calling the 'process' function by returning the INVALID_STATE status.
23840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
2397cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Output audio buffer must contain no more frames than the input audio
2407cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * buffer. Since the effect may transform input channels into a different
2417cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * amount of channels, the caller provides the output frame size.
2427cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
24340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param inBuffer input audio buffer.
2447cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param outFrameSize output frame size in bytes.
24540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
24640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return outBuffer output audio buffer.
24740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
24840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    // TODO(mnaganov): replace with FMQ version.
24940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
2507cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    process(AudioBuffer inBuffer, uint32_t outFrameSize)
25140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval, AudioBuffer outBuffer);
25240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
25340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
25440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Process reverse stream function. This function is used to pass a
25540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * reference stream to the effect engine. If the engine does not need a
25640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * reference stream, this function MUST return NOT_SUPPORTED. For example,
25740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * this function would typically implemented by an Echo Canceler.
25840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
2597cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Output audio buffer must contain no more frames than the input audio
2607cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * buffer. Since the effect may transform input channels into a different
2617cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * amount of channels, the caller provides the output frame size.
2627cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
26340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param inBuffer input audio buffer.
2647cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param outFrameSize output frame size in bytes.
26540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
26640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return outBuffer output audio buffer.
26740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
26840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    // TODO(mnaganov): replace with FMQ version.
26940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
2707cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    processReverse(AudioBuffer inBuffer, uint32_t outFrameSize)
27140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval, AudioBuffer outBuffer);
27240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
27340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
27440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Execute a vendor specific command on the effect. The command code
27540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * and data, as well as result data are not interpreted by Android
27640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Framework and are passed as-is between the application and the effect.
27740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
27840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * The effect must use standard POSIX.1-2001 error codes for the operation
27940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * completion status.
28040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
28140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Use this method only if the effect is provided by a third party, and
28240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * there is no interface defined for it. This method only works for effects
28340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * implemented in software.
28440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
28540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param commandId the ID of the command.
28640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param data command data.
2877cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param resultMaxSize maximum size in bytes of the result; can be 0.
28840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return status command completion status.
28940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result result data.
29040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
2917cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    command(uint32_t commandId, vec<uint8_t> data, uint32_t resultMaxSize)
29240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (int32_t status, vec<uint8_t> result);
29340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
29440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
29540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Set a vendor-specific parameter and apply it immediately. The parameter
29640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * code and data are not interpreted by Android Framework and are passed
29740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * as-is between the application and the effect.
29840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
29940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the parameter ID is
30040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * unknown or if provided parameter data is invalid. If the effect does not
30140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * support setting vendor-specific parameters, it must return NOT_SUPPORTED.
30240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
30340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Use this method only if the effect is provided by a third party, and
30440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * there is no interface defined for it. This method only works for effects
30540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * implemented in software.
30640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
30740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param parameter identifying data of the parameter.
30840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param value the value of the parameter.
30940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
31040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
31140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
31240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    setParameter(vec<uint8_t> parameter, vec<uint8_t> value)
31340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval);
31440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov
31540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    /*
31640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Get a vendor-specific parameter value. The parameter code and returned
31740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * data are not interpreted by Android Framework and are passed as-is
31840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * between the application and the effect.
31940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
32040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the parameter ID is
32140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * unknown. If the effect does not support setting vendor-specific
32240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * parameters, it must return NOT_SUPPORTED.
32340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
32440be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * Use this method only if the effect is provided by a third party, and
32540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * there is no interface defined for it.  This method only works for effects
32640be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * implemented in software.
32740be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     *
32840be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @param parameter identifying data of the parameter.
3297cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param valueMaxSize maximum size in bytes of the value.
33040be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return retval operation completion status.
33140be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     * @return result the value of the parameter.
33240be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov     */
33340be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov    @callflow(next={"*"})
3347cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getParameter(vec<uint8_t> parameter, uint32_t valueMaxSize)
33540be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov            generates (Result retval, vec<uint8_t> value);
3367cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov
3377cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    /*
3387cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Get supported configs for a vendor-specific feature. The configs returned
3397cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * are not interpreted by Android Framework and are passed as-is between the
3407cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * application and the effect.
3417cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3427cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the feature ID is
3437cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * unknown. If the effect does not support getting vendor-specific feature
3447cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * configs, it must return NOT_SUPPORTED. If the feature is supported but
3457cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * the total number of supported configurations exceeds the maximum number
3467cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * indicated by the caller, the method must return RESULT_TOO_BIG.
3477cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3487cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Use this method only if the effect is provided by a third party, and
3497cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * there is no interface defined for it.  This method only works for effects
3507cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * implemented in software.
3517cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3527cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param featureId feature identifier.
3537cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param maxConfigs maximum number of configs to return.
3547cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param configSize size of each config in bytes.
3557cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
3567cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return configsCount number of configs returned.
3577cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return configsData data for all the configs returned.
3587cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     */
3597cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    @callflow(next={"*"})
3607cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getSupportedConfigsForFeature(
3617cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            uint32_t featureId,
3627cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            uint32_t maxConfigs,
3637cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            uint32_t configSize) generates (
3647cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov                    Result retval,
3657cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov                    uint32_t configsCount,
3667cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov                    vec<uint8_t> configsData);
3677cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov
3687cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    /*
3697cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Get the current config for a vendor-specific feature. The config returned
3707cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * is not interpreted by Android Framework and is passed as-is between the
3717cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * application and the effect.
3727cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3737cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the feature ID is
3747cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * unknown. If the effect does not support getting vendor-specific
3757cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * feature configs, it must return NOT_SUPPORTED.
3767cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3777cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Use this method only if the effect is provided by a third party, and
3787cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * there is no interface defined for it.  This method only works for effects
3797cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * implemented in software.
3807cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3817cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param featureId feature identifier.
3827cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param configSize size of the config in bytes.
3837cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
3847cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return configData config data.
3857cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     */
3867cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    @callflow(next={"*"})
3877cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    getCurrentConfigForFeature(uint32_t featureId, uint32_t configSize)
3887cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval, vec<uint8_t> configData);
3897cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov
3907cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    /*
3917cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Set the current config for a vendor-specific feature. The config data
3927cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * is not interpreted by Android Framework and is passed as-is between the
3937cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * application and the effect.
3947cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3957cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * The effect must use INVALID_ARGUMENTS return code if the feature ID is
3967cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * unknown. If the effect does not support getting vendor-specific
3977cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * feature configs, it must return NOT_SUPPORTED.
3987cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
3997cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * Use this method only if the effect is provided by a third party, and
4007cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * there is no interface defined for it.  This method only works for effects
4017cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * implemented in software.
4027cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     *
4037cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param featureId feature identifier.
4047cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @param configData config data.
4057cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     * @return retval operation completion status.
4067cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov     */
4077cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov    setCurrentConfigForFeature(uint32_t featureId, vec<uint8_t> configData)
4087cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov            generates (Result retval);
40940be06cdf3a34856144574cf5e70b60e4ad4940cMikhail Naganov};
410