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