diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AcousticEchoCanceler.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AcousticEchoCanceler.aidl index 1d51ade554..1ec7dad3e1 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AcousticEchoCanceler.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AcousticEchoCanceler.aidl @@ -42,10 +42,4 @@ union AcousticEchoCanceler { int vendorExtensionTag; android.hardware.audio.effect.AcousticEchoCanceler.Tag commonTag; } - @VintfStability - parcelable Capability { - ParcelableHolder extension; - int maxEchoDelayUs; - boolean supportMobileMode; - } } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AutomaticGainControl.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AutomaticGainControl.aidl index 39068d5105..f3dd523281 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AutomaticGainControl.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AutomaticGainControl.aidl @@ -43,12 +43,6 @@ union AutomaticGainControl { int vendorExtensionTag; android.hardware.audio.effect.AutomaticGainControl.Tag commonTag; } - @VintfStability - parcelable Capability { - ParcelableHolder extension; - int maxFixedDigitalGainMb; - int maxSaturationMarginMb; - } @Backing(type="int") @VintfStability enum LevelEstimator { RMS = 0, diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AutomaticGainControlV1.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AutomaticGainControlV1.aidl index ff010c624e..57d44182d3 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AutomaticGainControlV1.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/AutomaticGainControlV1.aidl @@ -43,9 +43,4 @@ union AutomaticGainControlV1 { int vendorExtensionTag; android.hardware.audio.effect.AutomaticGainControlV1.Tag commonTag; } - @VintfStability - parcelable Capability { - ParcelableHolder extension; - android.hardware.audio.effect.Range[] ranges; - } } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/BassBoost.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/BassBoost.aidl index f8baa2af1a..d09fe548d7 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/BassBoost.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/BassBoost.aidl @@ -41,10 +41,4 @@ union BassBoost { int vendorExtensionTag; android.hardware.audio.effect.BassBoost.Tag commonTag; } - @VintfStability - parcelable Capability { - ParcelableHolder extension; - int maxStrengthPm; - boolean strengthSupported; - } } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Capability.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Capability.aidl index 28f77b377d..c9df073489 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Capability.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Capability.aidl @@ -33,20 +33,7 @@ package android.hardware.audio.effect; @VintfStability -union Capability { +parcelable Capability { android.hardware.audio.effect.VendorExtension vendorExtension; - android.hardware.audio.effect.AcousticEchoCanceler.Capability acousticEchoCanceler; - android.hardware.audio.effect.AutomaticGainControl.Capability automaticGainControl; - android.hardware.audio.effect.BassBoost.Capability bassBoost; - android.hardware.audio.effect.Downmix.Capability downmix; - android.hardware.audio.effect.DynamicsProcessing.Capability dynamicsProcessing; - android.hardware.audio.effect.EnvironmentalReverb.Capability environmentalReverb; - android.hardware.audio.effect.Equalizer.Capability equalizer; - android.hardware.audio.effect.HapticGenerator.Capability hapticGenerator; - android.hardware.audio.effect.LoudnessEnhancer.Capability loudnessEnhancer; - android.hardware.audio.effect.NoiseSuppression.Capability noiseSuppression; - android.hardware.audio.effect.PresetReverb.Capability presetReverb; - android.hardware.audio.effect.Virtualizer.Capability virtualizer; - android.hardware.audio.effect.Visualizer.Capability visualizer; - android.hardware.audio.effect.Volume.Capability volume; + android.hardware.audio.effect.Range range; } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Downmix.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Downmix.aidl index 402441dbab..45a1f28c4b 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Downmix.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Downmix.aidl @@ -42,10 +42,6 @@ union Downmix { android.hardware.audio.effect.Downmix.Tag commonTag; } @VintfStability - parcelable Capability { - ParcelableHolder extension; - } - @VintfStability enum Type { STRIP, FOLD, diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/DynamicsProcessing.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/DynamicsProcessing.aidl index 8e5b719f0b..3e20e336e4 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/DynamicsProcessing.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/DynamicsProcessing.aidl @@ -49,12 +49,6 @@ union DynamicsProcessing { int vendorExtensionTag; android.hardware.audio.effect.DynamicsProcessing.Tag commonTag; } - @VintfStability - parcelable Capability { - ParcelableHolder extension; - float minCutOffFreq; - float maxCutOffFreq; - } enum ResolutionPreference { FAVOR_FREQUENCY_RESOLUTION, FAVOR_TIME_RESOLUTION, diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/EnvironmentalReverb.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/EnvironmentalReverb.aidl index 9edad093d2..a193102f86 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/EnvironmentalReverb.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/EnvironmentalReverb.aidl @@ -49,20 +49,4 @@ union EnvironmentalReverb { int vendorExtensionTag; android.hardware.audio.effect.EnvironmentalReverb.Tag commonTag; } - @VintfStability - parcelable Capability { - android.hardware.audio.effect.VendorExtension extension; - int minRoomLevelMb; - int maxRoomLevelMb; - int minRoomHfLevelMb; - int maxRoomHfLevelMb; - int maxDecayTimeMs; - int minDecayHfRatioPm; - int maxDecayHfRatioPm; - int minLevelMb; - int maxLevelMb; - int maxDelayMs; - int maxDiffusionPm; - int maxDensityPm; - } } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Equalizer.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Equalizer.aidl index ea63de57d2..3e3539f290 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Equalizer.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Equalizer.aidl @@ -38,18 +38,14 @@ union Equalizer { android.hardware.audio.effect.Equalizer.BandLevel[] bandLevels; int preset; int[] centerFreqMh; + android.hardware.audio.effect.Equalizer.BandFrequency[] bandFrequencies; + android.hardware.audio.effect.Equalizer.Preset[] presets; @VintfStability union Id { int vendorExtensionTag; android.hardware.audio.effect.Equalizer.Tag commonTag; } @VintfStability - parcelable Capability { - ParcelableHolder extension; - android.hardware.audio.effect.Equalizer.BandFrequency[] bandFrequencies; - android.hardware.audio.effect.Equalizer.Preset[] presets; - } - @VintfStability parcelable BandLevel { int index; int levelMb; diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/HapticGenerator.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/HapticGenerator.aidl index 35186c381e..a7dc2657b1 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/HapticGenerator.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/HapticGenerator.aidl @@ -42,10 +42,6 @@ union HapticGenerator { int vendorExtensionTag; android.hardware.audio.effect.HapticGenerator.Tag commonTag; } - @VintfStability - parcelable Capability { - android.hardware.audio.effect.VendorExtension extension; - } @Backing(type="int") @VintfStability enum VibratorScale { MUTE = (-100) /* -100 */, diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/LoudnessEnhancer.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/LoudnessEnhancer.aidl index 5c6ca16449..774f45ffac 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/LoudnessEnhancer.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/LoudnessEnhancer.aidl @@ -41,8 +41,4 @@ union LoudnessEnhancer { int vendorExtensionTag; android.hardware.audio.effect.LoudnessEnhancer.Tag commonTag; } - @VintfStability - parcelable Capability { - android.hardware.audio.effect.VendorExtension extension; - } } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/NoiseSuppression.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/NoiseSuppression.aidl index 153e0213bc..f1a34499cb 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/NoiseSuppression.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/NoiseSuppression.aidl @@ -42,10 +42,6 @@ union NoiseSuppression { int vendorExtensionTag; android.hardware.audio.effect.NoiseSuppression.Tag commonTag; } - @VintfStability - parcelable Capability { - ParcelableHolder extension; - } @Backing(type="int") @VintfStability enum Level { LOW, diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/PresetReverb.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/PresetReverb.aidl index 4651742fac..148f79d80e 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/PresetReverb.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/PresetReverb.aidl @@ -35,6 +35,7 @@ package android.hardware.audio.effect; @VintfStability union PresetReverb { android.hardware.audio.effect.VendorExtension vendor; + android.hardware.audio.effect.PresetReverb.Presets[] supportedPresets; android.hardware.audio.effect.PresetReverb.Presets preset; @Backing(type="int") @VintfStability enum Presets { @@ -51,9 +52,4 @@ union PresetReverb { int vendorExtensionTag; android.hardware.audio.effect.PresetReverb.Tag commonTag; } - @VintfStability - parcelable Capability { - android.hardware.audio.effect.VendorExtension extension; - android.hardware.audio.effect.PresetReverb.Presets[] supportedPresets; - } } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Range.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Range.aidl index 531d3a12b2..14e9cd874f 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Range.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Range.aidl @@ -33,34 +33,101 @@ package android.hardware.audio.effect; @VintfStability -parcelable Range { - int tag; - android.hardware.audio.effect.Range.Types types; +union Range { + android.hardware.audio.effect.Range.VendorExtensionRange[] vendorExtension = {}; + android.hardware.audio.effect.Range.AcousticEchoCancelerRange[] acousticEchoCanceler; + android.hardware.audio.effect.Range.AutomaticGainControlRange[] automaticGainControl; + android.hardware.audio.effect.Range.AutomaticGainControlV1Range[] automaticGainControlV1; + android.hardware.audio.effect.Range.BassBoostRange[] bassBoost; + android.hardware.audio.effect.Range.DownmixRange[] downmix; + android.hardware.audio.effect.Range.DynamicsProcessingRange[] dynamicsProcessing; + android.hardware.audio.effect.Range.EnvironmentalReverbRange[] environmentalReverb; + android.hardware.audio.effect.Range.EqualizerRange[] equalizer; + android.hardware.audio.effect.Range.HapticGeneratorRange[] hapticGenerator; + android.hardware.audio.effect.Range.LoudnessEnhancerRange[] loudnessEnhancer; + android.hardware.audio.effect.Range.NoiseSuppressionRange[] noiseSuppression; + android.hardware.audio.effect.Range.PresetReverbRange[] presetReverb; + android.hardware.audio.effect.Range.VirtualizerRange[] virtualizer; + android.hardware.audio.effect.Range.VisualizerRange[] visualizer; + android.hardware.audio.effect.Range.VolumeRange[] volume; @VintfStability - parcelable Int { - int min; - int max; + parcelable AcousticEchoCancelerRange { + android.hardware.audio.effect.AcousticEchoCanceler min; + android.hardware.audio.effect.AcousticEchoCanceler max; } @VintfStability - parcelable Float { - float min; - float max; + parcelable AutomaticGainControlRange { + android.hardware.audio.effect.AutomaticGainControl min; + android.hardware.audio.effect.AutomaticGainControl max; } @VintfStability - parcelable Long { - long min; - long max; + parcelable AutomaticGainControlV1Range { + android.hardware.audio.effect.AutomaticGainControlV1 min; + android.hardware.audio.effect.AutomaticGainControlV1 max; } @VintfStability - parcelable Byte { - byte min; - byte max; + parcelable BassBoostRange { + android.hardware.audio.effect.BassBoost min; + android.hardware.audio.effect.BassBoost max; } @VintfStability - union Types { - android.hardware.audio.effect.Range.Int rangeInt; - android.hardware.audio.effect.Range.Float rangeFloat; - android.hardware.audio.effect.Range.Long rangeLong; - android.hardware.audio.effect.Range.Byte rangeByte; + parcelable DownmixRange { + android.hardware.audio.effect.Downmix min; + android.hardware.audio.effect.Downmix max; + } + @VintfStability + parcelable DynamicsProcessingRange { + android.hardware.audio.effect.DynamicsProcessing min; + android.hardware.audio.effect.DynamicsProcessing max; + } + @VintfStability + parcelable EnvironmentalReverbRange { + android.hardware.audio.effect.EnvironmentalReverb min; + android.hardware.audio.effect.EnvironmentalReverb max; + } + @VintfStability + parcelable EqualizerRange { + android.hardware.audio.effect.Equalizer min; + android.hardware.audio.effect.Equalizer max; + } + @VintfStability + parcelable HapticGeneratorRange { + android.hardware.audio.effect.HapticGenerator min; + android.hardware.audio.effect.HapticGenerator max; + } + @VintfStability + parcelable LoudnessEnhancerRange { + android.hardware.audio.effect.LoudnessEnhancer min; + android.hardware.audio.effect.LoudnessEnhancer max; + } + @VintfStability + parcelable NoiseSuppressionRange { + android.hardware.audio.effect.NoiseSuppression min; + android.hardware.audio.effect.NoiseSuppression max; + } + @VintfStability + parcelable PresetReverbRange { + android.hardware.audio.effect.PresetReverb min; + android.hardware.audio.effect.PresetReverb max; + } + @VintfStability + parcelable VendorExtensionRange { + android.hardware.audio.effect.VendorExtension min; + android.hardware.audio.effect.VendorExtension max; + } + @VintfStability + parcelable VirtualizerRange { + android.hardware.audio.effect.Virtualizer min; + android.hardware.audio.effect.Virtualizer max; + } + @VintfStability + parcelable VisualizerRange { + android.hardware.audio.effect.Visualizer min; + android.hardware.audio.effect.Visualizer max; + } + @VintfStability + parcelable VolumeRange { + android.hardware.audio.effect.Volume min; + android.hardware.audio.effect.Volume max; } } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Virtualizer.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Virtualizer.aidl index 2f367d9be1..e9611e42b9 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Virtualizer.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Virtualizer.aidl @@ -50,12 +50,6 @@ union Virtualizer { android.media.audio.common.AudioDeviceDescription device; } @VintfStability - parcelable Capability { - android.hardware.audio.effect.VendorExtension extension; - int maxStrengthPm; - boolean strengthSupported; - } - @VintfStability parcelable ChannelAngle { int channel; int azimuthDegree; diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Visualizer.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Visualizer.aidl index c8cb551b99..d1b1b3e7af 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Visualizer.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Visualizer.aidl @@ -36,30 +36,18 @@ package android.hardware.audio.effect; union Visualizer { android.hardware.audio.effect.Visualizer.Id id; android.hardware.audio.effect.VendorExtension vendor; - android.hardware.audio.effect.Visualizer.GetOnlyParameters getOnlyParameters; - android.hardware.audio.effect.Visualizer.SetOnlyParameters setOnlyParameters; + android.hardware.audio.effect.Visualizer.Measurement measurement; + byte[] captureSampleBuffer; + int latencyMs; int captureSamples; android.hardware.audio.effect.Visualizer.ScalingMode scalingMode; android.hardware.audio.effect.Visualizer.MeasurementMode measurementMode; @VintfStability union Id { int vendorExtensionTag; - android.hardware.audio.effect.Visualizer.GetOnlyParameters.Tag getOnlyParamTag; - android.hardware.audio.effect.Visualizer.SetOnlyParameters.Tag setOnlyParamTag; android.hardware.audio.effect.Visualizer.Tag commonTag; } @VintfStability - parcelable Capability { - android.hardware.audio.effect.VendorExtension extension; - int maxLatencyMs; - android.hardware.audio.effect.Visualizer.CaptureSamplesRange captureSampleRange; - } - @VintfStability - parcelable CaptureSamplesRange { - int min; - int max; - } - @VintfStability enum ScalingMode { NORMALIZED = 0, AS_PLAYED, @@ -70,17 +58,8 @@ union Visualizer { PEAK_RMS, } @VintfStability - union GetOnlyParameters { - android.hardware.audio.effect.Visualizer.GetOnlyParameters.Measurement measurement; - byte[] captureSampleBuffer; - @VintfStability - parcelable Measurement { - int rms; - int peak; - } - } - @VintfStability - union SetOnlyParameters { - int latencyMs; + parcelable Measurement { + int rms; + int peak; } } diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Volume.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Volume.aidl index 6259cfb6d1..c2b2df7de1 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Volume.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Volume.aidl @@ -42,10 +42,4 @@ union Volume { int vendorExtensionTag; android.hardware.audio.effect.Volume.Tag commonTag; } - @VintfStability - parcelable Capability { - android.hardware.audio.effect.VendorExtension extension; - int minLevelDb; - int maxLevelDb; - } } diff --git a/audio/aidl/android/hardware/audio/effect/AcousticEchoCanceler.aidl b/audio/aidl/android/hardware/audio/effect/AcousticEchoCanceler.aidl index 19d60b664f..49377d64f5 100644 --- a/audio/aidl/android/hardware/audio/effect/AcousticEchoCanceler.aidl +++ b/audio/aidl/android/hardware/audio/effect/AcousticEchoCanceler.aidl @@ -22,9 +22,9 @@ import android.hardware.audio.effect.VendorExtension; * Acoustic Echo Canceler (AEC) is an audio pre-processor which removes the contribution of the * signal received from the remote party from the captured audio signal. * - * All parameters defined in union AcousticEchoCanceler must be gettable and settable. The - * capabilities defined in AcousticEchoCanceler.Capability can only acquired with - * IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.acousticEchoCanceler + * definition if the definition for the corresponding parameter tag exist. See more detals about + * Range in Range.aidl. */ @VintfStability union AcousticEchoCanceler { @@ -42,36 +42,21 @@ union AcousticEchoCanceler { */ VendorExtension vendor; - /** - * Capability supported by AEC implementation. - */ - @VintfStability - parcelable Capability { - /** - * AEC capability extension, vendor can use this extension in case existing capability - * definition not enough. - */ - ParcelableHolder extension; - - /** - * Maximum AEC echo delay in microseconds supported. - */ - int maxEchoDelayUs; - /** - * If AEC mobile mode was supported by the AEC implementation. - */ - boolean supportMobileMode; - } - /** * The AEC echo delay in microseconds. - * Must never be negative, and not larger than maxEchoDelayUs in capability. */ int echoDelayUs; /** - * If AEC mobile mode enabled. - * Can only be false if AEC implementation indicate not support mobile mode by set - * supportMobileMode to false in capability. + * Indicate if the AEC mobile mode is enabled or not. + * If an effect implementation supports enabling and disabling mobileMode at runtime, it does + * not need to set the min and max range for mobileMode, or report the mobileMode min/max range + * as [false, true] in Range.AcousticEchoCancelerRange. If the effect implementation doesn't + * support mobileMode, it must report the mobileMode range as [false, false]. If the effect + * implementation supports mobileMode and cannot be disabled, it must report the mobileMode + * range as [true, true]. + * If the effect implementation sets the range as invalid: [true, false], it indicates that + * mobileMode setParameter is not supported, and clients can only use getParameter to check if + * it's enabled or not. */ boolean mobileMode; } diff --git a/audio/aidl/android/hardware/audio/effect/AutomaticGainControl.aidl b/audio/aidl/android/hardware/audio/effect/AutomaticGainControl.aidl index e82a564582..0c984b51c4 100644 --- a/audio/aidl/android/hardware/audio/effect/AutomaticGainControl.aidl +++ b/audio/aidl/android/hardware/audio/effect/AutomaticGainControl.aidl @@ -24,9 +24,9 @@ import android.hardware.audio.effect.VendorExtension; * so that the output signal level is virtually constant. AGC can be used by applications where the * input signal dynamic range is not important but where a constant strong capture level is desired. * - * All parameters defined in union AutomaticGainControl must be gettable and settable. The - * capabilities defined in AutomaticGainControl.Capability can only acquired with - * IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.automaticGainControl + * definition if the definition for the corresponding parameter tag exist. See more detals about + * Range in Range.aidl. */ @VintfStability union AutomaticGainControl { @@ -44,26 +44,6 @@ union AutomaticGainControl { */ VendorExtension vendor; - /** - * Capability supported by AutomaticGainControl implementation. - */ - @VintfStability - parcelable Capability { - /** - * AutomaticGainControl capability extension, vendor can use this extension in case existing - * capability definition not enough. - */ - ParcelableHolder extension; - /** - * Max fixed digital gain supported by AGC implementation in millibel. - */ - int maxFixedDigitalGainMb; - /** - * Max fixed saturation margin supported by AGC implementation in millibel. - */ - int maxSaturationMarginMb; - } - @VintfStability @Backing(type="int") enum LevelEstimator { @@ -75,7 +55,6 @@ union AutomaticGainControl { /** * The AGC fixed digital gain in millibel. - * Must never be negative, and not larger than maxFixedDigitalGainMb in capability. */ int fixedDigitalGainMb; /* @@ -84,7 +63,6 @@ union AutomaticGainControl { LevelEstimator levelEstimator; /** * The AGC saturation margin in millibel. - * Must never be negative, and not larger than maxSaturationMarginMb in capability. */ int saturationMarginMb; } diff --git a/audio/aidl/android/hardware/audio/effect/AutomaticGainControlV1.aidl b/audio/aidl/android/hardware/audio/effect/AutomaticGainControlV1.aidl index d6e064862b..9b2feff53f 100644 --- a/audio/aidl/android/hardware/audio/effect/AutomaticGainControlV1.aidl +++ b/audio/aidl/android/hardware/audio/effect/AutomaticGainControlV1.aidl @@ -16,7 +16,6 @@ package android.hardware.audio.effect; -import android.hardware.audio.effect.Range; import android.hardware.audio.effect.VendorExtension; /** @@ -25,9 +24,9 @@ import android.hardware.audio.effect.VendorExtension; * so that the output signal level is virtually constant. AGC can be used by applications where the * input signal dynamic range is not important but where a constant strong capture level is desired. * - * All parameters defined in union AutomaticGainControlV1 must be gettable and settable. The - * capabilities defined in AutomaticGainControlV1.Capability can only acquired with - * IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.automaticGainControlV1 + * definition if the definition for the corresponding parameter tag exist. See more detals about + * Range in Range.aidl. */ @VintfStability union AutomaticGainControlV1 { @@ -45,32 +44,14 @@ union AutomaticGainControlV1 { */ VendorExtension vendor; - /** - * Capability supported by AutomaticGainControlV1 implementation. - */ - @VintfStability - parcelable Capability { - /** - * AutomaticGainControlV1 capability extension, vendor can use this extension in case - * existing capability definition not enough. - */ - ParcelableHolder extension; - /** - * Supported range for parameters. - */ - Range[] ranges; - } - /** * Target peak level (or envelope) of the AGC implementation in dBFs (dB relative to full * scale). - * Must be in range of AutomaticGainControlV1.Capability.ranges with targetPeakLevelDbFs tag. */ int targetPeakLevelDbFs; /* * Sets the maximum gain the digital compression stage may apply, in dB. A higher number * corresponds to greater compression, while a value of 0 will leave the signal uncompressed. - * Must be in range of AutomaticGainControlV1.Capability.ranges with maxCompressionGainDb tag. */ int maxCompressionGainDb; /** diff --git a/audio/aidl/android/hardware/audio/effect/BassBoost.aidl b/audio/aidl/android/hardware/audio/effect/BassBoost.aidl index 6a942425b4..d734825c11 100644 --- a/audio/aidl/android/hardware/audio/effect/BassBoost.aidl +++ b/audio/aidl/android/hardware/audio/effect/BassBoost.aidl @@ -22,8 +22,8 @@ import android.hardware.audio.effect.VendorExtension; * Bass boost is an audio effect to boost or amplify low frequencies of the sound. It is comparable * to a simple equalizer but limited to one band amplification in the low frequency range. * - * All parameters defined in union BassBoost must be gettable and settable. The capabilities defined - * in BassBoost.Capability can only acquired with IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.bassBoost definition if the + * definition for the corresponding parameter tag exist. See more detals about Range in Range.aidl. */ @VintfStability union BassBoost { @@ -41,36 +41,12 @@ union BassBoost { */ VendorExtension vendor; - /** - * Capability supported by BassBoost implementation. - */ - @VintfStability - parcelable Capability { - /** - * BassBoost capability extension, vendor can use this extension in case existing capability - * definition not enough. - */ - ParcelableHolder extension; - /** - * Maximum possible per mille strength. - */ - int maxStrengthPm; - /** - * Indicates whether setting strength is supported. False value indicates only one strength - * is supported and setParameter() method will return EX_ILLEGAL_ARGUMENT. - */ - boolean strengthSupported; - } - /** * The per mille strength of the bass boost effect. * * If the implementation does not support per mille accuracy for setting the strength, it is * allowed to round the given strength to the nearest supported value. In this case {@link * #IEffect.getParameter()} method should return the rounded value that was actually set. - * - * The value of the strength must be non-negative and not exceed the value specified by - * the 'maxStrengthPm' capability. */ int strengthPm; } diff --git a/audio/aidl/android/hardware/audio/effect/Capability.aidl b/audio/aidl/android/hardware/audio/effect/Capability.aidl index 30780e6edf..06c2024d9d 100644 --- a/audio/aidl/android/hardware/audio/effect/Capability.aidl +++ b/audio/aidl/android/hardware/audio/effect/Capability.aidl @@ -16,21 +16,8 @@ package android.hardware.audio.effect; -import android.hardware.audio.effect.AcousticEchoCanceler; -import android.hardware.audio.effect.AutomaticGainControl; -import android.hardware.audio.effect.BassBoost; -import android.hardware.audio.effect.Downmix; -import android.hardware.audio.effect.DynamicsProcessing; -import android.hardware.audio.effect.EnvironmentalReverb; -import android.hardware.audio.effect.Equalizer; -import android.hardware.audio.effect.HapticGenerator; -import android.hardware.audio.effect.LoudnessEnhancer; -import android.hardware.audio.effect.NoiseSuppression; -import android.hardware.audio.effect.PresetReverb; +import android.hardware.audio.effect.Range; import android.hardware.audio.effect.VendorExtension; -import android.hardware.audio.effect.Virtualizer; -import android.hardware.audio.effect.Visualizer; -import android.hardware.audio.effect.Volume; /** * Effect capability definitions. @@ -38,32 +25,19 @@ import android.hardware.audio.effect.Volume; * not meant to change at runtime. */ @VintfStability -union Capability { +parcelable Capability { /** * Vendor defined effect capability. - * This extension can be used when vendor have a new effect implementated and need + * This extension can be used when vendor has a new effect implementation and needs * capability definition for this new type of effect. - * If vendor want to extend existing effect capabilities, it is recommended to expose though - * the ParcelableHolder in each effect capability definition. For example: - * Equalizer.Capability.extension. + * If vendor want to extend existing effect capabilities, it is recommended to expose through + * the ParcelableHolder in each effect definition. For example: Equalizer.vendorExtension. And + * define an appropriate Range for the extension. */ VendorExtension vendorExtension; /** - * Effect capabilities. + * Supported range for parameters. See Range.aidl. */ - AcousticEchoCanceler.Capability acousticEchoCanceler; - AutomaticGainControl.Capability automaticGainControl; - BassBoost.Capability bassBoost; - Downmix.Capability downmix; - DynamicsProcessing.Capability dynamicsProcessing; - EnvironmentalReverb.Capability environmentalReverb; - Equalizer.Capability equalizer; - HapticGenerator.Capability hapticGenerator; - LoudnessEnhancer.Capability loudnessEnhancer; - NoiseSuppression.Capability noiseSuppression; - PresetReverb.Capability presetReverb; - Virtualizer.Capability virtualizer; - Visualizer.Capability visualizer; - Volume.Capability volume; + Range range; } diff --git a/audio/aidl/android/hardware/audio/effect/Downmix.aidl b/audio/aidl/android/hardware/audio/effect/Downmix.aidl index ee57baf440..f90e3397c9 100644 --- a/audio/aidl/android/hardware/audio/effect/Downmix.aidl +++ b/audio/aidl/android/hardware/audio/effect/Downmix.aidl @@ -21,8 +21,8 @@ import android.hardware.audio.effect.VendorExtension; /** * Downmix specific definitions. * - * All parameters defined in union Downmix must be gettable and settable. The capabilities defined - * in Downmix.Capability can only acquired with IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.downmix definition if the + * definition for the corresponding parameter tag exist. See more detals about Range in Range.aidl. */ @VintfStability union Downmix { @@ -40,18 +40,6 @@ union Downmix { */ VendorExtension vendor; - /** - * Capability supported by Downmix implementation. - */ - @VintfStability - parcelable Capability { - /** - * Downmix capability extension, vendor can use this extension in case existing capability - * definition not enough. - */ - ParcelableHolder extension; - } - @VintfStability enum Type { /** diff --git a/audio/aidl/android/hardware/audio/effect/DynamicsProcessing.aidl b/audio/aidl/android/hardware/audio/effect/DynamicsProcessing.aidl index 6db3338d73..486d4f4ba8 100644 --- a/audio/aidl/android/hardware/audio/effect/DynamicsProcessing.aidl +++ b/audio/aidl/android/hardware/audio/effect/DynamicsProcessing.aidl @@ -21,9 +21,9 @@ import android.hardware.audio.effect.VendorExtension; /** * DynamicsProcessing specific definitions. * - * All parameters defined in union DynamicsProcessing must be gettable and settable. The - * capabilities defined in DynamicsProcessing.Capability can only acquired with - * IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.dynamicsProcessing definition + * if the definition for the corresponding parameter tag exist. See more detals about Range in + * Range.aidl. */ @VintfStability union DynamicsProcessing { @@ -41,26 +41,6 @@ union DynamicsProcessing { */ VendorExtension vendorExtension; - /** - * Capability supported by DynamicsProcessing implementation. - */ - @VintfStability - parcelable Capability { - /** - * DynamicsProcessing capability extension, vendor can use this extension in case existing - * capability definition not enough. - */ - ParcelableHolder extension; - /** - * Min Cut off frequency (in Hz) for all Bands. - */ - float minCutOffFreq; - /** - * Max Cut off frequency (in Hz) for all Bands. - */ - float maxCutOffFreq; - } - /** * Resolution preference definition. */ @@ -159,8 +139,7 @@ union DynamicsProcessing { */ boolean enable; /** - * Topmost frequency number (in Hz) this band will process. Must be in the range of - * [minCutOffFreq, maxCutOffFreq] defined in Capability. + * Topmost frequency number (in Hz) this band will process. */ float cutoffFrequencyHz; /** @@ -190,8 +169,7 @@ union DynamicsProcessing { */ boolean enable; /** - * Topmost frequency number (in Hz) this band will process. Must be in the range of - * [minCutOffFreq, maxCutOffFreq] defined in Capability. + * Topmost frequency number (in Hz) this band will process. */ float cutoffFrequencyHz; /** diff --git a/audio/aidl/android/hardware/audio/effect/EnvironmentalReverb.aidl b/audio/aidl/android/hardware/audio/effect/EnvironmentalReverb.aidl index fc98fe6c84..a158dcaf13 100644 --- a/audio/aidl/android/hardware/audio/effect/EnvironmentalReverb.aidl +++ b/audio/aidl/android/hardware/audio/effect/EnvironmentalReverb.aidl @@ -21,9 +21,9 @@ import android.hardware.audio.effect.VendorExtension; /** * Environmental Reverb specific definitions. * - * All parameters defined in union Environmental must be gettable and settable. The capabilities - * * defined in EnvironmentalReverb.Capability can only acquired with IEffect.getDescriptor() and - * not * settable. + * All parameter settings must be inside the range of Capability.Range.environmentalReverb + * definition if the definition for the corresponding parameter tag exist. See more detals about + * Range in Range.aidl. */ @VintfStability @@ -43,103 +43,35 @@ union EnvironmentalReverb { VendorExtension vendor; /** - * Capability supported by effect implementation. - */ - @VintfStability - parcelable Capability { - VendorExtension extension; - - /** - * Minimal possible room level in millibels. - */ - int minRoomLevelMb; - /** - * Maximum possible room level in millibels. - */ - int maxRoomLevelMb; - /** - * Minimal possible room hf level in millibels. - */ - int minRoomHfLevelMb; - /** - * Maximum possible room hf level in millibels. - */ - int maxRoomHfLevelMb; - /** - * Max decay time supported in millisecond. - */ - int maxDecayTimeMs; - /** - * Minimal possible per mille decay hf ratio. - */ - int minDecayHfRatioPm; - /** - * Maximum possible per mille decay hf ratio. - */ - int maxDecayHfRatioPm; - /** - * Minimal possible room level in millibels. - */ - int minLevelMb; - /** - * Maximum possible room level in millibels. - */ - int maxLevelMb; - /** - * Maximum possible delay time in milliseconds. - */ - int maxDelayMs; - /** - * Maximum possible per mille diffusion. - */ - int maxDiffusionPm; - /** - * Maximum possible per mille density. - */ - int maxDensityPm; - } - - /** - * Room level apply to the reverb effect in millibels. The value of the roomLevelMb must be in - * range of the value specified by the 'minRoomLevelMb' capability and the 'maxRoomLevelMb' - * capability. + * Room level apply to the reverb effect in millibels. */ int roomLevelMb; /** - * Room HF level apply to the reverb effect in millibels. The value of the roomHfLevelMb must be - * in range of the value specified by the 'minRoomHfLevelMb' capability and the - * 'maxRoomHfLevelMb' capability. + * Room HF level apply to the reverb effect in millibels. */ int roomHfLevelMb; /** - * Delay time apply to the reverb effect in milliseconds.The value of the decayTimeMs must - * be non-negative and not exceed the value specified by the 'maxDecayTimeMs' capability. + * Delay time apply to the reverb effect in milliseconds. */ int decayTimeMs; /** - * HF decay ratio in permilles. The value of the decayHfRatioPm must be in range - * of the value specified by the 'minDecayHfRatioPm' capability and the 'maxDecayHfRatioPm' - * capability. + * HF decay ratio in permilles. */ int decayHfRatioPm; /** - * Reverb level in millibels. The value of the levelMb must be in range - * of the value specified by the 'minLevelMb' capability and the 'maxLevelMb' capability. + * Reverb level in millibels. */ int levelMb; /** - * Reverb delay in milliseconds. The value of the delayMs must be non-negative and not - * exceed the value specified by the 'maxDelayMs' capability. + * Reverb delay in milliseconds. */ int delayMs; /** - * Diffusion in permilles. The value of the diffusionPm must be non-negative and not - * exceed the value specified by the 'maxDiffusionPm' capability. + * Diffusion in permilles. */ int diffusionPm; /** - * Density in permilles. The value of the densityPm must be non-negative and not - * exceed the value specified by the 'maxDensityPm' capability. + * Density in permilles. */ int densityPm; diff --git a/audio/aidl/android/hardware/audio/effect/Equalizer.aidl b/audio/aidl/android/hardware/audio/effect/Equalizer.aidl index 7903fde2c7..2bce151b9c 100644 --- a/audio/aidl/android/hardware/audio/effect/Equalizer.aidl +++ b/audio/aidl/android/hardware/audio/effect/Equalizer.aidl @@ -21,8 +21,8 @@ import android.hardware.audio.effect.VendorExtension; /** * Equalizer specific definitions. * - * All parameters defined in union Equalizer must be gettable and settable. The capabilities defined - * in Equalizer.Capability can only acquired with IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.equalizer definition if the + * definition for the corresponding parameter tag exist. See more detals about Range in Range.aidl. */ @VintfStability union Equalizer { @@ -40,28 +40,6 @@ union Equalizer { */ VendorExtension vendorExtension; - /** - * Capability MUST be supported by Equalizer implementation. - */ - @VintfStability - parcelable Capability { - /** - * Equalizer capability extension, vendor can use this extension in case existing capability - * definition not enough. - */ - ParcelableHolder extension; - - /** - * Bands frequency ranges supported. - */ - BandFrequency[] bandFrequencies; - - /** - * Presets name and index. - */ - Preset[] presets; - } - /** * Level setting for each band in millibels. */ @@ -107,4 +85,14 @@ union Equalizer { * Get only parameter, get the center frequency for all bands in milliHertz. */ int[] centerFreqMh; + + /** + * Get only parameter, indicating bands frequency ranges supported by implementation. + */ + BandFrequency[] bandFrequencies; + + /** + * Get only parameter, indicating presets name and index supported by implementation. + */ + Preset[] presets; } diff --git a/audio/aidl/android/hardware/audio/effect/HapticGenerator.aidl b/audio/aidl/android/hardware/audio/effect/HapticGenerator.aidl index 3063ee37be..a8e4564d0f 100644 --- a/audio/aidl/android/hardware/audio/effect/HapticGenerator.aidl +++ b/audio/aidl/android/hardware/audio/effect/HapticGenerator.aidl @@ -22,9 +22,9 @@ import android.hardware.audio.effect.VendorExtension; * HapticGenerator specific definitions. HapticGenerator effect provide HapticGenerator control and * mute/unmute functionality. * - * All parameters defined in union HapticGenerator must be gettable and settable. The capabilities - * defined in HapticGenerator.Capability can only acquired with IEffect.getDescriptor() and not - * settable. + * All parameter settings must be inside the range of Capability.Range.hapticGenerator definition if + * the definition for the corresponding parameter tag exist. See more detals about Range in + * Range.aidl. */ @VintfStability union HapticGenerator { @@ -42,18 +42,6 @@ union HapticGenerator { */ VendorExtension vendorExtension; - /** - * Capability supported by HapticGenerator implementation. - */ - @VintfStability - parcelable Capability { - /** - * HapticGenerator capability extension, vendor can use this extension in case existing - * capability definition not enough. - */ - VendorExtension extension; - } - @VintfStability @Backing(type="int") enum VibratorScale { diff --git a/audio/aidl/android/hardware/audio/effect/LoudnessEnhancer.aidl b/audio/aidl/android/hardware/audio/effect/LoudnessEnhancer.aidl index 0441f10f17..a7cbe8d3d0 100644 --- a/audio/aidl/android/hardware/audio/effect/LoudnessEnhancer.aidl +++ b/audio/aidl/android/hardware/audio/effect/LoudnessEnhancer.aidl @@ -21,9 +21,9 @@ import android.hardware.audio.effect.VendorExtension; /** * LoudnessEnhancer specific definitions. * - * All parameters defined in union LoudnessEnhancer must be gettable and settable. The capabilities - * defined in LoudnessEnhancer.Capability can only acquired with IEffect.getDescriptor() and not - * settable. + * All parameter settings must be inside the range of Capability.Range.loudnessEnhancer definition + * if the definition for the corresponding parameter tag exist. See more detals about Range in + * Range.aidl. */ @VintfStability union LoudnessEnhancer { @@ -41,18 +41,6 @@ union LoudnessEnhancer { */ VendorExtension vendor; - /** - * Capability supported by LoudnessEnhancer implementation. - */ - @VintfStability - parcelable Capability { - /** - * LoudnessEnhancer capability extension, vendor can use this extension in case existing - * capability definition not enough. - */ - VendorExtension extension; - } - /** * The maximum gain in millibels (mB) applied to the signal to process, default value is 0 which * corresponds to no amplification. diff --git a/audio/aidl/android/hardware/audio/effect/NoiseSuppression.aidl b/audio/aidl/android/hardware/audio/effect/NoiseSuppression.aidl index c4baff84ce..6c2fb5fb0f 100644 --- a/audio/aidl/android/hardware/audio/effect/NoiseSuppression.aidl +++ b/audio/aidl/android/hardware/audio/effect/NoiseSuppression.aidl @@ -24,9 +24,9 @@ import android.hardware.audio.effect.VendorExtension; * engine, AC system) or non-stationary (other peoples conversations, car horn) for more advanced * implementations. * - * All parameters defined in union NoiseSuppression must be gettable and settable. The capabilities - * defined in NoiseSuppression.Capability can only acquired with IEffect.getDescriptor() and not - * settable. + * All parameter settings must be inside the range of Capability.Range.noiseSuppression definition + * if the definition for the corresponding parameter tag exist. See more detals about Range in + * Range.aidl. */ @VintfStability union NoiseSuppression { @@ -44,18 +44,6 @@ union NoiseSuppression { */ VendorExtension vendor; - /** - * Capability supported by NoiseSuppression implementation. - */ - @VintfStability - parcelable Capability { - /** - * NoiseSuppression capability extension, vendor can use this extension in case existing - * capability definition not enough. - */ - ParcelableHolder extension; - } - /** * Different level of Noise Suppression to set. * As an example, webrtc have NsConfig::SuppressionLevel::k6dB applied for LOW level noise diff --git a/audio/aidl/android/hardware/audio/effect/Parameter.aidl b/audio/aidl/android/hardware/audio/effect/Parameter.aidl index 473dfb5a5c..be7144ff0e 100644 --- a/audio/aidl/android/hardware/audio/effect/Parameter.aidl +++ b/audio/aidl/android/hardware/audio/effect/Parameter.aidl @@ -44,6 +44,14 @@ import android.media.audio.common.AudioSource; * 2. Parameters defined for a specific effect type. * 3. Extension parameters ParcelableHolder can be used for vendor effect definition. * + * All parameter settings must be inside the range of Capability.Range.$EffectType$ definition. If + * an effect implementation doesn't have limitation for a parameter, then don't define any effect + * range. + * + * All parameters are get-able, if any parameter doesn't support set, effect implementation should + * report the supported range for this parameter as range.min > range.max. If no support range is + * defined for a parameter, it means this parameter doesn't have any limitation. + * */ @VintfStability union Parameter { diff --git a/audio/aidl/android/hardware/audio/effect/PresetReverb.aidl b/audio/aidl/android/hardware/audio/effect/PresetReverb.aidl index 6048eea4af..87c78b0cc2 100644 --- a/audio/aidl/android/hardware/audio/effect/PresetReverb.aidl +++ b/audio/aidl/android/hardware/audio/effect/PresetReverb.aidl @@ -21,9 +21,9 @@ import android.hardware.audio.effect.VendorExtension; /** * PresetReverb specific definitions. * - * All parameters defined in union PresetReverb must be gettable and settable. The capabilities - * defined in PresetReverb.Capability can only acquired with IEffect.getDescriptor() and not - * settable. + * All parameter settings must be inside the range of Capability.Range.presetReverb definition if + * the definition for the corresponding parameter tag exist. See more detals about Range in + * Range.aidl. */ @VintfStability union PresetReverb { @@ -78,21 +78,24 @@ union PresetReverb { VendorExtension vendor; /** - * Capability supported by effect implementation. + * The list of presets supported by implementation, effect implementation must declare the + * support of Presets with Capability.Range.presetReverb definition. For example, if an effect + * implementation supports all Presets in PresetReverb.Presets, then the capability will be: + * const std::vector kSupportedPresets{ + * ndk::enum_range().begin(), + * ndk::enum_range().end()}; + * const std::vector kRanges = { + * MAKE_RANGE(PresetReverb, supportedPresets, kSupportedPresets, kSupportedPresets)}; */ - @VintfStability - parcelable Capability { - VendorExtension extension; - - /** - * List of presets supported. - */ - Presets[] supportedPresets; - } + Presets[] supportedPresets; /** * Get current reverb preset when used in getParameter. * Enable a preset reverb when used in setParameter. + * With the current Range definition, there is no good way to define enum capability, so the + * Presets vector supportedPresets is used to defined the capability. Client must check the + * capability in PresetReverb.supportedPresets, and make sure to get the list of supported + * presets before setting. */ Presets preset; } diff --git a/audio/aidl/android/hardware/audio/effect/Range.aidl b/audio/aidl/android/hardware/audio/effect/Range.aidl index c052502eb4..30e2359aeb 100644 --- a/audio/aidl/android/hardware/audio/effect/Range.aidl +++ b/audio/aidl/android/hardware/audio/effect/Range.aidl @@ -16,50 +16,205 @@ package android.hardware.audio.effect; +import android.hardware.audio.effect.AcousticEchoCanceler; +import android.hardware.audio.effect.AutomaticGainControl; +import android.hardware.audio.effect.AutomaticGainControlV1; +import android.hardware.audio.effect.BassBoost; +import android.hardware.audio.effect.Downmix; +import android.hardware.audio.effect.DynamicsProcessing; +import android.hardware.audio.effect.EnvironmentalReverb; +import android.hardware.audio.effect.Equalizer; +import android.hardware.audio.effect.HapticGenerator; +import android.hardware.audio.effect.LoudnessEnhancer; +import android.hardware.audio.effect.NoiseSuppression; +import android.hardware.audio.effect.PresetReverb; +import android.hardware.audio.effect.VendorExtension; +import android.hardware.audio.effect.Virtualizer; +import android.hardware.audio.effect.Visualizer; +import android.hardware.audio.effect.Volume; + /** - * Define the range (min and max) of a certain field, identified by tag. - * Can be used by effect capabilities to define supported value ranges. + * Define the supported range of effect parameters. + * Effect implementation must report the supported range of parameter/capability if there is any + * limitation. + * Range of each effect type is defined with a vector, because each $EffectType$Range can only + * describe the range of one parameter. For example, Range::AcousticEchoCancelerRange can only + * describe one of vendor, echoDelayUs, and mobileMode. + * + * If an effect implementation needs to define the valid range for a certain parameter, it can + * write the minimum/maximum supported value to the corresponding effect range, and add the range + * to vector of this effect type. + * Say if an AcousticEchoCanceler implementation wants to define the supported range of echoDelayUs + * to [0, 500], then the Capability range should include an item in acousticEchoCanceler list: + * std::vector kRanges = { + * MAKE_RANGE(AcousticEchoCanceler, echoDelayUs, 0, 500)}; + * + * For a more complex example, if a DynamicsProcessing implementation wants to define the + * supported range of preEqBand channel to [0, 1], band index to [0, 5], and cutoffFrequencyHz to + * [220, 20000]: + * Range::DynamicsProcessingRange kRange = { + * .min = DynamicsProcessing::make( + * {EqBandConfig({.channel = 0, + * .band = 0, + * .enable = false, + * .cutoffFrequencyHz = 220, + * .gainDb = std::numeric_limits::min()})}), + * .max = DynamicsProcessing::make( + * {EqBandConfig({.channel = 1, + * .band = 5, + * .enable = true, + * .cutoffFrequencyHz = 20000, + * .gainDb = std::numeric_limits::max()})})}; + * + * For get only parameters, the effect implementation must define an invalid range (min > max), to + * indicate no parameter from the effect client can be accepted for setting. The effect + * implementation must return EX_ILLEGAL_ARGUMENT if it receives any setParameter call for a get + * only parameter. + * As an example, the get-only parameter Virtualizer.speakerAngles can be defined with: + * Range::VirtualizerRange kRanges = { + * MAKE_RANGE(Virtualizer, speakerAngles, + * {Virtualizer::ChannelAngle({.channel = 1}, + * {Virtualizer::ChannelAngle({.channel = 0})}; + * + * For a capability definition (which is also get only), the effect implementation must define a + * range with min == max, to indicate this is a fixed capability which shouldn't set by client. + * As an example, the Equalizer presets capability can be defined with: + * std::vector kPresets = { + * {0, "Normal"}, {1, "Classical"}, {2, "Dance"}, {3, "Flat"}, {4, "Folk"}, + * {5, "Heavy Metal"}, {6, "Hip Hop"}, {7, "Jazz"}, {8, "Pop"}, {9, "Rock"}}; + * Range::EqualizerRange kRanges = + * MAKE_RANGE(Equalizer, presets, EqualizerSw::kPresets, EqualizerSw::kPresets); + * + * For enum capability, it's necessary to either list a range, or explicitly list out all enums in + * the Range definition, see PresetReverb.supportedPresets as example. + * + * The effect implementation must return EX_ILLEGAL_ARGUMENT if: + * 1. receive any setParameter call for get only parameter (min > max). + * 2. receive any setParameter call for capability parameter definition (min == max). + * 3. receive any setParameter call for parameters not in the range of [min, max]. + * */ @VintfStability -parcelable Range { +union Range { + @VintfStability + parcelable AcousticEchoCancelerRange { + AcousticEchoCanceler min; + AcousticEchoCanceler max; + } + + @VintfStability + parcelable AutomaticGainControlRange { + AutomaticGainControl min; + AutomaticGainControl max; + } + + @VintfStability + parcelable AutomaticGainControlV1Range { + AutomaticGainControlV1 min; + AutomaticGainControlV1 max; + } + + @VintfStability + parcelable BassBoostRange { + BassBoost min; + BassBoost max; + } + + @VintfStability + parcelable DownmixRange { + Downmix min; + Downmix max; + } + + @VintfStability + parcelable DynamicsProcessingRange { + DynamicsProcessing min; + DynamicsProcessing max; + } + + @VintfStability + parcelable EnvironmentalReverbRange { + EnvironmentalReverb min; + EnvironmentalReverb max; + } + + @VintfStability + parcelable EqualizerRange { + Equalizer min; + Equalizer max; + } + + @VintfStability + parcelable HapticGeneratorRange { + HapticGenerator min; + HapticGenerator max; + } + + @VintfStability + parcelable LoudnessEnhancerRange { + LoudnessEnhancer min; + LoudnessEnhancer max; + } + + @VintfStability + parcelable NoiseSuppressionRange { + NoiseSuppression min; + NoiseSuppression max; + } + + @VintfStability + parcelable PresetReverbRange { + PresetReverb min; + PresetReverb max; + } + + @VintfStability + parcelable VendorExtensionRange { + VendorExtension min; + VendorExtension max; + } + + @VintfStability + parcelable VirtualizerRange { + Virtualizer min; + Virtualizer max; + } + + @VintfStability + parcelable VisualizerRange { + Visualizer min; + Visualizer max; + } + + @VintfStability + parcelable VolumeRange { + Volume min; + Volume max; + } + /** - * The union tag name which the range is defined for. - * For example: if used in AutomaticGainControlV1.Capability, value of Range.tag could be - * targetLevelDbFs or compressionGainDb. + * The vector of range defined for parameters of each effect implementation. + * Each element of the vector represents the min and max range of a parameter, so the size of + * vector is the number of parameter ranges defined for this effect implementation. + * + * The effect implementation must not have duplicated parameter range definition in the vector. + * Client side must go though the vector and make sure the parameter setting to effect + * implementation is in valid range. */ - int tag; - - @VintfStability - parcelable Int { - int min; - int max; - } - - @VintfStability - parcelable Float { - float min; - float max; - } - - @VintfStability - parcelable Long { - long min; - long max; - } - - @VintfStability - parcelable Byte { - byte min; - byte max; - } - - @VintfStability - union Types { - Int rangeInt; - Float rangeFloat; - Long rangeLong; - Byte rangeByte; - } - - Types types; + VendorExtensionRange[] vendorExtension = {}; + AcousticEchoCancelerRange[] acousticEchoCanceler; + AutomaticGainControlRange[] automaticGainControl; + AutomaticGainControlV1Range[] automaticGainControlV1; + BassBoostRange[] bassBoost; + DownmixRange[] downmix; + DynamicsProcessingRange[] dynamicsProcessing; + EnvironmentalReverbRange[] environmentalReverb; + EqualizerRange[] equalizer; + HapticGeneratorRange[] hapticGenerator; + LoudnessEnhancerRange[] loudnessEnhancer; + NoiseSuppressionRange[] noiseSuppression; + PresetReverbRange[] presetReverb; + VirtualizerRange[] virtualizer; + VisualizerRange[] visualizer; + VolumeRange[] volume; } diff --git a/audio/aidl/android/hardware/audio/effect/Virtualizer.aidl b/audio/aidl/android/hardware/audio/effect/Virtualizer.aidl index fc453adde3..37ea2a4d5c 100644 --- a/audio/aidl/android/hardware/audio/effect/Virtualizer.aidl +++ b/audio/aidl/android/hardware/audio/effect/Virtualizer.aidl @@ -24,9 +24,8 @@ import android.media.audio.common.AudioDeviceDescription; * Virtualizer specific definitions. An audio virtualizer is a general name for an effect to * spatialize audio channels. * - * All parameters defined in union Virtualizer must be gettable and settable. The capabilities - * defined in Virtualizer.Capability can only acquired with IEffect.getDescriptor() and not - * settable. + * All parameter settings must be inside the range of Capability.Range.virtualizer definition if the + * definition for the corresponding parameter tag exist. See more detals about Range in Range.aidl. */ @VintfStability union Virtualizer { @@ -64,27 +63,6 @@ union Virtualizer { AudioDeviceDescription device; } - /** - * Capability supported by Virtualizer implementation. - */ - @VintfStability - parcelable Capability { - /** - * Virtualizer capability extension, vendor can use this extension in case existing - * capability definition not enough. - */ - VendorExtension extension; - /** - * Maximum possible per mille strength. - */ - int maxStrengthPm; - /** - * Indicates whether setting strength is supported. False value indicates only one strength - * is supported and setParameter() method will always return EX_ILLEGAL_ARGUMENT. - */ - boolean strengthSupported; - } - /** * The per mille strength of the virtualizer effect. * @@ -92,8 +70,6 @@ union Virtualizer { * allowed to round the given strength to the nearest supported value. In this case {@link * #IEffect.getParameter()} method should return the rounded value that was actually set. * - * The value of the strength must be non-negative and not exceed the value specified by - * the 'maxStrengthPm' capability. */ int strengthPm; @@ -128,6 +104,7 @@ union Virtualizer { ChannelAngle[] speakerAngles; /** + * Get only parameter. * The audio device on which virtualzation mode is forced. */ AudioDeviceDescription device; diff --git a/audio/aidl/android/hardware/audio/effect/Visualizer.aidl b/audio/aidl/android/hardware/audio/effect/Visualizer.aidl index dfe29c88fe..8f2faaab6a 100644 --- a/audio/aidl/android/hardware/audio/effect/Visualizer.aidl +++ b/audio/aidl/android/hardware/audio/effect/Visualizer.aidl @@ -22,9 +22,8 @@ import android.hardware.audio.effect.VendorExtension; * Visualizer specific definitions. Visualizer enables application to retrieve part of the currently * playing audio for visualization purpose * - * All parameters defined in union Visualizer other than these in GetOnlyParameters and - * SetOnlyParameters must be gettable and settable. The capabilities defined in - * Visualizer.Capability can only acquired with IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.visualizer definition if the + * definition for the corresponding parameter tag exist. See more detals about Range in Range.aidl. * */ @VintfStability @@ -35,8 +34,6 @@ union Visualizer { @VintfStability union Id { int vendorExtensionTag; - GetOnlyParameters.Tag getOnlyParamTag; - SetOnlyParameters.Tag setOnlyParamTag; Visualizer.Tag commonTag; } Id id; @@ -46,35 +43,6 @@ union Visualizer { */ VendorExtension vendor; - /** - * Capability supported by Visualizer implementation. - */ - @VintfStability - parcelable Capability { - /** - * Visualizer capability extension, vendor can use this extension in case existing - * capability definition not enough. - */ - VendorExtension extension; - /** - * Max latency supported in millseconds. - */ - int maxLatencyMs; - /** - * Capture size range. - */ - CaptureSamplesRange captureSampleRange; - } - - /** - * Supported capture size range in samples. - */ - @VintfStability - parcelable CaptureSamplesRange { - int min; - int max; - } - /** * Type of scaling applied on the captured visualization data. */ @@ -115,51 +83,42 @@ union Visualizer { } /** - * Any parameter defined in this union must be gettable via getParameter(), but must not - * settable. + * Get only parameter to get the current measurements. */ @VintfStability - union GetOnlyParameters { - /** - * Get the current measurements. - */ - @VintfStability - parcelable Measurement { - int rms; - int peak; - } - Measurement measurement; - - /** - * Get the latest captureSamples of PCM samples (8 bits per sample). - */ - byte[] captureSampleBuffer; + parcelable Measurement { + int rms; + int peak; } - GetOnlyParameters getOnlyParameters; + Measurement measurement; /** - * Any parameter defined in this union must be settable via setParameter(), but must not - * gettable. + * Get only parameter to get the latest captured samples of PCM samples (8 bits per sample). */ - @VintfStability - union SetOnlyParameters { - /** - * Used by framework to inform the visualizer about the downstream latency (audio hardware - * driver estimated latency in milliseconds). - */ - int latencyMs; - } - SetOnlyParameters setOnlyParameters; + byte[] captureSampleBuffer; /** - * Current capture size in number of samples. The capture size must be inside - * Capability.captureSizeRange. + * Used by framework to inform the visualizer about the downstream latency (audio hardware + * driver estimated latency in milliseconds). + * + * Visualizer implementation must use Range.VisualizerRange to define the range of supported + * latency. + */ + int latencyMs; + + /** + * Current capture size in number of samples. + * + * Visualizer implementation must use Range.VisualizerRange to define the range of supported + * capture size. */ int captureSamples; + /** * Visualizer capture mode */ ScalingMode scalingMode; + /** * Visualizer measurement mode. */ diff --git a/audio/aidl/android/hardware/audio/effect/Volume.aidl b/audio/aidl/android/hardware/audio/effect/Volume.aidl index 503388116a..4a767035b1 100644 --- a/audio/aidl/android/hardware/audio/effect/Volume.aidl +++ b/audio/aidl/android/hardware/audio/effect/Volume.aidl @@ -21,8 +21,8 @@ import android.hardware.audio.effect.VendorExtension; /** * Volume specific definitions. Volume effect provide volume control and mute/unmute functionality. * - * All parameters defined in union Volume must be gettable and settable. The capabilities defined in - * Volume.Capability can only acquired with IEffect.getDescriptor() and not settable. + * All parameter settings must be inside the range of Capability.Range.volume definition if the + * definition for the corresponding parameter tag exist. See more detals about Range in Range.aidl. */ @VintfStability union Volume { @@ -41,29 +41,7 @@ union Volume { VendorExtension vendor; /** - * Capability supported by Volume implementation. - */ - @VintfStability - parcelable Capability { - /** - * Volume capability extension, vendor can use this extension in case existing capability - * definition not enough. - */ - VendorExtension extension; - - /** - * Minimum Volume level supported in dB. - */ - int minLevelDb; - - /** - * Maximum Volume level supported in dB. - */ - int maxLevelDb; - } - - /** - * Current level in dB with supported minimum and maximum level specified in capability. + * Current level in dB. */ int levelDb; /**