You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
439 lines
17 KiB
439 lines
17 KiB
/* |
|
* Copyright (C) 2016 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
package android.hardware.audio.effect@2.0; |
|
|
|
import android.hardware.audio.common@2.0; |
|
import IEffectBufferProviderCallback; |
|
|
|
interface IEffect { |
|
/** |
|
* Initialize effect engine--all configurations return to default. |
|
* |
|
* @return retval operation completion status. |
|
*/ |
|
@entry |
|
@callflow(next={"*"}) |
|
init() generates (Result retval); |
|
|
|
/** |
|
* Apply new audio parameters configurations for input and output buffers. |
|
* The provider callbacks may be empty, but in this case the buffer |
|
* must be provided in the EffectConfig structure. |
|
* |
|
* @param config configuration descriptor. |
|
* @param inputBufferProvider optional buffer provider reference. |
|
* @param outputBufferProvider optional buffer provider reference. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
setConfig(EffectConfig config, |
|
IEffectBufferProviderCallback inputBufferProvider, |
|
IEffectBufferProviderCallback outputBufferProvider) |
|
generates (Result retval); |
|
|
|
/** |
|
* Reset the effect engine. Keep configuration but resets state and buffer |
|
* content. |
|
* |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
reset() generates (Result retval); |
|
|
|
/** |
|
* Enable processing. |
|
* |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"prepareForProcessing"}) |
|
enable() generates (Result retval); |
|
|
|
/** |
|
* Disable processing. |
|
* |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"close"}) |
|
disable() generates (Result retval); |
|
|
|
/** |
|
* Set the rendering device the audio output path is connected to. The |
|
* effect implementation must set EFFECT_FLAG_DEVICE_IND flag in its |
|
* descriptor to receive this command when the device changes. |
|
* |
|
* Note: this method is only supported for effects inserted into |
|
* the output chain. |
|
* |
|
* @param device output device specification. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
setDevice(AudioDevice device) generates (Result retval); |
|
|
|
/** |
|
* Set and get volume. Used by audio framework to delegate volume control to |
|
* effect engine. The effect implementation must set EFFECT_FLAG_VOLUME_CTRL |
|
* flag in its descriptor to receive this command. The effect engine must |
|
* return the volume that should be applied before the effect is |
|
* processed. The overall volume (the volume actually applied by the effect |
|
* engine multiplied by the returned value) should match the value indicated |
|
* in the command. |
|
* |
|
* @param volumes vector containing volume for each channel defined in |
|
* EffectConfig for output buffer expressed in 8.24 fixed |
|
* point format. |
|
* @return result updated volume values. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
setAndGetVolume(vec<uint32_t> volumes) |
|
generates (Result retval, vec<uint32_t> result); |
|
|
|
/** |
|
* Notify the effect of the volume change. The effect implementation must |
|
* set EFFECT_FLAG_VOLUME_IND flag in its descriptor to receive this |
|
* command. |
|
* |
|
* @param volumes vector containing volume for each channel defined in |
|
* EffectConfig for output buffer expressed in 8.24 fixed |
|
* point format. |
|
* @return retval operation completion status. |
|
*/ |
|
volumeChangeNotification(vec<uint32_t> volumes) |
|
generates (Result retval); |
|
|
|
/** |
|
* Set the audio mode. The effect implementation must set |
|
* EFFECT_FLAG_AUDIO_MODE_IND flag in its descriptor to receive this command |
|
* when the audio mode changes. |
|
* |
|
* @param mode desired audio mode. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
setAudioMode(AudioMode mode) generates (Result retval); |
|
|
|
/** |
|
* Apply new audio parameters configurations for input and output buffers of |
|
* reverse stream. An example of reverse stream is the echo reference |
|
* supplied to an Acoustic Echo Canceler. |
|
* |
|
* @param config configuration descriptor. |
|
* @param inputBufferProvider optional buffer provider reference. |
|
* @param outputBufferProvider optional buffer provider reference. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
setConfigReverse(EffectConfig config, |
|
IEffectBufferProviderCallback inputBufferProvider, |
|
IEffectBufferProviderCallback outputBufferProvider) |
|
generates (Result retval); |
|
|
|
/** |
|
* Set the capture device the audio input path is connected to. The effect |
|
* implementation must set EFFECT_FLAG_DEVICE_IND flag in its descriptor to |
|
* receive this command when the device changes. |
|
* |
|
* Note: this method is only supported for effects inserted into |
|
* the input chain. |
|
* |
|
* @param device input device specification. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
setInputDevice(AudioDevice device) generates (Result retval); |
|
|
|
/** |
|
* Read audio parameters configurations for input and output buffers. |
|
* |
|
* @return retval operation completion status. |
|
* @return config configuration descriptor. |
|
*/ |
|
@callflow(next={"*"}) |
|
getConfig() generates (Result retval, EffectConfig config); |
|
|
|
/** |
|
* Read audio parameters configurations for input and output buffers of |
|
* reverse stream. |
|
* |
|
* @return retval operation completion status. |
|
* @return config configuration descriptor. |
|
*/ |
|
@callflow(next={"*"}) |
|
getConfigReverse() generates (Result retval, EffectConfig config); |
|
|
|
/** |
|
* Queries for supported combinations of main and auxiliary channels |
|
* (e.g. for a multi-microphone noise suppressor). |
|
* |
|
* @param maxConfigs maximum number of the combinations to return. |
|
* @return retval absence of the feature support is indicated using |
|
* NOT_SUPPORTED code. RESULT_TOO_BIG is returned if |
|
* the number of supported combinations exceeds 'maxConfigs'. |
|
* @return result list of configuration descriptors. |
|
*/ |
|
@callflow(next={"*"}) |
|
getSupportedAuxChannelsConfigs(uint32_t maxConfigs) |
|
generates (Result retval, vec<EffectAuxChannelsConfig> result); |
|
|
|
/** |
|
* Retrieves the current configuration of main and auxiliary channels. |
|
* |
|
* @return retval absence of the feature support is indicated using |
|
* NOT_SUPPORTED code. |
|
* @return result configuration descriptor. |
|
*/ |
|
@callflow(next={"*"}) |
|
getAuxChannelsConfig() |
|
generates (Result retval, EffectAuxChannelsConfig result); |
|
|
|
/** |
|
* Sets the current configuration of main and auxiliary channels. |
|
* |
|
* @return retval operation completion status; absence of the feature |
|
* support is indicated using NOT_SUPPORTED code. |
|
*/ |
|
@callflow(next={"*"}) |
|
setAuxChannelsConfig(EffectAuxChannelsConfig config) |
|
generates (Result retval); |
|
|
|
/** |
|
* Set the audio source the capture path is configured for (Camcorder, voice |
|
* recognition...). |
|
* |
|
* Note: this method is only supported for effects inserted into |
|
* the input chain. |
|
* |
|
* @param source source descriptor. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
setAudioSource(AudioSource source) generates (Result retval); |
|
|
|
/** |
|
* This command indicates if the playback thread the effect is attached to |
|
* is offloaded or not, and updates the I/O handle of the playback thread |
|
* the effect is attached to. |
|
* |
|
* @param param effect offload descriptor. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
offload(EffectOffloadParameter param) generates (Result retval); |
|
|
|
/** |
|
* Returns the effect descriptor. |
|
* |
|
* @return retval operation completion status. |
|
* @return descriptor effect descriptor. |
|
*/ |
|
@callflow(next={"*"}) |
|
getDescriptor() generates (Result retval, EffectDescriptor descriptor); |
|
|
|
/** |
|
* Set up required transports for passing audio buffers to the effect. |
|
* |
|
* The transport consists of shared memory and a message queue for reporting |
|
* effect processing operation status. The shared memory is set up |
|
* separately using 'setProcessBuffers' method. |
|
* |
|
* Processing is requested by setting 'REQUEST_PROCESS' or |
|
* 'REQUEST_PROCESS_REVERSE' EventFlags associated with the status message |
|
* queue. The result of processing may be one of the following: |
|
* OK if there were no errors during processing; |
|
* INVALID_ARGUMENTS if audio buffers are invalid; |
|
* INVALID_STATE if the engine has finished the disable phase; |
|
* NOT_INITIALIZED if the audio buffers were not set; |
|
* NOT_SUPPORTED if the requested processing type is not supported by |
|
* the effect. |
|
* |
|
* @return retval OK if both message queues were created successfully. |
|
* INVALID_STATE if the method was already called. |
|
* INVALID_ARGUMENTS if there was a problem setting up |
|
* the queue. |
|
* @return statusMQ a message queue used for passing status from the effect. |
|
*/ |
|
@callflow(next={"setProcessBuffers"}) |
|
prepareForProcessing() generates (Result retval, fmq_sync<Result> statusMQ); |
|
|
|
/** |
|
* Set up input and output buffers for processing audio data. The effect |
|
* may modify both the input and the output buffer during the operation. |
|
* Buffers may be set multiple times during effect lifetime. |
|
* |
|
* The input and the output buffer may be reused between different effects, |
|
* and the input buffer may be used as an output buffer. Buffers are |
|
* distinguished using 'AudioBuffer.id' field. |
|
* |
|
* @param inBuffer input audio buffer. |
|
* @param outBuffer output audio buffer. |
|
* @return retval OK if both buffers were mapped successfully. |
|
* INVALID_ARGUMENTS if there was a problem with mapping |
|
* any of the buffers. |
|
*/ |
|
@callflow(next={"*"}) |
|
setProcessBuffers(AudioBuffer inBuffer, AudioBuffer outBuffer) generates ( |
|
Result retval); |
|
|
|
/** |
|
* Execute a vendor specific command on the effect. The command code |
|
* and data, as well as result data are not interpreted by Android |
|
* Framework and are passed as-is between the application and the effect. |
|
* |
|
* The effect must use standard POSIX.1-2001 error codes for the operation |
|
* completion status. |
|
* |
|
* Use this method only if the effect is provided by a third party, and |
|
* there is no interface defined for it. This method only works for effects |
|
* implemented in software. |
|
* |
|
* @param commandId the ID of the command. |
|
* @param data command data. |
|
* @param resultMaxSize maximum size in bytes of the result; can be 0. |
|
* @return status command completion status. |
|
* @return result result data. |
|
*/ |
|
command(uint32_t commandId, vec<uint8_t> data, uint32_t resultMaxSize) |
|
generates (int32_t status, vec<uint8_t> result); |
|
|
|
/** |
|
* Set a vendor-specific parameter and apply it immediately. The parameter |
|
* code and data are not interpreted by Android Framework and are passed |
|
* as-is between the application and the effect. |
|
* |
|
* The effect must use INVALID_ARGUMENTS return code if the parameter ID is |
|
* unknown or if provided parameter data is invalid. If the effect does not |
|
* support setting vendor-specific parameters, it must return NOT_SUPPORTED. |
|
* |
|
* Use this method only if the effect is provided by a third party, and |
|
* there is no interface defined for it. This method only works for effects |
|
* implemented in software. |
|
* |
|
* @param parameter identifying data of the parameter. |
|
* @param value the value of the parameter. |
|
* @return retval operation completion status. |
|
*/ |
|
@callflow(next={"*"}) |
|
setParameter(vec<uint8_t> parameter, vec<uint8_t> value) |
|
generates (Result retval); |
|
|
|
/** |
|
* Get a vendor-specific parameter value. The parameter code and returned |
|
* data are not interpreted by Android Framework and are passed as-is |
|
* between the application and the effect. |
|
* |
|
* The effect must use INVALID_ARGUMENTS return code if the parameter ID is |
|
* unknown. If the effect does not support setting vendor-specific |
|
* parameters, it must return NOT_SUPPORTED. |
|
* |
|
* Use this method only if the effect is provided by a third party, and |
|
* there is no interface defined for it. This method only works for effects |
|
* implemented in software. |
|
* |
|
* @param parameter identifying data of the parameter. |
|
* @param valueMaxSize maximum size in bytes of the value. |
|
* @return retval operation completion status. |
|
* @return result the value of the parameter. |
|
*/ |
|
@callflow(next={"*"}) |
|
getParameter(vec<uint8_t> parameter, uint32_t valueMaxSize) |
|
generates (Result retval, vec<uint8_t> value); |
|
|
|
/** |
|
* Get supported configs for a vendor-specific feature. The configs returned |
|
* are not interpreted by Android Framework and are passed as-is between the |
|
* application and the effect. |
|
* |
|
* The effect must use INVALID_ARGUMENTS return code if the feature ID is |
|
* unknown. If the effect does not support getting vendor-specific feature |
|
* configs, it must return NOT_SUPPORTED. If the feature is supported but |
|
* the total number of supported configurations exceeds the maximum number |
|
* indicated by the caller, the method must return RESULT_TOO_BIG. |
|
* |
|
* Use this method only if the effect is provided by a third party, and |
|
* there is no interface defined for it. This method only works for effects |
|
* implemented in software. |
|
* |
|
* @param featureId feature identifier. |
|
* @param maxConfigs maximum number of configs to return. |
|
* @param configSize size of each config in bytes. |
|
* @return retval operation completion status. |
|
* @return configsCount number of configs returned. |
|
* @return configsData data for all the configs returned. |
|
*/ |
|
@callflow(next={"*"}) |
|
getSupportedConfigsForFeature( |
|
uint32_t featureId, |
|
uint32_t maxConfigs, |
|
uint32_t configSize) generates ( |
|
Result retval, |
|
uint32_t configsCount, |
|
vec<uint8_t> configsData); |
|
|
|
/** |
|
* Get the current config for a vendor-specific feature. The config returned |
|
* is not interpreted by Android Framework and is passed as-is between the |
|
* application and the effect. |
|
* |
|
* The effect must use INVALID_ARGUMENTS return code if the feature ID is |
|
* unknown. If the effect does not support getting vendor-specific |
|
* feature configs, it must return NOT_SUPPORTED. |
|
* |
|
* Use this method only if the effect is provided by a third party, and |
|
* there is no interface defined for it. This method only works for effects |
|
* implemented in software. |
|
* |
|
* @param featureId feature identifier. |
|
* @param configSize size of the config in bytes. |
|
* @return retval operation completion status. |
|
* @return configData config data. |
|
*/ |
|
@callflow(next={"*"}) |
|
getCurrentConfigForFeature(uint32_t featureId, uint32_t configSize) |
|
generates (Result retval, vec<uint8_t> configData); |
|
|
|
/** |
|
* Set the current config for a vendor-specific feature. The config data |
|
* is not interpreted by Android Framework and is passed as-is between the |
|
* application and the effect. |
|
* |
|
* The effect must use INVALID_ARGUMENTS return code if the feature ID is |
|
* unknown. If the effect does not support getting vendor-specific |
|
* feature configs, it must return NOT_SUPPORTED. |
|
* |
|
* Use this method only if the effect is provided by a third party, and |
|
* there is no interface defined for it. This method only works for effects |
|
* implemented in software. |
|
* |
|
* @param featureId feature identifier. |
|
* @param configData config data. |
|
* @return retval operation completion status. |
|
*/ |
|
setCurrentConfigForFeature(uint32_t featureId, vec<uint8_t> configData) |
|
generates (Result retval); |
|
|
|
/** |
|
* Called by the framework to deinitialize the effect and free up |
|
* all the currently allocated resources. It is recommended to close |
|
* the effect on the client side as soon as it is becomes unused. |
|
* |
|
* @return retval OK in case the success. |
|
* INVALID_STATE if the effect was already closed. |
|
*/ |
|
@exit |
|
close() generates (Result retval); |
|
};
|
|
|