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