mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
Merge "Define HAL for audio effects"
This commit is contained in:
committed by
Android (Google) Code Review
commit
6cd5fa3017
@@ -1,6 +1,7 @@
|
||||
// This is an autogenerated file, do not edit.
|
||||
subdirs = [
|
||||
"audio/common/2.0",
|
||||
"audio/effect/2.0",
|
||||
"benchmarks/msgq/1.0",
|
||||
"nfc/1.0",
|
||||
"nfc/1.0/default",
|
||||
@@ -14,5 +15,4 @@ subdirs = [
|
||||
"vibrator/1.0",
|
||||
"wifi/1.0",
|
||||
"wifi/supplicant/1.0",
|
||||
"vibrator/1.0",
|
||||
]
|
||||
|
||||
151
audio/effect/2.0/Android.bp
Normal file
151
audio/effect/2.0/Android.bp
Normal file
@@ -0,0 +1,151 @@
|
||||
// This file is autogenerated by hidl-gen. Do not edit manually.
|
||||
|
||||
genrule {
|
||||
name: "android.hardware.audio.effect@2.0_genc++",
|
||||
tool: "hidl-gen",
|
||||
cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.audio.effect@2.0",
|
||||
srcs: [
|
||||
"types.hal",
|
||||
"IAcousticEchoCancelerEffect.hal",
|
||||
"IAutomaticGainControlEffect.hal",
|
||||
"IBassBoostEffect.hal",
|
||||
"IDownmixEffect.hal",
|
||||
"IEffect.hal",
|
||||
"IEffectBufferProviderCallback.hal",
|
||||
"IEffectsFactory.hal",
|
||||
"IEnvironmentalReverbEffect.hal",
|
||||
"IEqualizerEffect.hal",
|
||||
"ILoudnessEnhancerEffect.hal",
|
||||
"INoiseSuppressionEffect.hal",
|
||||
"IPresetReverbEffect.hal",
|
||||
"IVirtualizerEffect.hal",
|
||||
"IVisualizerEffect.hal",
|
||||
],
|
||||
out: [
|
||||
"android/hardware/audio/effect/2.0/types.cpp",
|
||||
"android/hardware/audio/effect/2.0/AcousticEchoCancelerEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/AutomaticGainControlEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/BassBoostEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/DownmixEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/EffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/EffectBufferProviderCallbackAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/EffectsFactoryAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/EnvironmentalReverbEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/EqualizerEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/LoudnessEnhancerEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/NoiseSuppressionEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/PresetReverbEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/VirtualizerEffectAll.cpp",
|
||||
"android/hardware/audio/effect/2.0/VisualizerEffectAll.cpp",
|
||||
],
|
||||
}
|
||||
|
||||
genrule {
|
||||
name: "android.hardware.audio.effect@2.0_genc++_headers",
|
||||
tool: "hidl-gen",
|
||||
cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.audio.effect@2.0",
|
||||
srcs: [
|
||||
"types.hal",
|
||||
"IAcousticEchoCancelerEffect.hal",
|
||||
"IAutomaticGainControlEffect.hal",
|
||||
"IBassBoostEffect.hal",
|
||||
"IDownmixEffect.hal",
|
||||
"IEffect.hal",
|
||||
"IEffectBufferProviderCallback.hal",
|
||||
"IEffectsFactory.hal",
|
||||
"IEnvironmentalReverbEffect.hal",
|
||||
"IEqualizerEffect.hal",
|
||||
"ILoudnessEnhancerEffect.hal",
|
||||
"INoiseSuppressionEffect.hal",
|
||||
"IPresetReverbEffect.hal",
|
||||
"IVirtualizerEffect.hal",
|
||||
"IVisualizerEffect.hal",
|
||||
],
|
||||
out: [
|
||||
"android/hardware/audio/effect/2.0/types.h",
|
||||
"android/hardware/audio/effect/2.0/IAcousticEchoCancelerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwAcousticEchoCancelerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnAcousticEchoCancelerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpAcousticEchoCancelerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsAcousticEchoCancelerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IAutomaticGainControlEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwAutomaticGainControlEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnAutomaticGainControlEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpAutomaticGainControlEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsAutomaticGainControlEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IBassBoostEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwBassBoostEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnBassBoostEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpBassBoostEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsBassBoostEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IDownmixEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwDownmixEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnDownmixEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpDownmixEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsDownmixEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IEffectBufferProviderCallback.h",
|
||||
"android/hardware/audio/effect/2.0/IHwEffectBufferProviderCallback.h",
|
||||
"android/hardware/audio/effect/2.0/BnEffectBufferProviderCallback.h",
|
||||
"android/hardware/audio/effect/2.0/BpEffectBufferProviderCallback.h",
|
||||
"android/hardware/audio/effect/2.0/BsEffectBufferProviderCallback.h",
|
||||
"android/hardware/audio/effect/2.0/IEffectsFactory.h",
|
||||
"android/hardware/audio/effect/2.0/IHwEffectsFactory.h",
|
||||
"android/hardware/audio/effect/2.0/BnEffectsFactory.h",
|
||||
"android/hardware/audio/effect/2.0/BpEffectsFactory.h",
|
||||
"android/hardware/audio/effect/2.0/BsEffectsFactory.h",
|
||||
"android/hardware/audio/effect/2.0/IEnvironmentalReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwEnvironmentalReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnEnvironmentalReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpEnvironmentalReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsEnvironmentalReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IEqualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwEqualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnEqualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpEqualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsEqualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/ILoudnessEnhancerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwLoudnessEnhancerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnLoudnessEnhancerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpLoudnessEnhancerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsLoudnessEnhancerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/INoiseSuppressionEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwNoiseSuppressionEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnNoiseSuppressionEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpNoiseSuppressionEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsNoiseSuppressionEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IPresetReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwPresetReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnPresetReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpPresetReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsPresetReverbEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IVirtualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwVirtualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnVirtualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpVirtualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsVirtualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IVisualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/IHwVisualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BnVisualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BpVisualizerEffect.h",
|
||||
"android/hardware/audio/effect/2.0/BsVisualizerEffect.h",
|
||||
],
|
||||
}
|
||||
|
||||
cc_library_shared {
|
||||
name: "android.hardware.audio.effect@2.0",
|
||||
generated_sources: ["android.hardware.audio.effect@2.0_genc++"],
|
||||
generated_headers: ["android.hardware.audio.effect@2.0_genc++_headers"],
|
||||
export_generated_headers: ["android.hardware.audio.effect@2.0_genc++_headers"],
|
||||
shared_libs: [
|
||||
"libhidl",
|
||||
"libhwbinder",
|
||||
"libutils",
|
||||
"libcutils",
|
||||
"android.hardware.audio.common@2.0",
|
||||
],
|
||||
}
|
||||
32
audio/effect/2.0/IAcousticEchoCancelerEffect.hal
Normal file
32
audio/effect/2.0/IAcousticEchoCancelerEffect.hal
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IAcousticEchoCancelerEffect extends IEffect {
|
||||
/*
|
||||
* Sets echo delay value in milliseconds.
|
||||
*/
|
||||
setEchoDelay(uint32_t echoDelayMs) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets echo delay value in milliseconds.
|
||||
*/
|
||||
getEchoDelay() generates (Result retval, uint32_t echoDelayMs);
|
||||
};
|
||||
68
audio/effect/2.0/IAutomaticGainControlEffect.hal
Normal file
68
audio/effect/2.0/IAutomaticGainControlEffect.hal
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IAutomaticGainControlEffect extends IEffect {
|
||||
/*
|
||||
* Sets target level in millibels.
|
||||
*/
|
||||
setTargetLevel(int16_t targetLevelMb) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets target level.
|
||||
*/
|
||||
getTargetLevel() generates (Result retval, int16_t targetLevelMb);
|
||||
|
||||
/*
|
||||
* Sets gain in the compression range in millibels.
|
||||
*/
|
||||
setCompGain(int16_t compGainMb) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets gain in the compression range.
|
||||
*/
|
||||
getCompGain() generates (Result retval, int16_t compGainMb);
|
||||
|
||||
/*
|
||||
* Enables or disables limiter.
|
||||
*/
|
||||
setLimiterEnabled(bool enabled) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Returns whether limiter is enabled.
|
||||
*/
|
||||
isLimiterEnabled() generates (Result retval, bool enabled);
|
||||
|
||||
struct AllProperties {
|
||||
int16_t targetLevelMb;
|
||||
int16_t compGainMb;
|
||||
bool limiterEnabled;
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets all properties at once.
|
||||
*/
|
||||
setAllProperties(AllProperties properties) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets all properties at once.
|
||||
*/
|
||||
getAllProperties() generates (Result retval, AllProperties properties);
|
||||
};
|
||||
48
audio/effect/2.0/IBassBoostEffect.hal
Normal file
48
audio/effect/2.0/IBassBoostEffect.hal
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IBassBoostEffect extends IEffect {
|
||||
/*
|
||||
* Returns whether setting bass boost strength is supported.
|
||||
*/
|
||||
isStrengthSupported() generates (Result retval, bool strengthSupported);
|
||||
|
||||
enum StrengthRange : uint16_t {
|
||||
MIN = 0,
|
||||
MAX = 1000
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets bass boost strength.
|
||||
*
|
||||
* @param strength strength of the effect. The valid range for strength
|
||||
* strength is [0, 1000], where 0 per mille designates the
|
||||
* mildest effect and 1000 per mille designates the
|
||||
* strongest.
|
||||
* @return retval operation completion status.
|
||||
*/
|
||||
setStrength(uint16_t strength) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets virtualization strength.
|
||||
*/
|
||||
getStrength() generates (Result retval, uint16_t strength);
|
||||
};
|
||||
31
audio/effect/2.0/IDownmixEffect.hal
Normal file
31
audio/effect/2.0/IDownmixEffect.hal
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IDownmixEffect extends IEffect {
|
||||
enum Type {
|
||||
STRIP, // throw away the extra channels
|
||||
FOLD // mix the extra channels with FL/FR
|
||||
};
|
||||
|
||||
setType(Type preset) generates (Result retval);
|
||||
|
||||
getType() generates (Result retval, Type preset);
|
||||
};
|
||||
311
audio/effect/2.0/IEffect.hal
Normal file
311
audio/effect/2.0/IEffect.hal
Normal file
@@ -0,0 +1,311 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
reset();
|
||||
|
||||
/*
|
||||
* Enable processing.
|
||||
*
|
||||
* @return retval operation completion status.
|
||||
*/
|
||||
@callflow(next={"process"})
|
||||
enable() generates (Result retval);
|
||||
|
||||
/*
|
||||
* Disable processing.
|
||||
*
|
||||
* @return retval operation completion status.
|
||||
*/
|
||||
@exit
|
||||
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.
|
||||
*
|
||||
* @param device output device specification.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
setDevice(AudioDevice device);
|
||||
|
||||
/*
|
||||
* Set and get volume. Used by audio framework to delegate volume control to
|
||||
* effect engine. The effect implementation must set EFFECT_FLAG_VOLUME_IND
|
||||
* or EFFECT_FLAG_VOLUME_CTRL flag in its descriptor to receive this command
|
||||
* before every call to 'process' function If EFFECT_FLAG_VOLUME_CTRL flag
|
||||
* is set in the effect descriptor, 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. It is OK to receive an empty vector
|
||||
* as a result in which case the effect framework has
|
||||
* delegated volume control to another effect.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
setAndGetVolume(vec<int32_t> volumes) generates (vec<int32_t> result);
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
setAudioMode(AudioMode mode);
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* @param device input device specification.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
setInputDevice(AudioDevice device);
|
||||
|
||||
/*
|
||||
* Read audio parameters configurations for input and output buffers.
|
||||
*
|
||||
* @return config configuration descriptor.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
getConfig() generates (EffectConfig config);
|
||||
|
||||
/*
|
||||
* Read audio parameters configurations for input and output buffers of
|
||||
* reverse stream.
|
||||
*
|
||||
* @return config configuration descriptor.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
getConfigReverse() generates (EffectConfig config);
|
||||
|
||||
/*
|
||||
* Queries for supported configurations for a particular feature (e.g. get
|
||||
* the supported combinations of main and auxiliary channels for a noise
|
||||
* suppressor). The command parameter is a list of the feature identifiers.
|
||||
*
|
||||
* @return retval absence of the feature support is indicated using
|
||||
* NOT_SUPPORTED code.
|
||||
* @return result list of configuration descriptors.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
getFeatureSupportedConfigs(vec<EffectFeature> features)
|
||||
generates (Result retval, vec<EffectFeatureConfig> result);
|
||||
|
||||
/*
|
||||
* Retrieves current configuration for a given feature.
|
||||
*
|
||||
* @return retval absence of the feature support is indicated using
|
||||
* NOT_SUPPORTED code.
|
||||
* @return result configuration descriptor.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
getFeatureConfig(EffectFeature feature)
|
||||
generates (Result retval, EffectFeatureConfig result);
|
||||
|
||||
/*
|
||||
* Sets current configuration for a given feature.
|
||||
*
|
||||
* @return retval operation completion status.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
setFeatureConfig(EffectFeatureConfig featureConfig)
|
||||
generates (Result retval);
|
||||
|
||||
/*
|
||||
* Set the audio source the capture path is configured for (Camcorder, voice
|
||||
* recognition...).
|
||||
*
|
||||
* @param source source descriptor.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
setAudioSource(AudioSource source);
|
||||
|
||||
/*
|
||||
* 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 descriptor effect descriptor.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
getDescriptor() generates (EffectDescriptor descriptor);
|
||||
|
||||
/*
|
||||
* Effect process function. Takes input samples as specified (count and
|
||||
* location) in input buffer and returns processed samples as specified in
|
||||
* output buffer. If the buffer descriptor is empty the function must use
|
||||
* either the buffer or the buffer provider callback installed by the
|
||||
* setConfig command. The effect framework must call the 'process' function
|
||||
* after the 'enable' command is received and until the 'disable' is
|
||||
* received. When the engine receives the 'disable' command it should turn
|
||||
* off the effect gracefully and when done indicate that it is OK to stop
|
||||
* calling the 'process' function by returning the INVALID_STATE status.
|
||||
*
|
||||
* @param inBuffer input audio buffer.
|
||||
* @return retval operation completion status.
|
||||
* @return outBuffer output audio buffer.
|
||||
*/
|
||||
// TODO(mnaganov): replace with FMQ version.
|
||||
@callflow(next={"*"})
|
||||
process(AudioBuffer inBuffer)
|
||||
generates (Result retval, AudioBuffer outBuffer);
|
||||
|
||||
/*
|
||||
* Process reverse stream function. This function is used to pass a
|
||||
* reference stream to the effect engine. If the engine does not need a
|
||||
* reference stream, this function MUST return NOT_SUPPORTED. For example,
|
||||
* this function would typically implemented by an Echo Canceler.
|
||||
*
|
||||
* @param inBuffer input audio buffer.
|
||||
* @return retval operation completion status.
|
||||
* @return outBuffer output audio buffer.
|
||||
*/
|
||||
// TODO(mnaganov): replace with FMQ version.
|
||||
@callflow(next={"*"})
|
||||
processReverse(AudioBuffer inBuffer)
|
||||
generates (Result retval, AudioBuffer outBuffer);
|
||||
|
||||
/*
|
||||
* 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.
|
||||
* @return status command completion status.
|
||||
* @return result result data.
|
||||
*/
|
||||
command(uint32_t commandId, vec<uint8_t> data)
|
||||
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.
|
||||
* @return retval operation completion status.
|
||||
* @return result the value of the parameter.
|
||||
*/
|
||||
@callflow(next={"*"})
|
||||
getParameter(vec<uint8_t> parameter)
|
||||
generates (Result retval, vec<uint8_t> value);
|
||||
};
|
||||
40
audio/effect/2.0/IEffectBufferProviderCallback.hal
Normal file
40
audio/effect/2.0/IEffectBufferProviderCallback.hal
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/*
|
||||
* This callback interface contains functions that can be used by the effect
|
||||
* engine 'process' function to exchange input and output audio buffers.
|
||||
*/
|
||||
interface IEffectBufferProviderCallback {
|
||||
/*
|
||||
* Called to retrieve a buffer where data should read from by 'process'
|
||||
* function.
|
||||
*
|
||||
* @return buffer audio buffer for processing
|
||||
*/
|
||||
// TODO(mnaganov): replace with FMQ version.
|
||||
getBuffer() generates (AudioBuffer buffer);
|
||||
|
||||
/*
|
||||
* Called to provide a buffer with the data written by 'process' function.
|
||||
*
|
||||
* @param buffer audio buffer for processing
|
||||
*/
|
||||
// TODO(mnaganov): replace with FMQ version.
|
||||
putBuffer(AudioBuffer buffer);
|
||||
};
|
||||
64
audio/effect/2.0/IEffectsFactory.hal
Normal file
64
audio/effect/2.0/IEffectsFactory.hal
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IEffectsFactory {
|
||||
/*
|
||||
* Returns descriptors of different effects in all loaded libraries.
|
||||
*
|
||||
* @return retval operation completion status.
|
||||
* @return result list of effect descriptors.
|
||||
*/
|
||||
getAllDescriptors() generates(Result retval, vec<EffectDescriptor> result);
|
||||
|
||||
/*
|
||||
* Returns a descriptor of a particular effect.
|
||||
*
|
||||
* @return retval operation completion status.
|
||||
* @return result effect descriptor.
|
||||
*/
|
||||
getDescriptor(Uuid uid) generates(Result retval, EffectDescriptor result);
|
||||
|
||||
/*
|
||||
* Creates an effect engine of the specified type. To release the effect
|
||||
* engine, it is necessary to release references to the returned effect
|
||||
* object.
|
||||
*
|
||||
* @param uid effect uuid.
|
||||
* @param session audio session to which this effect instance will be
|
||||
* attached. All effects created with the same session ID
|
||||
* are connected in series and process the same signal
|
||||
* stream.
|
||||
* @param ioHandle identifies the output or input stream this effect is
|
||||
* directed to in audio HAL.
|
||||
* @return retval operation completion status.
|
||||
* @return result the interface for the created effect.
|
||||
*/
|
||||
createEffect(Uuid uid, AudioSession session, AudioIoHandle ioHandle)
|
||||
generates (Result retval, IEffect result);
|
||||
|
||||
/*
|
||||
* Dumps information about effects into the provided file descriptor.
|
||||
* This is used for the dumpsys facility.
|
||||
*
|
||||
* @param fd dump file descriptor.
|
||||
*/
|
||||
debugDump(handle fd);
|
||||
};
|
||||
168
audio/effect/2.0/IEnvironmentalReverbEffect.hal
Normal file
168
audio/effect/2.0/IEnvironmentalReverbEffect.hal
Normal file
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IEnvironmentalReverbEffect extends IEffect {
|
||||
/*
|
||||
* Sets whether the effect should be bypassed.
|
||||
*/
|
||||
setBypass(bool bypass) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets whether the effect should be bypassed.
|
||||
*/
|
||||
getBypass() generates (Result retval, bool bypass);
|
||||
|
||||
enum ParamRange : int16_t {
|
||||
ROOM_LEVEL_MIN = -6000,
|
||||
ROOM_LEVEL_MAX = 0,
|
||||
ROOM_HF_LEVEL_MIN = -4000,
|
||||
ROOM_HF_LEVEL_MAX = 0,
|
||||
DECAY_TIME_MIN = 100,
|
||||
DECAY_TIME_MAX = 20000,
|
||||
DECAY_HF_RATIO_MIN = 100,
|
||||
DECAY_HF_RATIO_MAX = 1000,
|
||||
REFLECTIONS_LEVEL_MIN = -6000,
|
||||
REFLECTIONS_LEVEL_MAX = 0,
|
||||
REFLECTIONS_DELAY_MIN = 0,
|
||||
REFLECTIONS_DELAY_MAX = 65,
|
||||
REVERB_LEVEL_MIN = -6000,
|
||||
REVERB_LEVEL_MAX = 0,
|
||||
REVERB_DELAY_MIN = 0,
|
||||
REVERB_DELAY_MAX = 65,
|
||||
DIFFUSION_MIN = 0,
|
||||
DIFFUSION_MAX = 1000,
|
||||
DENSITY_MIN = 0,
|
||||
DENSITY_MAX = 1000
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets the room level.
|
||||
*/
|
||||
setRoomLevel(int16_t roomLevel) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the room level.
|
||||
*/
|
||||
getRoomLevel() generates (Result retval, int16_t roomLevel);
|
||||
|
||||
/*
|
||||
* Sets the room high frequences level.
|
||||
*/
|
||||
setRoomHfLevel(int16_t roomHfLevel) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the room high frequences level.
|
||||
*/
|
||||
getRoomHfLevel() generates (Result retval, int16_t roomHfLevel);
|
||||
|
||||
/*
|
||||
* Sets the room decay time.
|
||||
*/
|
||||
setDecayTime(uint32_t decayTime) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the room decay time.
|
||||
*/
|
||||
getDecayTime() generates (Result retval, uint32_t decayTime);
|
||||
|
||||
/*
|
||||
* Sets the ratio of high frequences decay.
|
||||
*/
|
||||
setDecayHfRatio(int16_t decayHfRatio) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the ratio of high frequences decay.
|
||||
*/
|
||||
getDecayHfRatio() generates (Result retval, int16_t decayHfRatio);
|
||||
|
||||
/*
|
||||
* Sets the level of reflections in the room.
|
||||
*/
|
||||
setReflectionsLevel(int16_t reflectionsLevel) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the level of reflections in the room.
|
||||
*/
|
||||
getReflectionsLevel() generates (Result retval, int16_t reflectionsLevel);
|
||||
|
||||
/*
|
||||
* Sets the reflections delay in the room.
|
||||
*/
|
||||
setReflectionsDelay(uint32_t reflectionsDelay) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the reflections delay in the room.
|
||||
*/
|
||||
getReflectionsDelay() generates (Result retval, uint32_t reflectionsDelay);
|
||||
|
||||
/*
|
||||
* Sets the reverb level of the room.
|
||||
*/
|
||||
setReverbLevel(int16_t reverbLevel) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the reverb level of the room.
|
||||
*/
|
||||
getReverbLevel() generates (Result retval, int16_t reverbLevel);
|
||||
|
||||
/*
|
||||
* Sets room diffusion.
|
||||
*/
|
||||
setDiffusion(int16_t diffusion) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets room diffusion.
|
||||
*/
|
||||
getDiffusion() generates (Result retval, int16_t diffusion);
|
||||
|
||||
/*
|
||||
* Sets room wall density.
|
||||
*/
|
||||
setDensity(int16_t density) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets room wall density.
|
||||
*/
|
||||
getDensity() generates (Result retval, int16_t density);
|
||||
|
||||
struct AllProperties {
|
||||
int16_t roomLevel; // in millibels, range -6000 to 0
|
||||
int16_t roomHfLevel; // in millibels, range -4000 to 0
|
||||
uint32_t decayTime; // in milliseconds, range 100 to 20000
|
||||
int16_t decayHfRatio; // in permilles, range 100 to 1000
|
||||
int16_t reflectionsLevel; // in millibels, range -6000 to 0
|
||||
uint32_t reflectionsDelay; // in milliseconds, range 0 to 65
|
||||
int16_t reverbLevel; // in millibels, range -6000 to 0
|
||||
uint32_t reverbDelay; // in milliseconds, range 0 to 65
|
||||
int16_t diffusion; // in permilles, range 0 to 1000
|
||||
int16_t density; // in permilles, range 0 to 1000
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets all properties at once.
|
||||
*/
|
||||
setAllProperties(AllProperties properties) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets all properties at once.
|
||||
*/
|
||||
getAllProperties() generates (Result retval, AllProperties properties);
|
||||
};
|
||||
91
audio/effect/2.0/IEqualizerEffect.hal
Normal file
91
audio/effect/2.0/IEqualizerEffect.hal
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IEqualizerEffect extends IEffect {
|
||||
/*
|
||||
* Gets the number of frequency bands that the equalizer supports.
|
||||
*/
|
||||
getNumBands() generates (Result retval, uint16_t numBands);
|
||||
|
||||
/*
|
||||
* Returns the minimum and maximum band levels supported.
|
||||
*/
|
||||
getLevelRange()
|
||||
generates (Result retval, uint16_t minLevel, uint16_t maxLevel);
|
||||
|
||||
/*
|
||||
* Sets the gain for the given equalizer band.
|
||||
*/
|
||||
setBandLevel(uint16_t band, uint16_t level) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the gain for the given equalizer band.
|
||||
*/
|
||||
getBandLevel(uint16_t band) generates (Result retval, uint16_t level);
|
||||
|
||||
/*
|
||||
* Gets the center frequency of the given band.
|
||||
*/
|
||||
getBandCenterFrequency(uint16_t band)
|
||||
generates (Result retval, uint32_t centerFreq);
|
||||
|
||||
/*
|
||||
* Gets the frequency range of the given frequency band.
|
||||
*/
|
||||
getBandFrequencyRange(uint16_t band)
|
||||
generates (Result retval, uint32_t minFreqHz, uint32_t maxFreqHz);
|
||||
|
||||
/*
|
||||
* Gets the band that has the most effect on the given frequency.
|
||||
*/
|
||||
getBandForFrequency(uint32_t freq) generates (Result retval, uint16_t band);
|
||||
|
||||
/*
|
||||
* Gets the names of all presets the equalizer supports.
|
||||
*/
|
||||
getPresetNames() generates (Result retval, vec<string> names);
|
||||
|
||||
/*
|
||||
* Sets the current preset using the index of the preset in the names
|
||||
* vector returned via 'getPresetNames'.
|
||||
*/
|
||||
setCurrentPreset(uint16_t preset) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the current preset.
|
||||
*/
|
||||
getCurrentPreset() generates (Result retval, uint16_t preset);
|
||||
|
||||
struct AllProperties {
|
||||
uint16_t curPreset;
|
||||
vec<uint16_t> bandLevels;
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets all properties at once.
|
||||
*/
|
||||
setAllProperties(AllProperties properties) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets all properties at once.
|
||||
*/
|
||||
getAllProperties() generates (Result retval, AllProperties properties);
|
||||
};
|
||||
32
audio/effect/2.0/ILoudnessEnhancerEffect.hal
Normal file
32
audio/effect/2.0/ILoudnessEnhancerEffect.hal
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface ILoudnessEnhancerEffect extends IEffect {
|
||||
/*
|
||||
* Sets target gain expressed in millibels.
|
||||
*/
|
||||
setTargetGain(int32_t targetGainMb) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets target gain expressed in millibels.
|
||||
*/
|
||||
getTargetGain() generates (Result retval, int32_t targetGainMb);
|
||||
};
|
||||
68
audio/effect/2.0/INoiseSuppressionEffect.hal
Normal file
68
audio/effect/2.0/INoiseSuppressionEffect.hal
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface INoiseSuppressionEffect extends IEffect {
|
||||
enum Level {
|
||||
LOW,
|
||||
MEDIUM,
|
||||
HIGH
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets suppression level.
|
||||
*/
|
||||
setSuppressionLevel(Level level) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets suppression level.
|
||||
*/
|
||||
getSuppressionLevel() generates (Result retval, Level level);
|
||||
|
||||
enum Type {
|
||||
SINGLE_CHANNEL,
|
||||
MULTI_CHANNEL
|
||||
};
|
||||
|
||||
/*
|
||||
* Set suppression type.
|
||||
*/
|
||||
setSuppressionType(Type type) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Get suppression type.
|
||||
*/
|
||||
getSuppressionType() generates (Result retval, Type type);
|
||||
|
||||
struct AllProperties {
|
||||
Level level;
|
||||
Type type;
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets all properties at once.
|
||||
*/
|
||||
setAllProperties(AllProperties properties) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets all properties at once.
|
||||
*/
|
||||
getAllProperties() generates (Result retval, AllProperties properties);
|
||||
};
|
||||
37
audio/effect/2.0/IPresetReverbEffect.hal
Normal file
37
audio/effect/2.0/IPresetReverbEffect.hal
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IPresetReverbEffect extends IEffect {
|
||||
enum Preset {
|
||||
NONE, // no reverb or reflections
|
||||
SMALLROOM, // a small room less than five meters in length
|
||||
MEDIUMROOM, // a medium room with a length of ten meters or less
|
||||
LARGEROOM, // a large-sized room suitable for live performances
|
||||
MEDIUMHALL, // a medium-sized hall
|
||||
LARGEHALL, // a large-sized hall suitable for a full orchestra
|
||||
PLATE, // synthesis of the traditional plate reverb
|
||||
LAST = PLATE
|
||||
};
|
||||
|
||||
setPreset(Preset preset) generates (Result retval);
|
||||
|
||||
getPreset() generates (Result retval, Preset preset);
|
||||
};
|
||||
76
audio/effect/2.0/IVirtualizerEffect.hal
Normal file
76
audio/effect/2.0/IVirtualizerEffect.hal
Normal file
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IVirtualizerEffect extends IEffect {
|
||||
/*
|
||||
* Returns whether setting virtualization strength is supported.
|
||||
*/
|
||||
isStrengthSupported() generates (bool strengthSupported);
|
||||
|
||||
enum StrengthRange : uint16_t {
|
||||
MIN = 0,
|
||||
MAX = 1000
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets virtualization strength.
|
||||
*
|
||||
* @param strength strength of the effect. The valid range for strength
|
||||
* strength is [0, 1000], where 0 per mille designates the
|
||||
* mildest effect and 1000 per mille designates the
|
||||
* strongest.
|
||||
* @return retval operation completion status.
|
||||
*/
|
||||
setStrength(uint16_t strength) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets virtualization strength.
|
||||
*/
|
||||
getStrength() generates (Result retval, uint16_t strength);
|
||||
|
||||
struct SpeakerAngle {
|
||||
AudioChannelMask mask; // speaker channel mask (1 bit set).
|
||||
// all angles are expressed in degrees and
|
||||
// are relative to the listener.
|
||||
int16_t azimuth; // 0 is the direction the listener faces
|
||||
// 180 is behind the listener
|
||||
// -90 is to their left
|
||||
int16_t elevation; // 0 is the horizontal plane
|
||||
// +90 is above the listener, -90 is below
|
||||
};
|
||||
/*
|
||||
* Retrieves virtual speaker angles for the given channel mask on the
|
||||
* specified device.
|
||||
*/
|
||||
getVirtualSpeakerAngles(AudioChannelMask mask, AudioDevice device)
|
||||
generates (Result retval, vec<SpeakerAngle> speakerAngles);
|
||||
|
||||
/*
|
||||
* Forces the virtualizer effect for the given output device.
|
||||
*/
|
||||
forceVirtualizationMode(AudioDevice device) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Returns audio device reflecting the current virtualization mode,
|
||||
* AUDIO_DEVICE_NONE when not virtualizing.
|
||||
*/
|
||||
getVirtualizationMode() generates (Result retval, AudioDevice device);
|
||||
};
|
||||
110
audio/effect/2.0/IVisualizerEffect.hal
Normal file
110
audio/effect/2.0/IVisualizerEffect.hal
Normal file
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* 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 IEffect;
|
||||
|
||||
interface IVisualizerEffect extends IEffect {
|
||||
enum CaptureSizeRange {
|
||||
MAX = 1024, // maximum capture size in samples
|
||||
MIN = 128 // minimum capture size in samples
|
||||
};
|
||||
|
||||
/*
|
||||
* Sets the number PCM samples in the capture.
|
||||
*/
|
||||
setCaptureSize(uint16_t captureSize) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the number PCM samples in the capture.
|
||||
*/
|
||||
getCaptureSize() generates (Result retval, uint16_t captureSize);
|
||||
|
||||
enum ScalingMode {
|
||||
// Keep in sync with
|
||||
// frameworks/base/media/java/android/media/audiofx/Visualizer.java
|
||||
SCALING_MODE_NORMALIZED = 0,
|
||||
SCALING_MODE_AS_PLAYED = 1
|
||||
};
|
||||
|
||||
/*
|
||||
* Specifies the way the captured data is scaled.
|
||||
*/
|
||||
setScalingMode(ScalingMode scalingMode) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Retrieves the way the captured data is scaled.
|
||||
*/
|
||||
getScalingMode() generates (Result retval, ScalingMode scalingMode);
|
||||
|
||||
/*
|
||||
* Informs the visualizer about the downstream latency.
|
||||
*/
|
||||
setLatency(uint32_t latencyMs) generates (Result retval);
|
||||
|
||||
/*
|
||||
* Gets the downstream latency.
|
||||
*/
|
||||
getLatency() generates (Result retval, uint32_t latencyMs);
|
||||
|
||||
enum MeasurementMode {
|
||||
// Keep in sync with
|
||||
// frameworks/base/media/java/android/media/audiofx/Visualizer.java
|
||||
MEASUREMENT_MODE_NONE = 0x0,
|
||||
MEASUREMENT_MODE_PEAK_RMS = 0x1
|
||||
};
|
||||
|
||||
/*
|
||||
* Specifies which measurements are to be made.
|
||||
*/
|
||||
setMeasurementMode(MeasurementMode measurementMode)
|
||||
generates (Result retval);
|
||||
|
||||
/*
|
||||
* Retrieves which measurements are to be made.
|
||||
*/
|
||||
getMeasurementMode() generates (
|
||||
Result retval, MeasurementMode measurementMode);
|
||||
|
||||
/*
|
||||
* Retrieves the latest PCM snapshot captured by the visualizer engine. The
|
||||
* number of samples to capture is specified by 'setCaptureSize' parameter.
|
||||
*
|
||||
* @return retval operation completion status.
|
||||
* @return samples samples in 8 bit unsigned format (0 = 0x80)
|
||||
*/
|
||||
capture() generates (Result retval, vec<uint8_t> samples);
|
||||
|
||||
struct Measurement {
|
||||
MeasurementMode mode; // discriminator
|
||||
union Values {
|
||||
struct PeakAndRms {
|
||||
int32_t peakMb; // millibels
|
||||
int32_t rmsMb; // millibels
|
||||
} peakAndRms;
|
||||
};
|
||||
};
|
||||
/*
|
||||
* Retrieves the lastest measurements. The measurements to be made
|
||||
* are specified by 'setMeasurementMode' parameter.
|
||||
*
|
||||
* @return retval operation completion status.
|
||||
* @return result measurement.
|
||||
*/
|
||||
measure() generates (Result retval, Measurement result);
|
||||
};
|
||||
303
audio/effect/2.0/types.hal
Normal file
303
audio/effect/2.0/types.hal
Normal file
@@ -0,0 +1,303 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
enum Result {
|
||||
OK,
|
||||
NOT_INITIALIZED,
|
||||
INVALID_ARGUMENTS,
|
||||
INVALID_STATE,
|
||||
NOT_SUPPORTED
|
||||
};
|
||||
|
||||
/*
|
||||
* Effect engine capabilities/requirements flags.
|
||||
*
|
||||
* Definitions for flags field of effect descriptor.
|
||||
*
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | description | bits | values
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | connection | 0..2 | 0 insert: after track process
|
||||
* | mode | | 1 auxiliary: connect to track auxiliary
|
||||
* | | | output and use send level
|
||||
* | | | 2 replace: replaces track process function;
|
||||
* | | | must implement SRC, volume and mono to stereo.
|
||||
* | | | 3 pre processing: applied below audio HAL on in
|
||||
* | | | 4 post processing: applied below audio HAL on out
|
||||
* | | | 5 - 7 reserved
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | insertion | 3..5 | 0 none
|
||||
* | preference | | 1 first of the chain
|
||||
* | | | 2 last of the chain
|
||||
* | | | 3 exclusive (only effect in the insert chain)
|
||||
* | | | 4..7 reserved
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Volume | 6..8 | 0 none
|
||||
* | management | | 1 implements volume control
|
||||
* | | | 2 requires volume indication
|
||||
* | | | 4 reserved
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Device | 9..11 | 0 none
|
||||
* | indication | | 1 requires device updates
|
||||
* | | | 2, 4 reserved
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Sample input | 12..13 | 1 direct: process() function or
|
||||
* | mode | | EFFECT_CMD_SET_CONFIG command must specify
|
||||
* | | | a buffer descriptor
|
||||
* | | | 2 provider: process() function uses the
|
||||
* | | | bufferProvider indicated by the
|
||||
* | | | EFFECT_CMD_SET_CONFIG command to request input.
|
||||
* | | | buffers.
|
||||
* | | | 3 both: both input modes are supported
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Sample output | 14..15 | 1 direct: process() function or
|
||||
* | mode | | EFFECT_CMD_SET_CONFIG command must specify
|
||||
* | | | a buffer descriptor
|
||||
* | | | 2 provider: process() function uses the
|
||||
* | | | bufferProvider indicated by the
|
||||
* | | | EFFECT_CMD_SET_CONFIG command to request output
|
||||
* | | | buffers.
|
||||
* | | | 3 both: both output modes are supported
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Hardware | 16..17 | 0 No hardware acceleration
|
||||
* | acceleration | | 1 non tunneled hw acceleration: the process()
|
||||
* | | | function reads the samples, send them to HW
|
||||
* | | | accelerated effect processor, reads back
|
||||
* | | | the processed samples and returns them
|
||||
* | | | to the output buffer.
|
||||
* | | | 2 tunneled hw acceleration: the process()
|
||||
* | | | function is transparent. The effect interface
|
||||
* | | | is only used to control the effect engine.
|
||||
* | | | This mode is relevant for global effects
|
||||
* | | | actually applied by the audio hardware on
|
||||
* | | | the output stream.
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Audio Mode | 18..19 | 0 none
|
||||
* | indication | | 1 requires audio mode updates
|
||||
* | | | 2..3 reserved
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Audio source | 20..21 | 0 none
|
||||
* | indication | | 1 requires audio source updates
|
||||
* | | | 2..3 reserved
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Effect offload | 22 | 0 The effect cannot be offloaded to an audio DSP
|
||||
* | supported | | 1 The effect can be offloaded to an audio DSP
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
* | Process | 23 | 0 The effect implements a process function.
|
||||
* | function | | 1 The effect does not implement a process
|
||||
* | not | | function: enabling the effect has no impact
|
||||
* | implemented | | on latency or CPU load.
|
||||
* | | | Effect implementations setting this flag do not
|
||||
* | | | have to implement a process function.
|
||||
* +----------------+--------+--------------------------------------------------
|
||||
*/
|
||||
// TODO(mnaganov): Consider if "EFFECT_FLAG_" prefix can be dropped.
|
||||
enum EffectFlags {
|
||||
// Insert mode
|
||||
EFFECT_FLAG_TYPE_SHIFT = 0,
|
||||
EFFECT_FLAG_TYPE_SIZE = 3,
|
||||
EFFECT_FLAG_TYPE_MASK =
|
||||
((1 << EFFECT_FLAG_TYPE_SIZE) -1) << EFFECT_FLAG_TYPE_SHIFT,
|
||||
EFFECT_FLAG_TYPE_INSERT = 0 << EFFECT_FLAG_TYPE_SHIFT,
|
||||
EFFECT_FLAG_TYPE_AUXILIARY = 1 << EFFECT_FLAG_TYPE_SHIFT,
|
||||
EFFECT_FLAG_TYPE_REPLACE = 2 << EFFECT_FLAG_TYPE_SHIFT,
|
||||
EFFECT_FLAG_TYPE_PRE_PROC = 3 << EFFECT_FLAG_TYPE_SHIFT,
|
||||
EFFECT_FLAG_TYPE_POST_PROC = 4 << EFFECT_FLAG_TYPE_SHIFT,
|
||||
|
||||
// Insert preference
|
||||
EFFECT_FLAG_INSERT_SHIFT = EFFECT_FLAG_TYPE_SHIFT + EFFECT_FLAG_TYPE_SIZE,
|
||||
EFFECT_FLAG_INSERT_SIZE = 3,
|
||||
EFFECT_FLAG_INSERT_MASK =
|
||||
((1 << EFFECT_FLAG_INSERT_SIZE) -1) << EFFECT_FLAG_INSERT_SHIFT,
|
||||
EFFECT_FLAG_INSERT_ANY = 0 << EFFECT_FLAG_INSERT_SHIFT,
|
||||
EFFECT_FLAG_INSERT_FIRST = 1 << EFFECT_FLAG_INSERT_SHIFT,
|
||||
EFFECT_FLAG_INSERT_LAST = 2 << EFFECT_FLAG_INSERT_SHIFT,
|
||||
EFFECT_FLAG_INSERT_EXCLUSIVE = 3 << EFFECT_FLAG_INSERT_SHIFT,
|
||||
|
||||
// Volume control
|
||||
EFFECT_FLAG_VOLUME_SHIFT =
|
||||
EFFECT_FLAG_INSERT_SHIFT + EFFECT_FLAG_INSERT_SIZE,
|
||||
EFFECT_FLAG_VOLUME_SIZE = 3,
|
||||
EFFECT_FLAG_VOLUME_MASK =
|
||||
((1 << EFFECT_FLAG_VOLUME_SIZE) -1) << EFFECT_FLAG_VOLUME_SHIFT,
|
||||
EFFECT_FLAG_VOLUME_CTRL = 1 << EFFECT_FLAG_VOLUME_SHIFT,
|
||||
EFFECT_FLAG_VOLUME_IND = 2 << EFFECT_FLAG_VOLUME_SHIFT,
|
||||
EFFECT_FLAG_VOLUME_NONE = 0 << EFFECT_FLAG_VOLUME_SHIFT,
|
||||
|
||||
// Device indication
|
||||
EFFECT_FLAG_DEVICE_SHIFT =
|
||||
EFFECT_FLAG_VOLUME_SHIFT + EFFECT_FLAG_VOLUME_SIZE,
|
||||
EFFECT_FLAG_DEVICE_SIZE = 3,
|
||||
EFFECT_FLAG_DEVICE_MASK =
|
||||
((1 << EFFECT_FLAG_DEVICE_SIZE) -1) << EFFECT_FLAG_DEVICE_SHIFT,
|
||||
EFFECT_FLAG_DEVICE_IND = 1 << EFFECT_FLAG_DEVICE_SHIFT,
|
||||
EFFECT_FLAG_DEVICE_NONE = 0 << EFFECT_FLAG_DEVICE_SHIFT,
|
||||
|
||||
// Sample input modes
|
||||
EFFECT_FLAG_INPUT_SHIFT =
|
||||
EFFECT_FLAG_DEVICE_SHIFT + EFFECT_FLAG_DEVICE_SIZE,
|
||||
EFFECT_FLAG_INPUT_SIZE = 2,
|
||||
EFFECT_FLAG_INPUT_MASK =
|
||||
((1 << EFFECT_FLAG_INPUT_SIZE) -1) << EFFECT_FLAG_INPUT_SHIFT,
|
||||
EFFECT_FLAG_INPUT_DIRECT = 1 << EFFECT_FLAG_INPUT_SHIFT,
|
||||
EFFECT_FLAG_INPUT_PROVIDER = 2 << EFFECT_FLAG_INPUT_SHIFT,
|
||||
EFFECT_FLAG_INPUT_BOTH = 3 << EFFECT_FLAG_INPUT_SHIFT,
|
||||
|
||||
// Sample output modes
|
||||
EFFECT_FLAG_OUTPUT_SHIFT = EFFECT_FLAG_INPUT_SHIFT + EFFECT_FLAG_INPUT_SIZE,
|
||||
EFFECT_FLAG_OUTPUT_SIZE = 2,
|
||||
EFFECT_FLAG_OUTPUT_MASK =
|
||||
((1 << EFFECT_FLAG_OUTPUT_SIZE) -1) << EFFECT_FLAG_OUTPUT_SHIFT,
|
||||
EFFECT_FLAG_OUTPUT_DIRECT = 1 << EFFECT_FLAG_OUTPUT_SHIFT,
|
||||
EFFECT_FLAG_OUTPUT_PROVIDER = 2 << EFFECT_FLAG_OUTPUT_SHIFT,
|
||||
EFFECT_FLAG_OUTPUT_BOTH = 3 << EFFECT_FLAG_OUTPUT_SHIFT,
|
||||
|
||||
// Hardware acceleration mode
|
||||
EFFECT_FLAG_HW_ACC_SHIFT =
|
||||
EFFECT_FLAG_OUTPUT_SHIFT + EFFECT_FLAG_OUTPUT_SIZE,
|
||||
EFFECT_FLAG_HW_ACC_SIZE = 2,
|
||||
EFFECT_FLAG_HW_ACC_MASK =
|
||||
((1 << EFFECT_FLAG_HW_ACC_SIZE) -1) << EFFECT_FLAG_HW_ACC_SHIFT,
|
||||
EFFECT_FLAG_HW_ACC_SIMPLE = 1 << EFFECT_FLAG_HW_ACC_SHIFT,
|
||||
EFFECT_FLAG_HW_ACC_TUNNEL = 2 << EFFECT_FLAG_HW_ACC_SHIFT,
|
||||
|
||||
// Audio mode indication
|
||||
EFFECT_FLAG_AUDIO_MODE_SHIFT =
|
||||
EFFECT_FLAG_HW_ACC_SHIFT + EFFECT_FLAG_HW_ACC_SIZE,
|
||||
EFFECT_FLAG_AUDIO_MODE_SIZE = 2,
|
||||
EFFECT_FLAG_AUDIO_MODE_MASK =
|
||||
((1 << EFFECT_FLAG_AUDIO_MODE_SIZE) -1) << EFFECT_FLAG_AUDIO_MODE_SHIFT,
|
||||
EFFECT_FLAG_AUDIO_MODE_IND = 1 << EFFECT_FLAG_AUDIO_MODE_SHIFT,
|
||||
EFFECT_FLAG_AUDIO_MODE_NONE = 0 << EFFECT_FLAG_AUDIO_MODE_SHIFT,
|
||||
|
||||
// Audio source indication
|
||||
EFFECT_FLAG_AUDIO_SOURCE_SHIFT =
|
||||
EFFECT_FLAG_AUDIO_MODE_SHIFT + EFFECT_FLAG_AUDIO_MODE_SIZE,
|
||||
EFFECT_FLAG_AUDIO_SOURCE_SIZE = 2,
|
||||
EFFECT_FLAG_AUDIO_SOURCE_MASK = ((1 << EFFECT_FLAG_AUDIO_SOURCE_SIZE) -1)
|
||||
<< EFFECT_FLAG_AUDIO_SOURCE_SHIFT,
|
||||
EFFECT_FLAG_AUDIO_SOURCE_IND = 1 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT,
|
||||
EFFECT_FLAG_AUDIO_SOURCE_NONE = 0 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT,
|
||||
|
||||
// Effect offload indication
|
||||
EFFECT_FLAG_OFFLOAD_SHIFT =
|
||||
EFFECT_FLAG_AUDIO_SOURCE_SHIFT + EFFECT_FLAG_AUDIO_SOURCE_SIZE,
|
||||
EFFECT_FLAG_OFFLOAD_SIZE = 1,
|
||||
EFFECT_FLAG_OFFLOAD_MASK =
|
||||
((1 << EFFECT_FLAG_OFFLOAD_SIZE) -1) << EFFECT_FLAG_OFFLOAD_SHIFT,
|
||||
EFFECT_FLAG_OFFLOAD_SUPPORTED = 1 << EFFECT_FLAG_OFFLOAD_SHIFT,
|
||||
|
||||
// Effect has no process indication
|
||||
EFFECT_FLAG_NO_PROCESS_SHIFT =
|
||||
EFFECT_FLAG_OFFLOAD_SHIFT + EFFECT_FLAG_OFFLOAD_SIZE,
|
||||
EFFECT_FLAG_NO_PROCESS_SIZE = 1,
|
||||
EFFECT_FLAG_NO_PROCESS_MASK =
|
||||
((1 << EFFECT_FLAG_NO_PROCESS_SIZE) -1) << EFFECT_FLAG_NO_PROCESS_SHIFT,
|
||||
EFFECT_FLAG_NO_PROCESS = 1 << EFFECT_FLAG_NO_PROCESS_SHIFT
|
||||
};
|
||||
|
||||
/*
|
||||
* The effect descriptor contains necessary information to facilitate the
|
||||
* enumeration of the effect engines present in a library.
|
||||
*/
|
||||
struct EffectDescriptor {
|
||||
Uuid type; // UUID of to the OpenSL ES interface implemented
|
||||
// by this effect
|
||||
Uuid uuid; // UUID for this particular implementation
|
||||
EffectFlags flags; // effect engine capabilities/requirements flags
|
||||
uint16_t cpuLoad; // CPU load indication expressed in 0.1 MIPS units
|
||||
// as estimated on an ARM9E core (ARMv5TE) with 0 WS
|
||||
uint16_t memoryUsage; // data memory usage expressed in KB and includes
|
||||
// only dynamically allocated memory
|
||||
string name; // human readable effect name
|
||||
string implementor; // human readable effect implementor name
|
||||
};
|
||||
|
||||
/*
|
||||
* A buffer is a chunk of audio data for processing. Multi-channel audio is
|
||||
* always interleaved. The channel order is from LSB to MSB with regard to the
|
||||
* channel mask definition in audio.h, audio_channel_mask_t, e.g.:
|
||||
* Stereo: L, R; 5.1: FL, FR, FC, LFE, BL, BR.
|
||||
*
|
||||
* The buffer size is expressed in frame count, a frame being composed of
|
||||
* samples for all channels at a given time. Frame size for unspecified format
|
||||
* (AUDIO_FORMAT_OTHER) is 8 bit by definition.
|
||||
*/
|
||||
// TODO(mnaganov): replace with FMQ version.
|
||||
struct AudioBuffer {
|
||||
uint32_t frameCount;
|
||||
vec<uint8_t> data;
|
||||
};
|
||||
|
||||
enum EffectBufferAccess {
|
||||
EFFECT_BUFFER_ACCESS_WRITE,
|
||||
EFFECT_BUFFER_ACCESS_READ,
|
||||
EFFECT_BUFFER_ACCESS_ACCUMULATE
|
||||
};
|
||||
|
||||
/*
|
||||
* Determines what fields of EffectBufferConfig need to be considered.
|
||||
*/
|
||||
enum EffectConfigParameters {
|
||||
EFFECT_CONFIG_BUFFER = 0x0001, // buffer field
|
||||
EFFECT_CONFIG_SMP_RATE = 0x0002, // samplingRate
|
||||
EFFECT_CONFIG_CHANNELS = 0x0004, // channels
|
||||
EFFECT_CONFIG_FORMAT = 0x0008, // format
|
||||
EFFECT_CONFIG_ACC_MODE = 0x0010, // accessMode
|
||||
EFFECT_CONFIG_ALL = EFFECT_CONFIG_BUFFER | EFFECT_CONFIG_SMP_RATE |
|
||||
EFFECT_CONFIG_CHANNELS | EFFECT_CONFIG_FORMAT |
|
||||
EFFECT_CONFIG_ACC_MODE
|
||||
};
|
||||
|
||||
/*
|
||||
* The buffer config structure specifies the input or output audio format
|
||||
* to be used by the effect engine.
|
||||
*/
|
||||
struct EffectBufferConfig {
|
||||
AudioBuffer buffer;
|
||||
uint32_t samplingRateHz;
|
||||
AudioChannelMask channels;
|
||||
AudioFormat format;
|
||||
EffectBufferAccess accessMode;
|
||||
EffectConfigParameters mask;
|
||||
};
|
||||
|
||||
struct EffectConfig {
|
||||
EffectBufferConfig inputCfg;
|
||||
EffectBufferConfig outputCfg;
|
||||
};
|
||||
|
||||
enum EffectFeature {
|
||||
EFFECT_FEATURE_AUX_CHANNELS, // supports auxiliary channels
|
||||
// (e.g. dual mic noise suppressor)
|
||||
EFFECT_FEATURE_CNT
|
||||
};
|
||||
|
||||
struct EffectFeatureConfig {
|
||||
EffectFeature feature;
|
||||
EffectConfig config;
|
||||
};
|
||||
|
||||
struct EffectOffloadParameter {
|
||||
bool isOffload; // true if the playback thread the effect
|
||||
// is attached to is offloaded
|
||||
AudioIoHandle ioHandle; // io handle of the playback thread
|
||||
// the effect is attached to
|
||||
};
|
||||
Reference in New Issue
Block a user