Loading media/libaudiohal/impl/EffectProxy.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <fmq/AidlMessageQueue.h> #include <system/audio_aidl_utils.h> #include <system/audio_effects/aidl_effects_utils.h> #include <utils/Log.h> #include "EffectProxy.h" Loading @@ -41,7 +42,8 @@ namespace android::effect { EffectProxy::EffectProxy(const AudioUuid& uuid, const std::vector<Descriptor>& descriptors, const std::shared_ptr<IFactory>& factory) : mDescriptorCommon(buildDescriptorCommon(uuid, descriptors)), : mSharedCapability(buildDescriptorCapability(descriptors)), mDescriptorCommon(buildDescriptorCommon(uuid, descriptors)), mSubEffects( [](const std::vector<Descriptor>& descs, const std::shared_ptr<IFactory>& factory) { std::vector<SubEffect> subEffects; Loading Loading @@ -163,6 +165,7 @@ ndk::ScopedAStatus EffectProxy::close() { ndk::ScopedAStatus EffectProxy::getDescriptor(Descriptor* desc) { *desc = mSubEffects[mActiveSubIdx].descriptor; desc->capability = mSharedCapability; desc->common = mDescriptorCommon; return ndk::ScopedAStatus::ok(); } Loading @@ -182,6 +185,7 @@ ndk::ScopedAStatus EffectProxy::buildDescriptor(const AudioUuid& uuid, } desc->common = buildDescriptorCommon(uuid, subEffectDescs); desc->capability = buildDescriptorCapability(subEffectDescs); return ndk::ScopedAStatus::ok(); } Loading Loading @@ -216,6 +220,20 @@ Descriptor::Common EffectProxy::buildDescriptorCommon( return swCommon; } // Build a shared Descriptor capability with all sub-effects. Capability EffectProxy::buildDescriptorCapability(const std::vector<Descriptor>& subEffectDescs) { std::optional<Capability> cap = subEffectDescs[0].capability; for (size_t i = 1; i < subEffectDescs.size(); i++) { cap = findSharedCapability(cap.value(), subEffectDescs[i].capability); if (!cap) { ALOGE("%s failed to find the shared capability at %zu", __func__, i); return subEffectDescs[0].capability; } } return cap.value(); } // Handle with active sub-effect first, only send to other sub-effects when success ndk::ScopedAStatus EffectProxy::command(CommandId id) { return runWithActiveSubEffectThenOthers( Loading Loading @@ -323,6 +341,8 @@ std::string EffectProxy::toString(size_t level) const { prefixSpace += " "; base::StringAppendF(&ss, "%sDescriptorCommon: %s\n", prefixSpace.c_str(), mDescriptorCommon.toString().c_str()); base::StringAppendF(&ss, "%sDescriptorCapability: %s\n", prefixSpace.c_str(), mSharedCapability.toString().c_str()); base::StringAppendF(&ss, "%sActiveSubIdx: %zu\n", prefixSpace.c_str(), mActiveSubIdx); base::StringAppendF(&ss, "%sAllSubEffects:\n", prefixSpace.c_str()); for (size_t i = 0; i < mSubEffects.size(); i++) { Loading media/libaudiohal/impl/EffectProxy.h +7 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,8 @@ class EffectProxy final : public ::aidl::android::hardware::audio::effect::BnEff std::string toString(size_t indent = 0) const; private: // The shared capability of all sub-effects const ::aidl::android::hardware::audio::effect::Capability mSharedCapability; // Proxy descriptor common part, copy from one sub-effect, and update the implementation UUID to // proxy UUID, proxy descriptor capability part comes from the active sub-effect capability const ::aidl::android::hardware::audio::effect::Descriptor::Common mDescriptorCommon; Loading Loading @@ -146,6 +148,11 @@ class EffectProxy final : public ::aidl::android::hardware::audio::effect::BnEff const std::vector<::aidl::android::hardware::audio::effect::Descriptor>& subEffectDescs); // build a shared capability with all sub-effect descriptors static ::aidl::android::hardware::audio::effect::Capability buildDescriptorCapability( const std::vector<::aidl::android::hardware::audio::effect::Descriptor>& subEffectDescs); // close and release all sub-effects ~EffectProxy(); }; Loading media/libaudiohal/impl/effectsAidlConversion/AidlConversionDynamicsProcessing.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <media/AidlConversionNdk.h> #include <media/AidlConversionEffect.h> #include <system/audio_effect.h> #include <system/audio_effects/aidl_effects_utils.h> #include <system/audio_effects/effect_dynamicsprocessing.h> #include <Utils.h> #include <utils/Log.h> Loading @@ -38,8 +39,10 @@ using ::aidl::android::convertIntegral; using ::aidl::android::getParameterSpecificField; using ::aidl::android::aidl_utils::statusTFromBinderStatus; using ::aidl::android::hardware::audio::effect::Capability; using ::aidl::android::hardware::audio::effect::clampParameter; using ::aidl::android::hardware::audio::effect::DynamicsProcessing; using ::aidl::android::hardware::audio::effect::Parameter; using ::aidl::android::hardware::audio::effect::Range; using ::aidl::android::hardware::audio::effect::toString; using ::aidl::android::hardware::audio::effect::VendorExtension; using ::android::status_t; Loading Loading @@ -126,7 +129,14 @@ status_t AidlConversionDp::setParameter(EffectParamReader& param) { } } return statusTFromBinderStatus(mEffect->setParameter(aidlParam)); std::optional<Parameter> clamped = clampParameter<Range::dynamicsProcessing, Parameter::Specific::dynamicsProcessing>( aidlParam, getDescriptor().capability); if (!clamped) { ALOGE("%s failed to clamp parameters: %s", __func__, aidlParam.toString().c_str()); return BAD_VALUE; } return statusTFromBinderStatus(mEffect->setParameter(clamped.value())); } status_t AidlConversionDp::getParameter(EffectParamWriter& param) { Loading Loading
media/libaudiohal/impl/EffectProxy.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <fmq/AidlMessageQueue.h> #include <system/audio_aidl_utils.h> #include <system/audio_effects/aidl_effects_utils.h> #include <utils/Log.h> #include "EffectProxy.h" Loading @@ -41,7 +42,8 @@ namespace android::effect { EffectProxy::EffectProxy(const AudioUuid& uuid, const std::vector<Descriptor>& descriptors, const std::shared_ptr<IFactory>& factory) : mDescriptorCommon(buildDescriptorCommon(uuid, descriptors)), : mSharedCapability(buildDescriptorCapability(descriptors)), mDescriptorCommon(buildDescriptorCommon(uuid, descriptors)), mSubEffects( [](const std::vector<Descriptor>& descs, const std::shared_ptr<IFactory>& factory) { std::vector<SubEffect> subEffects; Loading Loading @@ -163,6 +165,7 @@ ndk::ScopedAStatus EffectProxy::close() { ndk::ScopedAStatus EffectProxy::getDescriptor(Descriptor* desc) { *desc = mSubEffects[mActiveSubIdx].descriptor; desc->capability = mSharedCapability; desc->common = mDescriptorCommon; return ndk::ScopedAStatus::ok(); } Loading @@ -182,6 +185,7 @@ ndk::ScopedAStatus EffectProxy::buildDescriptor(const AudioUuid& uuid, } desc->common = buildDescriptorCommon(uuid, subEffectDescs); desc->capability = buildDescriptorCapability(subEffectDescs); return ndk::ScopedAStatus::ok(); } Loading Loading @@ -216,6 +220,20 @@ Descriptor::Common EffectProxy::buildDescriptorCommon( return swCommon; } // Build a shared Descriptor capability with all sub-effects. Capability EffectProxy::buildDescriptorCapability(const std::vector<Descriptor>& subEffectDescs) { std::optional<Capability> cap = subEffectDescs[0].capability; for (size_t i = 1; i < subEffectDescs.size(); i++) { cap = findSharedCapability(cap.value(), subEffectDescs[i].capability); if (!cap) { ALOGE("%s failed to find the shared capability at %zu", __func__, i); return subEffectDescs[0].capability; } } return cap.value(); } // Handle with active sub-effect first, only send to other sub-effects when success ndk::ScopedAStatus EffectProxy::command(CommandId id) { return runWithActiveSubEffectThenOthers( Loading Loading @@ -323,6 +341,8 @@ std::string EffectProxy::toString(size_t level) const { prefixSpace += " "; base::StringAppendF(&ss, "%sDescriptorCommon: %s\n", prefixSpace.c_str(), mDescriptorCommon.toString().c_str()); base::StringAppendF(&ss, "%sDescriptorCapability: %s\n", prefixSpace.c_str(), mSharedCapability.toString().c_str()); base::StringAppendF(&ss, "%sActiveSubIdx: %zu\n", prefixSpace.c_str(), mActiveSubIdx); base::StringAppendF(&ss, "%sAllSubEffects:\n", prefixSpace.c_str()); for (size_t i = 0; i < mSubEffects.size(); i++) { Loading
media/libaudiohal/impl/EffectProxy.h +7 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,8 @@ class EffectProxy final : public ::aidl::android::hardware::audio::effect::BnEff std::string toString(size_t indent = 0) const; private: // The shared capability of all sub-effects const ::aidl::android::hardware::audio::effect::Capability mSharedCapability; // Proxy descriptor common part, copy from one sub-effect, and update the implementation UUID to // proxy UUID, proxy descriptor capability part comes from the active sub-effect capability const ::aidl::android::hardware::audio::effect::Descriptor::Common mDescriptorCommon; Loading Loading @@ -146,6 +148,11 @@ class EffectProxy final : public ::aidl::android::hardware::audio::effect::BnEff const std::vector<::aidl::android::hardware::audio::effect::Descriptor>& subEffectDescs); // build a shared capability with all sub-effect descriptors static ::aidl::android::hardware::audio::effect::Capability buildDescriptorCapability( const std::vector<::aidl::android::hardware::audio::effect::Descriptor>& subEffectDescs); // close and release all sub-effects ~EffectProxy(); }; Loading
media/libaudiohal/impl/effectsAidlConversion/AidlConversionDynamicsProcessing.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <media/AidlConversionNdk.h> #include <media/AidlConversionEffect.h> #include <system/audio_effect.h> #include <system/audio_effects/aidl_effects_utils.h> #include <system/audio_effects/effect_dynamicsprocessing.h> #include <Utils.h> #include <utils/Log.h> Loading @@ -38,8 +39,10 @@ using ::aidl::android::convertIntegral; using ::aidl::android::getParameterSpecificField; using ::aidl::android::aidl_utils::statusTFromBinderStatus; using ::aidl::android::hardware::audio::effect::Capability; using ::aidl::android::hardware::audio::effect::clampParameter; using ::aidl::android::hardware::audio::effect::DynamicsProcessing; using ::aidl::android::hardware::audio::effect::Parameter; using ::aidl::android::hardware::audio::effect::Range; using ::aidl::android::hardware::audio::effect::toString; using ::aidl::android::hardware::audio::effect::VendorExtension; using ::android::status_t; Loading Loading @@ -126,7 +129,14 @@ status_t AidlConversionDp::setParameter(EffectParamReader& param) { } } return statusTFromBinderStatus(mEffect->setParameter(aidlParam)); std::optional<Parameter> clamped = clampParameter<Range::dynamicsProcessing, Parameter::Specific::dynamicsProcessing>( aidlParam, getDescriptor().capability); if (!clamped) { ALOGE("%s failed to clamp parameters: %s", __func__, aidlParam.toString().c_str()); return BAD_VALUE; } return statusTFromBinderStatus(mEffect->setParameter(clamped.value())); } status_t AidlConversionDp::getParameter(EffectParamWriter& param) { Loading