1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Workerimport [email protected]; 20*4d7e907cSAndroid Build Coastguard Workerimport IEffectBufferProviderCallback; 21*4d7e907cSAndroid Build Coastguard Worker 22*4d7e907cSAndroid Build Coastguard Workerinterface IEffect { 23*4d7e907cSAndroid Build Coastguard Worker /** 24*4d7e907cSAndroid Build Coastguard Worker * Initialize effect engine--all configurations return to default. 25*4d7e907cSAndroid Build Coastguard Worker * 26*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 27*4d7e907cSAndroid Build Coastguard Worker */ 28*4d7e907cSAndroid Build Coastguard Worker @entry 29*4d7e907cSAndroid Build Coastguard Worker init() generates (Result retval); 30*4d7e907cSAndroid Build Coastguard Worker 31*4d7e907cSAndroid Build Coastguard Worker /** 32*4d7e907cSAndroid Build Coastguard Worker * Apply new audio parameters configurations for input and output buffers. 33*4d7e907cSAndroid Build Coastguard Worker * The provider callbacks may be empty, but in this case the buffer 34*4d7e907cSAndroid Build Coastguard Worker * must be provided in the EffectConfig structure. 35*4d7e907cSAndroid Build Coastguard Worker * 36*4d7e907cSAndroid Build Coastguard Worker * @param config configuration descriptor. 37*4d7e907cSAndroid Build Coastguard Worker * @param inputBufferProvider optional buffer provider reference. 38*4d7e907cSAndroid Build Coastguard Worker * @param outputBufferProvider optional buffer provider reference. 39*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 40*4d7e907cSAndroid Build Coastguard Worker */ 41*4d7e907cSAndroid Build Coastguard Worker setConfig(EffectConfig config, 42*4d7e907cSAndroid Build Coastguard Worker IEffectBufferProviderCallback inputBufferProvider, 43*4d7e907cSAndroid Build Coastguard Worker IEffectBufferProviderCallback outputBufferProvider) 44*4d7e907cSAndroid Build Coastguard Worker generates (Result retval); 45*4d7e907cSAndroid Build Coastguard Worker 46*4d7e907cSAndroid Build Coastguard Worker /** 47*4d7e907cSAndroid Build Coastguard Worker * Reset the effect engine. Keep configuration but resets state and buffer 48*4d7e907cSAndroid Build Coastguard Worker * content. 49*4d7e907cSAndroid Build Coastguard Worker * 50*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 51*4d7e907cSAndroid Build Coastguard Worker */ 52*4d7e907cSAndroid Build Coastguard Worker reset() generates (Result retval); 53*4d7e907cSAndroid Build Coastguard Worker 54*4d7e907cSAndroid Build Coastguard Worker /** 55*4d7e907cSAndroid Build Coastguard Worker * Enable processing. 56*4d7e907cSAndroid Build Coastguard Worker * 57*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 58*4d7e907cSAndroid Build Coastguard Worker */ 59*4d7e907cSAndroid Build Coastguard Worker @callflow(next={"prepareForProcessing"}) 60*4d7e907cSAndroid Build Coastguard Worker enable() generates (Result retval); 61*4d7e907cSAndroid Build Coastguard Worker 62*4d7e907cSAndroid Build Coastguard Worker /** 63*4d7e907cSAndroid Build Coastguard Worker * Disable processing. 64*4d7e907cSAndroid Build Coastguard Worker * 65*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 66*4d7e907cSAndroid Build Coastguard Worker */ 67*4d7e907cSAndroid Build Coastguard Worker @callflow(next={"close"}) 68*4d7e907cSAndroid Build Coastguard Worker disable() generates (Result retval); 69*4d7e907cSAndroid Build Coastguard Worker 70*4d7e907cSAndroid Build Coastguard Worker /** 71*4d7e907cSAndroid Build Coastguard Worker * Set the rendering device the audio output path is connected to. The 72*4d7e907cSAndroid Build Coastguard Worker * effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its 73*4d7e907cSAndroid Build Coastguard Worker * descriptor to receive this command when the device changes. 74*4d7e907cSAndroid Build Coastguard Worker * 75*4d7e907cSAndroid Build Coastguard Worker * Note: this method is only supported for effects inserted into 76*4d7e907cSAndroid Build Coastguard Worker * the output chain. 77*4d7e907cSAndroid Build Coastguard Worker * 78*4d7e907cSAndroid Build Coastguard Worker * @param device output device specification. 79*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 80*4d7e907cSAndroid Build Coastguard Worker */ 81*4d7e907cSAndroid Build Coastguard Worker setDevice(bitfield<AudioDevice> device) generates (Result retval); 82*4d7e907cSAndroid Build Coastguard Worker 83*4d7e907cSAndroid Build Coastguard Worker /** 84*4d7e907cSAndroid Build Coastguard Worker * Set and get volume. Used by audio framework to delegate volume control to 85*4d7e907cSAndroid Build Coastguard Worker * effect engine. The effect implementation must set EFFECT_FLAG_VOLUME_CTRL 86*4d7e907cSAndroid Build Coastguard Worker * flag in its descriptor to receive this command. The effect engine must 87*4d7e907cSAndroid Build Coastguard Worker * return the volume that should be applied before the effect is 88*4d7e907cSAndroid Build Coastguard Worker * processed. The overall volume (the volume actually applied by the effect 89*4d7e907cSAndroid Build Coastguard Worker * engine multiplied by the returned value) should match the value indicated 90*4d7e907cSAndroid Build Coastguard Worker * in the command. 91*4d7e907cSAndroid Build Coastguard Worker * 92*4d7e907cSAndroid Build Coastguard Worker * @param volumes vector containing volume for each channel defined in 93*4d7e907cSAndroid Build Coastguard Worker * EffectConfig for output buffer expressed in 8.24 fixed 94*4d7e907cSAndroid Build Coastguard Worker * point format. 95*4d7e907cSAndroid Build Coastguard Worker * @return result updated volume values. 96*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 97*4d7e907cSAndroid Build Coastguard Worker */ 98*4d7e907cSAndroid Build Coastguard Worker setAndGetVolume(vec<uint32_t> volumes) 99*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, vec<uint32_t> result); 100*4d7e907cSAndroid Build Coastguard Worker 101*4d7e907cSAndroid Build Coastguard Worker /** 102*4d7e907cSAndroid Build Coastguard Worker * Notify the effect of the volume change. The effect implementation must 103*4d7e907cSAndroid Build Coastguard Worker * set EFFECT_FLAG_VOLUME_IND flag in its descriptor to receive this 104*4d7e907cSAndroid Build Coastguard Worker * command. 105*4d7e907cSAndroid Build Coastguard Worker * 106*4d7e907cSAndroid Build Coastguard Worker * @param volumes vector containing volume for each channel defined in 107*4d7e907cSAndroid Build Coastguard Worker * EffectConfig for output buffer expressed in 8.24 fixed 108*4d7e907cSAndroid Build Coastguard Worker * point format. 109*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 110*4d7e907cSAndroid Build Coastguard Worker */ 111*4d7e907cSAndroid Build Coastguard Worker volumeChangeNotification(vec<uint32_t> volumes) 112*4d7e907cSAndroid Build Coastguard Worker generates (Result retval); 113*4d7e907cSAndroid Build Coastguard Worker 114*4d7e907cSAndroid Build Coastguard Worker /** 115*4d7e907cSAndroid Build Coastguard Worker * Set the audio mode. The effect implementation must set 116*4d7e907cSAndroid Build Coastguard Worker * EFFECT_FLAG_AUDIO_MODE_IND flag in its descriptor to receive this command 117*4d7e907cSAndroid Build Coastguard Worker * when the audio mode changes. 118*4d7e907cSAndroid Build Coastguard Worker * 119*4d7e907cSAndroid Build Coastguard Worker * @param mode desired audio mode. 120*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 121*4d7e907cSAndroid Build Coastguard Worker */ 122*4d7e907cSAndroid Build Coastguard Worker setAudioMode(AudioMode mode) generates (Result retval); 123*4d7e907cSAndroid Build Coastguard Worker 124*4d7e907cSAndroid Build Coastguard Worker /** 125*4d7e907cSAndroid Build Coastguard Worker * Apply new audio parameters configurations for input and output buffers of 126*4d7e907cSAndroid Build Coastguard Worker * reverse stream. An example of reverse stream is the echo reference 127*4d7e907cSAndroid Build Coastguard Worker * supplied to an Acoustic Echo Canceler. 128*4d7e907cSAndroid Build Coastguard Worker * 129*4d7e907cSAndroid Build Coastguard Worker * @param config configuration descriptor. 130*4d7e907cSAndroid Build Coastguard Worker * @param inputBufferProvider optional buffer provider reference. 131*4d7e907cSAndroid Build Coastguard Worker * @param outputBufferProvider optional buffer provider reference. 132*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 133*4d7e907cSAndroid Build Coastguard Worker */ 134*4d7e907cSAndroid Build Coastguard Worker setConfigReverse(EffectConfig config, 135*4d7e907cSAndroid Build Coastguard Worker IEffectBufferProviderCallback inputBufferProvider, 136*4d7e907cSAndroid Build Coastguard Worker IEffectBufferProviderCallback outputBufferProvider) 137*4d7e907cSAndroid Build Coastguard Worker generates (Result retval); 138*4d7e907cSAndroid Build Coastguard Worker 139*4d7e907cSAndroid Build Coastguard Worker /** 140*4d7e907cSAndroid Build Coastguard Worker * Set the capture device the audio input path is connected to. The effect 141*4d7e907cSAndroid Build Coastguard Worker * implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to 142*4d7e907cSAndroid Build Coastguard Worker * receive this command when the device changes. 143*4d7e907cSAndroid Build Coastguard Worker * 144*4d7e907cSAndroid Build Coastguard Worker * Note: this method is only supported for effects inserted into 145*4d7e907cSAndroid Build Coastguard Worker * the input chain. 146*4d7e907cSAndroid Build Coastguard Worker * 147*4d7e907cSAndroid Build Coastguard Worker * @param device input device specification. 148*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 149*4d7e907cSAndroid Build Coastguard Worker */ 150*4d7e907cSAndroid Build Coastguard Worker setInputDevice(bitfield<AudioDevice> device) generates (Result retval); 151*4d7e907cSAndroid Build Coastguard Worker 152*4d7e907cSAndroid Build Coastguard Worker /** 153*4d7e907cSAndroid Build Coastguard Worker * Read audio parameters configurations for input and output buffers. 154*4d7e907cSAndroid Build Coastguard Worker * 155*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 156*4d7e907cSAndroid Build Coastguard Worker * @return config configuration descriptor. 157*4d7e907cSAndroid Build Coastguard Worker */ 158*4d7e907cSAndroid Build Coastguard Worker getConfig() generates (Result retval, EffectConfig config); 159*4d7e907cSAndroid Build Coastguard Worker 160*4d7e907cSAndroid Build Coastguard Worker /** 161*4d7e907cSAndroid Build Coastguard Worker * Read audio parameters configurations for input and output buffers of 162*4d7e907cSAndroid Build Coastguard Worker * reverse stream. 163*4d7e907cSAndroid Build Coastguard Worker * 164*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 165*4d7e907cSAndroid Build Coastguard Worker * @return config configuration descriptor. 166*4d7e907cSAndroid Build Coastguard Worker */ 167*4d7e907cSAndroid Build Coastguard Worker getConfigReverse() generates (Result retval, EffectConfig config); 168*4d7e907cSAndroid Build Coastguard Worker 169*4d7e907cSAndroid Build Coastguard Worker /** 170*4d7e907cSAndroid Build Coastguard Worker * Queries for supported combinations of main and auxiliary channels 171*4d7e907cSAndroid Build Coastguard Worker * (e.g. for a multi-microphone noise suppressor). 172*4d7e907cSAndroid Build Coastguard Worker * 173*4d7e907cSAndroid Build Coastguard Worker * @param maxConfigs maximum number of the combinations to return. 174*4d7e907cSAndroid Build Coastguard Worker * @return retval absence of the feature support is indicated using 175*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED code. RESULT_TOO_BIG is returned if 176*4d7e907cSAndroid Build Coastguard Worker * the number of supported combinations exceeds 'maxConfigs'. 177*4d7e907cSAndroid Build Coastguard Worker * @return result list of configuration descriptors. 178*4d7e907cSAndroid Build Coastguard Worker */ 179*4d7e907cSAndroid Build Coastguard Worker getSupportedAuxChannelsConfigs(uint32_t maxConfigs) 180*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, vec<EffectAuxChannelsConfig> result); 181*4d7e907cSAndroid Build Coastguard Worker 182*4d7e907cSAndroid Build Coastguard Worker /** 183*4d7e907cSAndroid Build Coastguard Worker * Retrieves the current configuration of main and auxiliary channels. 184*4d7e907cSAndroid Build Coastguard Worker * 185*4d7e907cSAndroid Build Coastguard Worker * @return retval absence of the feature support is indicated using 186*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED code. 187*4d7e907cSAndroid Build Coastguard Worker * @return result configuration descriptor. 188*4d7e907cSAndroid Build Coastguard Worker */ 189*4d7e907cSAndroid Build Coastguard Worker getAuxChannelsConfig() 190*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, EffectAuxChannelsConfig result); 191*4d7e907cSAndroid Build Coastguard Worker 192*4d7e907cSAndroid Build Coastguard Worker /** 193*4d7e907cSAndroid Build Coastguard Worker * Sets the current configuration of main and auxiliary channels. 194*4d7e907cSAndroid Build Coastguard Worker * 195*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status; absence of the feature 196*4d7e907cSAndroid Build Coastguard Worker * support is indicated using NOT_SUPPORTED code. 197*4d7e907cSAndroid Build Coastguard Worker */ 198*4d7e907cSAndroid Build Coastguard Worker setAuxChannelsConfig(EffectAuxChannelsConfig config) 199*4d7e907cSAndroid Build Coastguard Worker generates (Result retval); 200*4d7e907cSAndroid Build Coastguard Worker 201*4d7e907cSAndroid Build Coastguard Worker /** 202*4d7e907cSAndroid Build Coastguard Worker * Set the audio source the capture path is configured for (Camcorder, voice 203*4d7e907cSAndroid Build Coastguard Worker * recognition...). 204*4d7e907cSAndroid Build Coastguard Worker * 205*4d7e907cSAndroid Build Coastguard Worker * Note: this method is only supported for effects inserted into 206*4d7e907cSAndroid Build Coastguard Worker * the input chain. 207*4d7e907cSAndroid Build Coastguard Worker * 208*4d7e907cSAndroid Build Coastguard Worker * @param source source descriptor. 209*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 210*4d7e907cSAndroid Build Coastguard Worker */ 211*4d7e907cSAndroid Build Coastguard Worker setAudioSource(AudioSource source) generates (Result retval); 212*4d7e907cSAndroid Build Coastguard Worker 213*4d7e907cSAndroid Build Coastguard Worker /** 214*4d7e907cSAndroid Build Coastguard Worker * This command indicates if the playback thread the effect is attached to 215*4d7e907cSAndroid Build Coastguard Worker * is offloaded or not, and updates the I/O handle of the playback thread 216*4d7e907cSAndroid Build Coastguard Worker * the effect is attached to. 217*4d7e907cSAndroid Build Coastguard Worker * 218*4d7e907cSAndroid Build Coastguard Worker * @param param effect offload descriptor. 219*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 220*4d7e907cSAndroid Build Coastguard Worker */ 221*4d7e907cSAndroid Build Coastguard Worker offload(EffectOffloadParameter param) generates (Result retval); 222*4d7e907cSAndroid Build Coastguard Worker 223*4d7e907cSAndroid Build Coastguard Worker /** 224*4d7e907cSAndroid Build Coastguard Worker * Returns the effect descriptor. 225*4d7e907cSAndroid Build Coastguard Worker * 226*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 227*4d7e907cSAndroid Build Coastguard Worker * @return descriptor effect descriptor. 228*4d7e907cSAndroid Build Coastguard Worker */ 229*4d7e907cSAndroid Build Coastguard Worker getDescriptor() generates (Result retval, EffectDescriptor descriptor); 230*4d7e907cSAndroid Build Coastguard Worker 231*4d7e907cSAndroid Build Coastguard Worker /** 232*4d7e907cSAndroid Build Coastguard Worker * Set up required transports for passing audio buffers to the effect. 233*4d7e907cSAndroid Build Coastguard Worker * 234*4d7e907cSAndroid Build Coastguard Worker * The transport consists of shared memory and a message queue for reporting 235*4d7e907cSAndroid Build Coastguard Worker * effect processing operation status. The shared memory is set up 236*4d7e907cSAndroid Build Coastguard Worker * separately using 'setProcessBuffers' method. 237*4d7e907cSAndroid Build Coastguard Worker * 238*4d7e907cSAndroid Build Coastguard Worker * Processing is requested by setting 'REQUEST_PROCESS' or 239*4d7e907cSAndroid Build Coastguard Worker * 'REQUEST_PROCESS_REVERSE' EventFlags associated with the status message 240*4d7e907cSAndroid Build Coastguard Worker * queue. The result of processing may be one of the following: 241*4d7e907cSAndroid Build Coastguard Worker * OK if there were no errors during processing; 242*4d7e907cSAndroid Build Coastguard Worker * INVALID_ARGUMENTS if audio buffers are invalid; 243*4d7e907cSAndroid Build Coastguard Worker * INVALID_STATE if the engine has finished the disable phase; 244*4d7e907cSAndroid Build Coastguard Worker * NOT_INITIALIZED if the audio buffers were not set; 245*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED if the requested processing type is not supported by 246*4d7e907cSAndroid Build Coastguard Worker * the effect. 247*4d7e907cSAndroid Build Coastguard Worker * 248*4d7e907cSAndroid Build Coastguard Worker * @return retval OK if both message queues were created successfully. 249*4d7e907cSAndroid Build Coastguard Worker * INVALID_STATE if the method was already called. 250*4d7e907cSAndroid Build Coastguard Worker * INVALID_ARGUMENTS if there was a problem setting up 251*4d7e907cSAndroid Build Coastguard Worker * the queue. 252*4d7e907cSAndroid Build Coastguard Worker * @return statusMQ a message queue used for passing status from the effect. 253*4d7e907cSAndroid Build Coastguard Worker */ 254*4d7e907cSAndroid Build Coastguard Worker @callflow(next={"setProcessBuffers"}) 255*4d7e907cSAndroid Build Coastguard Worker prepareForProcessing() generates (Result retval, fmq_sync<Result> statusMQ); 256*4d7e907cSAndroid Build Coastguard Worker 257*4d7e907cSAndroid Build Coastguard Worker /** 258*4d7e907cSAndroid Build Coastguard Worker * Set up input and output buffers for processing audio data. The effect 259*4d7e907cSAndroid Build Coastguard Worker * may modify both the input and the output buffer during the operation. 260*4d7e907cSAndroid Build Coastguard Worker * Buffers may be set multiple times during effect lifetime. 261*4d7e907cSAndroid Build Coastguard Worker * 262*4d7e907cSAndroid Build Coastguard Worker * The input and the output buffer may be reused between different effects, 263*4d7e907cSAndroid Build Coastguard Worker * and the input buffer may be used as an output buffer. Buffers are 264*4d7e907cSAndroid Build Coastguard Worker * distinguished using 'AudioBuffer.id' field. 265*4d7e907cSAndroid Build Coastguard Worker * 266*4d7e907cSAndroid Build Coastguard Worker * @param inBuffer input audio buffer. 267*4d7e907cSAndroid Build Coastguard Worker * @param outBuffer output audio buffer. 268*4d7e907cSAndroid Build Coastguard Worker * @return retval OK if both buffers were mapped successfully. 269*4d7e907cSAndroid Build Coastguard Worker * INVALID_ARGUMENTS if there was a problem with mapping 270*4d7e907cSAndroid Build Coastguard Worker * any of the buffers. 271*4d7e907cSAndroid Build Coastguard Worker */ 272*4d7e907cSAndroid Build Coastguard Worker setProcessBuffers(AudioBuffer inBuffer, AudioBuffer outBuffer) 273*4d7e907cSAndroid Build Coastguard Worker generates (Result retval); 274*4d7e907cSAndroid Build Coastguard Worker 275*4d7e907cSAndroid Build Coastguard Worker /** 276*4d7e907cSAndroid Build Coastguard Worker * Execute a vendor specific command on the effect. The command code 277*4d7e907cSAndroid Build Coastguard Worker * and data, as well as result data are not interpreted by Android 278*4d7e907cSAndroid Build Coastguard Worker * Framework and are passed as-is between the application and the effect. 279*4d7e907cSAndroid Build Coastguard Worker * 280*4d7e907cSAndroid Build Coastguard Worker * The effect must use standard POSIX.1-2001 error codes for the operation 281*4d7e907cSAndroid Build Coastguard Worker * completion status. 282*4d7e907cSAndroid Build Coastguard Worker * 283*4d7e907cSAndroid Build Coastguard Worker * Use this method only if the effect is provided by a third party, and 284*4d7e907cSAndroid Build Coastguard Worker * there is no interface defined for it. This method only works for effects 285*4d7e907cSAndroid Build Coastguard Worker * implemented in software. 286*4d7e907cSAndroid Build Coastguard Worker * 287*4d7e907cSAndroid Build Coastguard Worker * @param commandId the ID of the command. 288*4d7e907cSAndroid Build Coastguard Worker * @param data command data. 289*4d7e907cSAndroid Build Coastguard Worker * @param resultMaxSize maximum size in bytes of the result; can be 0. 290*4d7e907cSAndroid Build Coastguard Worker * @return status command completion status. 291*4d7e907cSAndroid Build Coastguard Worker * @return result result data. 292*4d7e907cSAndroid Build Coastguard Worker */ 293*4d7e907cSAndroid Build Coastguard Worker command(uint32_t commandId, vec<uint8_t> data, uint32_t resultMaxSize) 294*4d7e907cSAndroid Build Coastguard Worker generates (int32_t status, vec<uint8_t> result); 295*4d7e907cSAndroid Build Coastguard Worker 296*4d7e907cSAndroid Build Coastguard Worker /** 297*4d7e907cSAndroid Build Coastguard Worker * Set a vendor-specific parameter and apply it immediately. The parameter 298*4d7e907cSAndroid Build Coastguard Worker * code and data are not interpreted by Android Framework and are passed 299*4d7e907cSAndroid Build Coastguard Worker * as-is between the application and the effect. 300*4d7e907cSAndroid Build Coastguard Worker * 301*4d7e907cSAndroid Build Coastguard Worker * The effect must use INVALID_ARGUMENTS return code if the parameter ID is 302*4d7e907cSAndroid Build Coastguard Worker * unknown or if provided parameter data is invalid. If the effect does not 303*4d7e907cSAndroid Build Coastguard Worker * support setting vendor-specific parameters, it must return NOT_SUPPORTED. 304*4d7e907cSAndroid Build Coastguard Worker * 305*4d7e907cSAndroid Build Coastguard Worker * Use this method only if the effect is provided by a third party, and 306*4d7e907cSAndroid Build Coastguard Worker * there is no interface defined for it. This method only works for effects 307*4d7e907cSAndroid Build Coastguard Worker * implemented in software. 308*4d7e907cSAndroid Build Coastguard Worker * 309*4d7e907cSAndroid Build Coastguard Worker * @param parameter identifying data of the parameter. 310*4d7e907cSAndroid Build Coastguard Worker * @param value the value of the parameter. 311*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 312*4d7e907cSAndroid Build Coastguard Worker */ 313*4d7e907cSAndroid Build Coastguard Worker setParameter(vec<uint8_t> parameter, vec<uint8_t> value) 314*4d7e907cSAndroid Build Coastguard Worker generates (Result retval); 315*4d7e907cSAndroid Build Coastguard Worker 316*4d7e907cSAndroid Build Coastguard Worker /** 317*4d7e907cSAndroid Build Coastguard Worker * Get a vendor-specific parameter value. The parameter code and returned 318*4d7e907cSAndroid Build Coastguard Worker * data are not interpreted by Android Framework and are passed as-is 319*4d7e907cSAndroid Build Coastguard Worker * between the application and the effect. 320*4d7e907cSAndroid Build Coastguard Worker * 321*4d7e907cSAndroid Build Coastguard Worker * The effect must use INVALID_ARGUMENTS return code if the parameter ID is 322*4d7e907cSAndroid Build Coastguard Worker * unknown. If the effect does not support setting vendor-specific 323*4d7e907cSAndroid Build Coastguard Worker * parameters, it must return NOT_SUPPORTED. 324*4d7e907cSAndroid Build Coastguard Worker * 325*4d7e907cSAndroid Build Coastguard Worker * Use this method only if the effect is provided by a third party, and 326*4d7e907cSAndroid Build Coastguard Worker * there is no interface defined for it. This method only works for effects 327*4d7e907cSAndroid Build Coastguard Worker * implemented in software. 328*4d7e907cSAndroid Build Coastguard Worker * 329*4d7e907cSAndroid Build Coastguard Worker * @param parameter identifying data of the parameter. 330*4d7e907cSAndroid Build Coastguard Worker * @param valueMaxSize maximum size in bytes of the value. 331*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 332*4d7e907cSAndroid Build Coastguard Worker * @return result the value of the parameter. 333*4d7e907cSAndroid Build Coastguard Worker */ 334*4d7e907cSAndroid Build Coastguard Worker getParameter(vec<uint8_t> parameter, uint32_t valueMaxSize) 335*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, vec<uint8_t> value); 336*4d7e907cSAndroid Build Coastguard Worker 337*4d7e907cSAndroid Build Coastguard Worker /** 338*4d7e907cSAndroid Build Coastguard Worker * Get supported configs for a vendor-specific feature. The configs returned 339*4d7e907cSAndroid Build Coastguard Worker * are not interpreted by Android Framework and are passed as-is between the 340*4d7e907cSAndroid Build Coastguard Worker * application and the effect. 341*4d7e907cSAndroid Build Coastguard Worker * 342*4d7e907cSAndroid Build Coastguard Worker * The effect must use INVALID_ARGUMENTS return code if the feature ID is 343*4d7e907cSAndroid Build Coastguard Worker * unknown. If the effect does not support getting vendor-specific feature 344*4d7e907cSAndroid Build Coastguard Worker * configs, it must return NOT_SUPPORTED. If the feature is supported but 345*4d7e907cSAndroid Build Coastguard Worker * the total number of supported configurations exceeds the maximum number 346*4d7e907cSAndroid Build Coastguard Worker * indicated by the caller, the method must return RESULT_TOO_BIG. 347*4d7e907cSAndroid Build Coastguard Worker * 348*4d7e907cSAndroid Build Coastguard Worker * Use this method only if the effect is provided by a third party, and 349*4d7e907cSAndroid Build Coastguard Worker * there is no interface defined for it. This method only works for effects 350*4d7e907cSAndroid Build Coastguard Worker * implemented in software. 351*4d7e907cSAndroid Build Coastguard Worker * 352*4d7e907cSAndroid Build Coastguard Worker * @param featureId feature identifier. 353*4d7e907cSAndroid Build Coastguard Worker * @param maxConfigs maximum number of configs to return. 354*4d7e907cSAndroid Build Coastguard Worker * @param configSize size of each config in bytes. 355*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 356*4d7e907cSAndroid Build Coastguard Worker * @return configsCount number of configs returned. 357*4d7e907cSAndroid Build Coastguard Worker * @return configsData data for all the configs returned. 358*4d7e907cSAndroid Build Coastguard Worker */ 359*4d7e907cSAndroid Build Coastguard Worker getSupportedConfigsForFeature( 360*4d7e907cSAndroid Build Coastguard Worker uint32_t featureId, 361*4d7e907cSAndroid Build Coastguard Worker uint32_t maxConfigs, 362*4d7e907cSAndroid Build Coastguard Worker uint32_t configSize) generates ( 363*4d7e907cSAndroid Build Coastguard Worker Result retval, 364*4d7e907cSAndroid Build Coastguard Worker uint32_t configsCount, 365*4d7e907cSAndroid Build Coastguard Worker vec<uint8_t> configsData); 366*4d7e907cSAndroid Build Coastguard Worker 367*4d7e907cSAndroid Build Coastguard Worker /** 368*4d7e907cSAndroid Build Coastguard Worker * Get the current config for a vendor-specific feature. The config returned 369*4d7e907cSAndroid Build Coastguard Worker * is not interpreted by Android Framework and is passed as-is between the 370*4d7e907cSAndroid Build Coastguard Worker * application and the effect. 371*4d7e907cSAndroid Build Coastguard Worker * 372*4d7e907cSAndroid Build Coastguard Worker * The effect must use INVALID_ARGUMENTS return code if the feature ID is 373*4d7e907cSAndroid Build Coastguard Worker * unknown. If the effect does not support getting vendor-specific 374*4d7e907cSAndroid Build Coastguard Worker * feature configs, it must return NOT_SUPPORTED. 375*4d7e907cSAndroid Build Coastguard Worker * 376*4d7e907cSAndroid Build Coastguard Worker * Use this method only if the effect is provided by a third party, and 377*4d7e907cSAndroid Build Coastguard Worker * there is no interface defined for it. This method only works for effects 378*4d7e907cSAndroid Build Coastguard Worker * implemented in software. 379*4d7e907cSAndroid Build Coastguard Worker * 380*4d7e907cSAndroid Build Coastguard Worker * @param featureId feature identifier. 381*4d7e907cSAndroid Build Coastguard Worker * @param configSize size of the config in bytes. 382*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 383*4d7e907cSAndroid Build Coastguard Worker * @return configData config data. 384*4d7e907cSAndroid Build Coastguard Worker */ 385*4d7e907cSAndroid Build Coastguard Worker getCurrentConfigForFeature(uint32_t featureId, uint32_t configSize) 386*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, vec<uint8_t> configData); 387*4d7e907cSAndroid Build Coastguard Worker 388*4d7e907cSAndroid Build Coastguard Worker /** 389*4d7e907cSAndroid Build Coastguard Worker * Set the current config for a vendor-specific feature. The config data 390*4d7e907cSAndroid Build Coastguard Worker * is not interpreted by Android Framework and is passed as-is between the 391*4d7e907cSAndroid Build Coastguard Worker * application and the effect. 392*4d7e907cSAndroid Build Coastguard Worker * 393*4d7e907cSAndroid Build Coastguard Worker * The effect must use INVALID_ARGUMENTS return code if the feature ID is 394*4d7e907cSAndroid Build Coastguard Worker * unknown. If the effect does not support getting vendor-specific 395*4d7e907cSAndroid Build Coastguard Worker * feature configs, it must return NOT_SUPPORTED. 396*4d7e907cSAndroid Build Coastguard Worker * 397*4d7e907cSAndroid Build Coastguard Worker * Use this method only if the effect is provided by a third party, and 398*4d7e907cSAndroid Build Coastguard Worker * there is no interface defined for it. This method only works for effects 399*4d7e907cSAndroid Build Coastguard Worker * implemented in software. 400*4d7e907cSAndroid Build Coastguard Worker * 401*4d7e907cSAndroid Build Coastguard Worker * @param featureId feature identifier. 402*4d7e907cSAndroid Build Coastguard Worker * @param configData config data. 403*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 404*4d7e907cSAndroid Build Coastguard Worker */ 405*4d7e907cSAndroid Build Coastguard Worker setCurrentConfigForFeature(uint32_t featureId, vec<uint8_t> configData) 406*4d7e907cSAndroid Build Coastguard Worker generates (Result retval); 407*4d7e907cSAndroid Build Coastguard Worker 408*4d7e907cSAndroid Build Coastguard Worker /** 409*4d7e907cSAndroid Build Coastguard Worker * Called by the framework to deinitialize the effect and free up 410*4d7e907cSAndroid Build Coastguard Worker * all the currently allocated resources. It is recommended to close 411*4d7e907cSAndroid Build Coastguard Worker * the effect on the client side as soon as it is becomes unused. 412*4d7e907cSAndroid Build Coastguard Worker * 413*4d7e907cSAndroid Build Coastguard Worker * @return retval OK in case the success. 414*4d7e907cSAndroid Build Coastguard Worker * INVALID_STATE if the effect was already closed. 415*4d7e907cSAndroid Build Coastguard Worker */ 416*4d7e907cSAndroid Build Coastguard Worker @exit 417*4d7e907cSAndroid Build Coastguard Worker close() generates (Result retval); 418*4d7e907cSAndroid Build Coastguard Worker}; 419