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 a193102f86..c12ebb805c 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 @@ -39,6 +39,8 @@ union EnvironmentalReverb { int roomHfLevelMb; int decayTimeMs; int decayHfRatioPm; + int reflectionsLevelMb; + int reflectionsDelayMs; int levelMb; int delayMs; int diffusionPm; diff --git a/audio/aidl/android/hardware/audio/effect/EnvironmentalReverb.aidl b/audio/aidl/android/hardware/audio/effect/EnvironmentalReverb.aidl index a158dcaf13..95d1ff6b77 100644 --- a/audio/aidl/android/hardware/audio/effect/EnvironmentalReverb.aidl +++ b/audio/aidl/android/hardware/audio/effect/EnvironmentalReverb.aidl @@ -58,6 +58,14 @@ union EnvironmentalReverb { * HF decay ratio in permilles. */ int decayHfRatioPm; + /** + * Reverb reflections level in millibels. + */ + int reflectionsLevelMb; + /** + * Reverb reflections delay in milliseconds. + */ + int reflectionsDelayMs; /** * Reverb level in millibels. */ diff --git a/audio/aidl/default/envReverb/EnvReverbSw.cpp b/audio/aidl/default/envReverb/EnvReverbSw.cpp index 46d9016653..15373fe2fa 100644 --- a/audio/aidl/default/envReverb/EnvReverbSw.cpp +++ b/audio/aidl/default/envReverb/EnvReverbSw.cpp @@ -66,6 +66,8 @@ const std::vector EnvReverbSw::kRanges = { MAKE_RANGE(EnvironmentalReverb, roomHfLevelMb, -4000, 0), MAKE_RANGE(EnvironmentalReverb, decayTimeMs, 0, 7000), MAKE_RANGE(EnvironmentalReverb, decayHfRatioPm, 100, 2000), + MAKE_RANGE(EnvironmentalReverb, reflectionsLevelMb, -6000, 0), + MAKE_RANGE(EnvironmentalReverb, reflectionsDelayMs, 0, 65), MAKE_RANGE(EnvironmentalReverb, levelMb, -6000, 0), MAKE_RANGE(EnvironmentalReverb, delayMs, 0, 65), MAKE_RANGE(EnvironmentalReverb, diffusionPm, 0, 1000), @@ -125,6 +127,20 @@ ndk::ScopedAStatus EnvReverbSw::setParameterSpecific(const Parameter::Specific& EX_ILLEGAL_ARGUMENT, "setDecayHfRatioFailed"); return ndk::ScopedAStatus::ok(); } + case EnvironmentalReverb::reflectionsLevelMb: { + RETURN_IF(mContext->setErReflectionsLevel( + erParam.get()) != + RetCode::SUCCESS, + EX_ILLEGAL_ARGUMENT, "setReflectionsLevelFailed"); + return ndk::ScopedAStatus::ok(); + } + case EnvironmentalReverb::reflectionsDelayMs: { + RETURN_IF(mContext->setErReflectionsDelay( + erParam.get()) != + RetCode::SUCCESS, + EX_ILLEGAL_ARGUMENT, "setReflectionsDelayFailed"); + return ndk::ScopedAStatus::ok(); + } case EnvironmentalReverb::levelMb: { RETURN_IF(mContext->setErLevel(erParam.get()) != RetCode::SUCCESS, @@ -201,6 +217,14 @@ ndk::ScopedAStatus EnvReverbSw::getParameterEnvironmentalReverb(const Environmen erParam.set(mContext->getErDecayHfRatio()); break; } + case EnvironmentalReverb::reflectionsLevelMb: { + erParam.set(mContext->getErReflectionsLevel()); + break; + } + case EnvironmentalReverb::reflectionsDelayMs: { + erParam.set(mContext->getErReflectionsDelay()); + break; + } case EnvironmentalReverb::levelMb: { erParam.set(mContext->getErLevel()); break; diff --git a/audio/aidl/default/envReverb/EnvReverbSw.h b/audio/aidl/default/envReverb/EnvReverbSw.h index 4f11a5c5d8..dd2cf5deb2 100644 --- a/audio/aidl/default/envReverb/EnvReverbSw.h +++ b/audio/aidl/default/envReverb/EnvReverbSw.h @@ -58,12 +58,23 @@ class EnvReverbSwContext final : public EffectContext { int getErDensity() const { return mDensity; } RetCode setErBypass(bool bypass) { - // TODO : Add implementation to apply new bypass mBypass = bypass; return RetCode::SUCCESS; } bool getErBypass() const { return mBypass; } + RetCode setErReflectionsDelay(int delay) { + mReflectionsDelayMs = delay; + return RetCode::SUCCESS; + } + bool getErReflectionsDelay() const { return mReflectionsDelayMs; } + + RetCode setErReflectionsLevel(int level) { + mReflectionsLevelMb = level; + return RetCode::SUCCESS; + } + bool getErReflectionsLevel() const { return mReflectionsLevelMb; } + private: int mRoomLevel = -6000; // Default room level int mRoomHfLevel = 0; // Default room hf level @@ -71,6 +82,8 @@ class EnvReverbSwContext final : public EffectContext { int mDecayHfRatio = 500; // Default decay hf ratio int mLevel = -6000; // Default level int mDelay = 40; // Default delay + int mReflectionsLevelMb = 0; + int mReflectionsDelayMs = 0; int mDiffusion = 1000; // Default diffusion int mDensity = 1000; // Default density bool mBypass = false; // Default bypass