Loading media/libeffects/lvm/wrapper/Aidl/BundleContext.cpp +56 −2 Original line number Diff line number Diff line Loading @@ -24,8 +24,9 @@ namespace aidl::android::hardware::audio::effect { using aidl::android::media::audio::common::AudioDeviceDescription; using aidl::android::media::audio::common::AudioDeviceType; using ::aidl::android::media::audio::common::AudioChannelLayout; using ::aidl::android::media::audio::common::AudioDeviceDescription; using ::aidl::android::media::audio::common::AudioDeviceType; RetCode BundleContext::init() { std::lock_guard lg(mMutex); Loading Loading @@ -317,6 +318,11 @@ bool BundleContext::isDeviceSupportedVirtualizer( return true; } bool BundleContext::isConfigSupportedVirtualizer(size_t channelCount, const AudioDeviceDescription& device) { return (channelCount >= 1 && channelCount <= FCC_2) && isDeviceSupportedVirtualizer({device}); } RetCode BundleContext::setOutputDevice( const std::vector<aidl::android::media::audio::common::AudioDeviceDescription>& devices) { mOutputDevice = devices; Loading Loading @@ -469,6 +475,23 @@ std::vector<Equalizer::BandLevel> BundleContext::getEqualizerBandLevels() const return bandLevels; } std::vector<int32_t> BundleContext::getEqualizerCenterFreqs() { std::vector<int32_t> freqs; LVM_ControlParams_t params; { std::lock_guard lg(mMutex); /* Get the current settings */ RETURN_VALUE_IF(LVM_SUCCESS != LVM_GetControlParameters(mInstance, ¶ms), freqs, " getControlParamFailed"); for (std::size_t i = 0; i < lvm::MAX_NUM_BANDS; i++) { freqs.push_back((int32_t)params.pEQNB_BandDefinition[i].Frequency * 1000); } } return freqs; } bool BundleContext::isBandLevelIndexInRange( const std::vector<Equalizer::BandLevel>& bandLevels) const { const auto [min, max] = Loading Loading @@ -583,6 +606,15 @@ RetCode BundleContext::setVirtualizerStrength(int strength) { return limitLevel(); } RetCode BundleContext::setForcedDevice( const ::aidl::android::media::audio::common::AudioDeviceDescription& device) { RETURN_VALUE_IF(true != isDeviceSupportedVirtualizer({device}), RetCode::ERROR_EFFECT_LIB_ERROR, " deviceNotSupportVirtualizer"); mForceDevice = device; return RetCode::SUCCESS; } void BundleContext::initControlParameter(LVM_ControlParams_t& params) const { /* General parameters */ params.OperatingMode = LVM_MODE_ON; Loading Loading @@ -668,6 +700,28 @@ LVM_HeadroomBandDef_t *BundleContext::getDefaultEqualizerHeadroomBanDefs() { return HeadroomBandDef; } std::vector<Virtualizer::ChannelAngle> BundleContext::getSpeakerAngles( const Virtualizer::SpeakerAnglesPayload payload) { std::vector<Virtualizer::ChannelAngle> angles; auto chCount = ::android::hardware::audio::common::getChannelCount(payload.layout); RETURN_VALUE_IF(!isConfigSupportedVirtualizer(chCount, payload.device), angles, "payloadNotSupported"); if (chCount == 1) { angles = {{.channel = (int32_t)AudioChannelLayout::CHANNEL_FRONT_LEFT, .azimuthDegree = 0, .elevationDegree = 0}}; } else { angles = {{.channel = (int32_t)AudioChannelLayout::CHANNEL_FRONT_LEFT, .azimuthDegree = -90, .elevationDegree = 0}, {.channel = (int32_t)AudioChannelLayout::CHANNEL_FRONT_RIGHT, .azimuthDegree = 90, .elevationDegree = 0}}; } return angles; } IEffect::Status BundleContext::lvmProcess(float* in, float* out, int samples) { IEffect::Status status = {EX_NULL_POINTER, 0, 0}; RETURN_VALUE_IF(!in, status, "nullInput"); Loading media/libeffects/lvm/wrapper/Aidl/BundleContext.h +15 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,10 @@ class BundleContext final : public EffectContext { bool isDeviceSupportedVirtualizer( const std::vector<aidl::android::media::audio::common::AudioDeviceDescription>& devices); bool isConfigSupportedVirtualizer( size_t channelCount, const aidl::android::media::audio::common::AudioDeviceDescription& device); RetCode setOutputDevice( const std::vector<aidl::android::media::audio::common::AudioDeviceDescription>& devices) override; Loading @@ -71,6 +75,8 @@ class BundleContext final : public EffectContext { RetCode setEqualizerBandLevels(const std::vector<Equalizer::BandLevel>& bandLevels); std::vector<Equalizer::BandLevel> getEqualizerBandLevels() const; std::vector<int32_t> getEqualizerCenterFreqs(); RetCode setBassBoostStrength(int strength); int getBassBoostStrength() const { return mBassStrengthSaved; } Loading @@ -83,6 +89,14 @@ class BundleContext final : public EffectContext { RetCode setVirtualizerStrength(int strength); int getVirtualizerStrength() const { return mVirtStrengthSaved; } RetCode setForcedDevice( const ::aidl::android::media::audio::common::AudioDeviceDescription& device); aidl::android::media::audio::common::AudioDeviceDescription getForcedDevice() const { return mForceDevice; } std::vector<Virtualizer::ChannelAngle> getSpeakerAngles( const Virtualizer::SpeakerAnglesPayload payload); RetCode setVolumeStereo(const Parameter::VolumeStereo& volumeStereo) override; Parameter::VolumeStereo getVolumeStereo() override { return mVolumeStereo; } Loading Loading @@ -125,6 +139,7 @@ class BundleContext final : public EffectContext { // Virtualizer int mVirtStrengthSaved = 0; /* Conversion between Get/Set */ bool mVirtualizerTempDisabled = false; ::aidl::android::media::audio::common::AudioDeviceDescription mForceDevice; // Volume int mLevelSaved = 0; /* for when mute is set, level must be saved */ int mVolume = 0; Loading media/libeffects/lvm/wrapper/Aidl/EffectBundleAidl.cpp +30 −5 Original line number Diff line number Diff line Loading @@ -218,10 +218,18 @@ ndk::ScopedAStatus EffectBundleAidl::setParameterVirtualizer(const Parameter::Sp EX_ILLEGAL_ARGUMENT, "setStrengthFailed"); return ndk::ScopedAStatus::ok(); } default: LOG(ERROR) << __func__ << " unsupported parameter " << specific.toString(); case Virtualizer::device: { RETURN_IF(mContext->setForcedDevice(vr.get<Virtualizer::device>()) != RetCode::SUCCESS, EX_ILLEGAL_ARGUMENT, "setDeviceFailed"); return ndk::ScopedAStatus::ok(); } case Virtualizer::speakerAngles: FALLTHROUGH_INTENDED; case Virtualizer::vendor: { LOG(ERROR) << __func__ << " unsupported tag: " << toString(vrTag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "vrTagNotSupported"); "VirtualizerTagNotSupported"); } } } Loading Loading @@ -283,6 +291,10 @@ ndk::ScopedAStatus EffectBundleAidl::getParameterEqualizer(const Equalizer::Id& eqParam.set<Equalizer::preset>(mContext->getEqualizerPreset()); break; } case Equalizer::centerFreqMh: { eqParam.set<Equalizer::centerFreqMh>(mContext->getEqualizerCenterFreqs()); break; } default: { LOG(ERROR) << __func__ << " not handled tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage( Loading Loading @@ -354,14 +366,27 @@ ndk::ScopedAStatus EffectBundleAidl::getParameterVirtualizer(const Virtualizer:: RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext"); Virtualizer vrParam; if (id.getTag() == Virtualizer::Id::speakerAnglesPayload) { auto angles = mContext->getSpeakerAngles(id.get<Virtualizer::Id::speakerAnglesPayload>()); Virtualizer param = Virtualizer::make<Virtualizer::speakerAngles>(angles); specific->set<Parameter::Specific::virtualizer>(param); return ndk::ScopedAStatus::ok(); } auto tag = id.get<Virtualizer::Id::commonTag>(); switch (tag) { case Virtualizer::strengthPm: { vrParam.set<Virtualizer::strengthPm>(mContext->getVirtualizerStrength()); break; } default: { LOG(ERROR) << __func__ << " not handled tag: " << toString(tag); case Virtualizer::device: { vrParam.set<Virtualizer::device>(mContext->getForcedDevice()); break; } case Virtualizer::speakerAngles: FALLTHROUGH_INTENDED; case Virtualizer::vendor: { LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "VirtualizerTagNotSupported"); } Loading Loading
media/libeffects/lvm/wrapper/Aidl/BundleContext.cpp +56 −2 Original line number Diff line number Diff line Loading @@ -24,8 +24,9 @@ namespace aidl::android::hardware::audio::effect { using aidl::android::media::audio::common::AudioDeviceDescription; using aidl::android::media::audio::common::AudioDeviceType; using ::aidl::android::media::audio::common::AudioChannelLayout; using ::aidl::android::media::audio::common::AudioDeviceDescription; using ::aidl::android::media::audio::common::AudioDeviceType; RetCode BundleContext::init() { std::lock_guard lg(mMutex); Loading Loading @@ -317,6 +318,11 @@ bool BundleContext::isDeviceSupportedVirtualizer( return true; } bool BundleContext::isConfigSupportedVirtualizer(size_t channelCount, const AudioDeviceDescription& device) { return (channelCount >= 1 && channelCount <= FCC_2) && isDeviceSupportedVirtualizer({device}); } RetCode BundleContext::setOutputDevice( const std::vector<aidl::android::media::audio::common::AudioDeviceDescription>& devices) { mOutputDevice = devices; Loading Loading @@ -469,6 +475,23 @@ std::vector<Equalizer::BandLevel> BundleContext::getEqualizerBandLevels() const return bandLevels; } std::vector<int32_t> BundleContext::getEqualizerCenterFreqs() { std::vector<int32_t> freqs; LVM_ControlParams_t params; { std::lock_guard lg(mMutex); /* Get the current settings */ RETURN_VALUE_IF(LVM_SUCCESS != LVM_GetControlParameters(mInstance, ¶ms), freqs, " getControlParamFailed"); for (std::size_t i = 0; i < lvm::MAX_NUM_BANDS; i++) { freqs.push_back((int32_t)params.pEQNB_BandDefinition[i].Frequency * 1000); } } return freqs; } bool BundleContext::isBandLevelIndexInRange( const std::vector<Equalizer::BandLevel>& bandLevels) const { const auto [min, max] = Loading Loading @@ -583,6 +606,15 @@ RetCode BundleContext::setVirtualizerStrength(int strength) { return limitLevel(); } RetCode BundleContext::setForcedDevice( const ::aidl::android::media::audio::common::AudioDeviceDescription& device) { RETURN_VALUE_IF(true != isDeviceSupportedVirtualizer({device}), RetCode::ERROR_EFFECT_LIB_ERROR, " deviceNotSupportVirtualizer"); mForceDevice = device; return RetCode::SUCCESS; } void BundleContext::initControlParameter(LVM_ControlParams_t& params) const { /* General parameters */ params.OperatingMode = LVM_MODE_ON; Loading Loading @@ -668,6 +700,28 @@ LVM_HeadroomBandDef_t *BundleContext::getDefaultEqualizerHeadroomBanDefs() { return HeadroomBandDef; } std::vector<Virtualizer::ChannelAngle> BundleContext::getSpeakerAngles( const Virtualizer::SpeakerAnglesPayload payload) { std::vector<Virtualizer::ChannelAngle> angles; auto chCount = ::android::hardware::audio::common::getChannelCount(payload.layout); RETURN_VALUE_IF(!isConfigSupportedVirtualizer(chCount, payload.device), angles, "payloadNotSupported"); if (chCount == 1) { angles = {{.channel = (int32_t)AudioChannelLayout::CHANNEL_FRONT_LEFT, .azimuthDegree = 0, .elevationDegree = 0}}; } else { angles = {{.channel = (int32_t)AudioChannelLayout::CHANNEL_FRONT_LEFT, .azimuthDegree = -90, .elevationDegree = 0}, {.channel = (int32_t)AudioChannelLayout::CHANNEL_FRONT_RIGHT, .azimuthDegree = 90, .elevationDegree = 0}}; } return angles; } IEffect::Status BundleContext::lvmProcess(float* in, float* out, int samples) { IEffect::Status status = {EX_NULL_POINTER, 0, 0}; RETURN_VALUE_IF(!in, status, "nullInput"); Loading
media/libeffects/lvm/wrapper/Aidl/BundleContext.h +15 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,10 @@ class BundleContext final : public EffectContext { bool isDeviceSupportedVirtualizer( const std::vector<aidl::android::media::audio::common::AudioDeviceDescription>& devices); bool isConfigSupportedVirtualizer( size_t channelCount, const aidl::android::media::audio::common::AudioDeviceDescription& device); RetCode setOutputDevice( const std::vector<aidl::android::media::audio::common::AudioDeviceDescription>& devices) override; Loading @@ -71,6 +75,8 @@ class BundleContext final : public EffectContext { RetCode setEqualizerBandLevels(const std::vector<Equalizer::BandLevel>& bandLevels); std::vector<Equalizer::BandLevel> getEqualizerBandLevels() const; std::vector<int32_t> getEqualizerCenterFreqs(); RetCode setBassBoostStrength(int strength); int getBassBoostStrength() const { return mBassStrengthSaved; } Loading @@ -83,6 +89,14 @@ class BundleContext final : public EffectContext { RetCode setVirtualizerStrength(int strength); int getVirtualizerStrength() const { return mVirtStrengthSaved; } RetCode setForcedDevice( const ::aidl::android::media::audio::common::AudioDeviceDescription& device); aidl::android::media::audio::common::AudioDeviceDescription getForcedDevice() const { return mForceDevice; } std::vector<Virtualizer::ChannelAngle> getSpeakerAngles( const Virtualizer::SpeakerAnglesPayload payload); RetCode setVolumeStereo(const Parameter::VolumeStereo& volumeStereo) override; Parameter::VolumeStereo getVolumeStereo() override { return mVolumeStereo; } Loading Loading @@ -125,6 +139,7 @@ class BundleContext final : public EffectContext { // Virtualizer int mVirtStrengthSaved = 0; /* Conversion between Get/Set */ bool mVirtualizerTempDisabled = false; ::aidl::android::media::audio::common::AudioDeviceDescription mForceDevice; // Volume int mLevelSaved = 0; /* for when mute is set, level must be saved */ int mVolume = 0; Loading
media/libeffects/lvm/wrapper/Aidl/EffectBundleAidl.cpp +30 −5 Original line number Diff line number Diff line Loading @@ -218,10 +218,18 @@ ndk::ScopedAStatus EffectBundleAidl::setParameterVirtualizer(const Parameter::Sp EX_ILLEGAL_ARGUMENT, "setStrengthFailed"); return ndk::ScopedAStatus::ok(); } default: LOG(ERROR) << __func__ << " unsupported parameter " << specific.toString(); case Virtualizer::device: { RETURN_IF(mContext->setForcedDevice(vr.get<Virtualizer::device>()) != RetCode::SUCCESS, EX_ILLEGAL_ARGUMENT, "setDeviceFailed"); return ndk::ScopedAStatus::ok(); } case Virtualizer::speakerAngles: FALLTHROUGH_INTENDED; case Virtualizer::vendor: { LOG(ERROR) << __func__ << " unsupported tag: " << toString(vrTag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "vrTagNotSupported"); "VirtualizerTagNotSupported"); } } } Loading Loading @@ -283,6 +291,10 @@ ndk::ScopedAStatus EffectBundleAidl::getParameterEqualizer(const Equalizer::Id& eqParam.set<Equalizer::preset>(mContext->getEqualizerPreset()); break; } case Equalizer::centerFreqMh: { eqParam.set<Equalizer::centerFreqMh>(mContext->getEqualizerCenterFreqs()); break; } default: { LOG(ERROR) << __func__ << " not handled tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage( Loading Loading @@ -354,14 +366,27 @@ ndk::ScopedAStatus EffectBundleAidl::getParameterVirtualizer(const Virtualizer:: RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext"); Virtualizer vrParam; if (id.getTag() == Virtualizer::Id::speakerAnglesPayload) { auto angles = mContext->getSpeakerAngles(id.get<Virtualizer::Id::speakerAnglesPayload>()); Virtualizer param = Virtualizer::make<Virtualizer::speakerAngles>(angles); specific->set<Parameter::Specific::virtualizer>(param); return ndk::ScopedAStatus::ok(); } auto tag = id.get<Virtualizer::Id::commonTag>(); switch (tag) { case Virtualizer::strengthPm: { vrParam.set<Virtualizer::strengthPm>(mContext->getVirtualizerStrength()); break; } default: { LOG(ERROR) << __func__ << " not handled tag: " << toString(tag); case Virtualizer::device: { vrParam.set<Virtualizer::device>(mContext->getForcedDevice()); break; } case Virtualizer::speakerAngles: FALLTHROUGH_INTENDED; case Virtualizer::vendor: { LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "VirtualizerTagNotSupported"); } Loading