Loading media/libaudiohal/impl/effectsAidlConversion/AidlConversionBassBoost.cpp +6 −4 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <media/AidlConversionNdk.h> #include <media/AidlConversionNdk.h> #include <media/AidlConversionEffect.h> #include <media/AidlConversionEffect.h> #include <media/audiohal/AudioEffectUuid.h> #include <media/audiohal/AudioEffectUuid.h> #include <system/audio_effects/aidl_effects_utils.h> #include <system/audio_effects/effect_bassboost.h> #include <system/audio_effects/effect_bassboost.h> #include <utils/Log.h> #include <utils/Log.h> Loading @@ -37,6 +38,7 @@ using ::aidl::android::convertIntegral; using ::aidl::android::aidl_utils::statusTFromBinderStatus; using ::aidl::android::aidl_utils::statusTFromBinderStatus; using ::aidl::android::hardware::audio::effect::BassBoost; using ::aidl::android::hardware::audio::effect::BassBoost; using ::aidl::android::hardware::audio::effect::Parameter; using ::aidl::android::hardware::audio::effect::Parameter; using ::aidl::android::hardware::audio::effect::Range; using ::android::status_t; using ::android::status_t; using utils::EffectParamReader; using utils::EffectParamReader; using utils::EffectParamWriter; using utils::EffectParamWriter; Loading Loading @@ -89,10 +91,10 @@ status_t AidlConversionBassBoost::getParameter(EffectParamWriter& param) { return param.writeToValue(&value); return param.writeToValue(&value); } } case BASSBOOST_PARAM_STRENGTH_SUPPORTED: { case BASSBOOST_PARAM_STRENGTH_SUPPORTED: { uint16_t value; // an invalid range indicates not setting support for this parameter const auto& cap = uint16_t value = VALUE_OR_RETURN_STATUS(aidl::android::UNION_GET(mDesc.capability, bassBoost)); ::aidl::android::hardware::audio::effect::isRangeValid<Range::Tag::bassBoost>( value = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(cap.strengthSupported)); BassBoost::strengthPm, mDesc.capability); return param.writeToValue(&value); return param.writeToValue(&value); } } default: { default: { Loading media/libaudiohal/impl/effectsAidlConversion/AidlConversionDynamicsProcessing.cpp +0 −2 Original line number Original line Diff line number Diff line Loading @@ -147,8 +147,6 @@ status_t AidlConversionDp::getParameter(EffectParamWriter& param) { DynamicsProcessing::inputGain); DynamicsProcessing::inputGain); RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->getParameter(id, &aidlParam))); RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->getParameter(id, &aidlParam))); DynamicsProcessing::Capability cap = mDesc.capability.get<Capability::dynamicsProcessing>(); std::vector<DynamicsProcessing::InputGain> gains = std::vector<DynamicsProcessing::InputGain> gains = VALUE_OR_RETURN_STATUS(aidl::android::GET_PARAMETER_SPECIFIC_FIELD( VALUE_OR_RETURN_STATUS(aidl::android::GET_PARAMETER_SPECIFIC_FIELD( aidlParam, DynamicsProcessing, dynamicsProcessing, aidlParam, DynamicsProcessing, dynamicsProcessing, Loading media/libeffects/dynamicsproc/aidl/DynamicsProcessing.cpp +30 −4 Original line number Original line Diff line number Diff line Loading @@ -59,8 +59,34 @@ extern "C" binder_exception_t queryEffect(const AudioUuid* in_impl_uuid, Descrip namespace aidl::android::hardware::audio::effect { namespace aidl::android::hardware::audio::effect { const std::string DynamicsProcessingImpl::kEffectName = "DynamicsProcessing"; const std::string DynamicsProcessingImpl::kEffectName = "DynamicsProcessing"; const DynamicsProcessing::Capability DynamicsProcessingImpl::kCapability = {.minCutOffFreq = 220, .maxCutOffFreq = 20000}; const DynamicsProcessing::EqBandConfig DynamicsProcessingImpl::kEqBandConfigMin = DynamicsProcessing::EqBandConfig({.channel = 0, .band = 0, .enable = false, .cutoffFrequencyHz = 220, .gainDb = std::numeric_limits<float>::min()}); const DynamicsProcessing::EqBandConfig DynamicsProcessingImpl::kEqBandConfigMax = DynamicsProcessing::EqBandConfig({.channel = std::numeric_limits<int>::max(), .band = std::numeric_limits<int>::max(), .enable = true, .cutoffFrequencyHz = 20000, .gainDb = std::numeric_limits<float>::max()}); const Range::DynamicsProcessingRange DynamicsProcessingImpl::kPreEqBandRange = { .min = DynamicsProcessing::make<DynamicsProcessing::preEqBand>( {DynamicsProcessingImpl::kEqBandConfigMin}), .max = DynamicsProcessing::make<DynamicsProcessing::preEqBand>( {DynamicsProcessingImpl::kEqBandConfigMax})}; const Range::DynamicsProcessingRange DynamicsProcessingImpl::kPostEqBandRange = { .min = DynamicsProcessing::make<DynamicsProcessing::postEqBand>( {DynamicsProcessingImpl::kEqBandConfigMin}), .max = DynamicsProcessing::make<DynamicsProcessing::postEqBand>( {DynamicsProcessingImpl::kEqBandConfigMax})}; const Range DynamicsProcessingImpl::kRange = Range::make<Range::dynamicsProcessing>({DynamicsProcessingImpl::kPreEqBandRange}); const Capability DynamicsProcessingImpl::kCapability = {.range = {DynamicsProcessingImpl::kRange}}; const Descriptor DynamicsProcessingImpl::kDescriptor = { const Descriptor DynamicsProcessingImpl::kDescriptor = { .common = {.id = {.type = kDynamicsProcessingTypeUUID, .common = {.id = {.type = kDynamicsProcessingTypeUUID, .uuid = kDynamicsProcessingImplUUID, .uuid = kDynamicsProcessingImplUUID, Loading @@ -70,8 +96,7 @@ const Descriptor DynamicsProcessingImpl::kDescriptor = { .volume = Flags::Volume::CTRL}, .volume = Flags::Volume::CTRL}, .name = DynamicsProcessingImpl::kEffectName, .name = DynamicsProcessingImpl::kEffectName, .implementor = "The Android Open Source Project"}, .implementor = "The Android Open Source Project"}, .capability = Capability::make<Capability::dynamicsProcessing>( .capability = DynamicsProcessingImpl::kCapability}; DynamicsProcessingImpl::kCapability)}; ndk::ScopedAStatus DynamicsProcessingImpl::open(const Parameter::Common& common, ndk::ScopedAStatus DynamicsProcessingImpl::open(const Parameter::Common& common, const std::optional<Parameter::Specific>& specific, const std::optional<Parameter::Specific>& specific, Loading Loading @@ -138,6 +163,7 @@ ndk::ScopedAStatus DynamicsProcessingImpl::setParameterSpecific( RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext"); RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext"); auto& param = specific.get<Parameter::Specific::dynamicsProcessing>(); auto& param = specific.get<Parameter::Specific::dynamicsProcessing>(); // TODO: check range here, dynamicsProcessing need customized method for nested parameters. auto tag = param.getTag(); auto tag = param.getTag(); switch (tag) { switch (tag) { Loading media/libeffects/dynamicsproc/aidl/DynamicsProcessing.h +6 −1 Original line number Original line Diff line number Diff line Loading @@ -28,7 +28,7 @@ class DynamicsProcessingImpl final : public EffectImpl { public: public: static const std::string kEffectName; static const std::string kEffectName; static const Descriptor kDescriptor; static const Descriptor kDescriptor; static const DynamicsProcessing::Capability kCapability; static const Capability kCapability; DynamicsProcessingImpl() { LOG(DEBUG) << __func__; } DynamicsProcessingImpl() { LOG(DEBUG) << __func__; } ~DynamicsProcessingImpl() { ~DynamicsProcessingImpl() { Loading @@ -52,6 +52,11 @@ class DynamicsProcessingImpl final : public EffectImpl { std::string getEffectName() override { return kEffectName; } std::string getEffectName() override { return kEffectName; } private: private: static const DynamicsProcessing::EqBandConfig kEqBandConfigMin; static const DynamicsProcessing::EqBandConfig kEqBandConfigMax; static const Range::DynamicsProcessingRange kPreEqBandRange; static const Range::DynamicsProcessingRange kPostEqBandRange; static const Range kRange; std::shared_ptr<DynamicsProcessingContext> mContext; std::shared_ptr<DynamicsProcessingContext> mContext; ndk::ScopedAStatus getParameterDynamicsProcessing(const DynamicsProcessing::Tag& tag, ndk::ScopedAStatus getParameterDynamicsProcessing(const DynamicsProcessing::Tag& tag, Parameter::Specific* specific); Parameter::Specific* specific); Loading media/libeffects/dynamicsproc/aidl/DynamicsProcessingContext.cpp +5 −11 Original line number Original line Diff line number Diff line Loading @@ -420,24 +420,18 @@ bool DynamicsProcessingContext::validateEngineConfig( validateStageEnablement(engine.postEqStage) && validateStageEnablement(engine.mbcStage); validateStageEnablement(engine.postEqStage) && validateStageEnablement(engine.mbcStage); } } inline bool DynamicsProcessingContext::validateCutoffFrequency(float freq) { return freq >= DynamicsProcessingImpl::kCapability.minCutOffFreq && freq <= DynamicsProcessingImpl::kCapability.maxCutOffFreq; } bool DynamicsProcessingContext::validateEqBandConfig(const DynamicsProcessing::EqBandConfig& band, bool DynamicsProcessingContext::validateEqBandConfig(const DynamicsProcessing::EqBandConfig& band, int maxChannel, int maxBand) { int maxChannel, int maxBand) { return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) && return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand); validateCutoffFrequency(band.cutoffFrequencyHz); } } bool DynamicsProcessingContext::validateMbcBandConfig(const DynamicsProcessing::MbcBandConfig& band, bool DynamicsProcessingContext::validateMbcBandConfig(const DynamicsProcessing::MbcBandConfig& band, int maxChannel, int maxBand) { int maxChannel, int maxBand) { return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) && return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) && validateCutoffFrequency(band.cutoffFrequencyHz) && validateTime(band.attackTimeMs) && validateTime(band.attackTimeMs) && validateTime(band.releaseTimeMs) && validateTime(band.releaseTimeMs) && validateRatio(band.ratio) && validateRatio(band.ratio) && validateBandDb(band.thresholdDb) && validateBandDb(band.thresholdDb) && validateBandDb(band.kneeWidthDb) && validateBandDb(band.kneeWidthDb) && validateBandDb(band.noiseGateThresholdDb) && validateBandDb(band.noiseGateThresholdDb) && validateRatio(band.expanderRatio); validateRatio(band.expanderRatio); } } bool DynamicsProcessingContext::validateLimiterConfig( bool DynamicsProcessingContext::validateLimiterConfig( Loading Loading
media/libaudiohal/impl/effectsAidlConversion/AidlConversionBassBoost.cpp +6 −4 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <media/AidlConversionNdk.h> #include <media/AidlConversionNdk.h> #include <media/AidlConversionEffect.h> #include <media/AidlConversionEffect.h> #include <media/audiohal/AudioEffectUuid.h> #include <media/audiohal/AudioEffectUuid.h> #include <system/audio_effects/aidl_effects_utils.h> #include <system/audio_effects/effect_bassboost.h> #include <system/audio_effects/effect_bassboost.h> #include <utils/Log.h> #include <utils/Log.h> Loading @@ -37,6 +38,7 @@ using ::aidl::android::convertIntegral; using ::aidl::android::aidl_utils::statusTFromBinderStatus; using ::aidl::android::aidl_utils::statusTFromBinderStatus; using ::aidl::android::hardware::audio::effect::BassBoost; using ::aidl::android::hardware::audio::effect::BassBoost; using ::aidl::android::hardware::audio::effect::Parameter; using ::aidl::android::hardware::audio::effect::Parameter; using ::aidl::android::hardware::audio::effect::Range; using ::android::status_t; using ::android::status_t; using utils::EffectParamReader; using utils::EffectParamReader; using utils::EffectParamWriter; using utils::EffectParamWriter; Loading Loading @@ -89,10 +91,10 @@ status_t AidlConversionBassBoost::getParameter(EffectParamWriter& param) { return param.writeToValue(&value); return param.writeToValue(&value); } } case BASSBOOST_PARAM_STRENGTH_SUPPORTED: { case BASSBOOST_PARAM_STRENGTH_SUPPORTED: { uint16_t value; // an invalid range indicates not setting support for this parameter const auto& cap = uint16_t value = VALUE_OR_RETURN_STATUS(aidl::android::UNION_GET(mDesc.capability, bassBoost)); ::aidl::android::hardware::audio::effect::isRangeValid<Range::Tag::bassBoost>( value = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(cap.strengthSupported)); BassBoost::strengthPm, mDesc.capability); return param.writeToValue(&value); return param.writeToValue(&value); } } default: { default: { Loading
media/libaudiohal/impl/effectsAidlConversion/AidlConversionDynamicsProcessing.cpp +0 −2 Original line number Original line Diff line number Diff line Loading @@ -147,8 +147,6 @@ status_t AidlConversionDp::getParameter(EffectParamWriter& param) { DynamicsProcessing::inputGain); DynamicsProcessing::inputGain); RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->getParameter(id, &aidlParam))); RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->getParameter(id, &aidlParam))); DynamicsProcessing::Capability cap = mDesc.capability.get<Capability::dynamicsProcessing>(); std::vector<DynamicsProcessing::InputGain> gains = std::vector<DynamicsProcessing::InputGain> gains = VALUE_OR_RETURN_STATUS(aidl::android::GET_PARAMETER_SPECIFIC_FIELD( VALUE_OR_RETURN_STATUS(aidl::android::GET_PARAMETER_SPECIFIC_FIELD( aidlParam, DynamicsProcessing, dynamicsProcessing, aidlParam, DynamicsProcessing, dynamicsProcessing, Loading
media/libeffects/dynamicsproc/aidl/DynamicsProcessing.cpp +30 −4 Original line number Original line Diff line number Diff line Loading @@ -59,8 +59,34 @@ extern "C" binder_exception_t queryEffect(const AudioUuid* in_impl_uuid, Descrip namespace aidl::android::hardware::audio::effect { namespace aidl::android::hardware::audio::effect { const std::string DynamicsProcessingImpl::kEffectName = "DynamicsProcessing"; const std::string DynamicsProcessingImpl::kEffectName = "DynamicsProcessing"; const DynamicsProcessing::Capability DynamicsProcessingImpl::kCapability = {.minCutOffFreq = 220, .maxCutOffFreq = 20000}; const DynamicsProcessing::EqBandConfig DynamicsProcessingImpl::kEqBandConfigMin = DynamicsProcessing::EqBandConfig({.channel = 0, .band = 0, .enable = false, .cutoffFrequencyHz = 220, .gainDb = std::numeric_limits<float>::min()}); const DynamicsProcessing::EqBandConfig DynamicsProcessingImpl::kEqBandConfigMax = DynamicsProcessing::EqBandConfig({.channel = std::numeric_limits<int>::max(), .band = std::numeric_limits<int>::max(), .enable = true, .cutoffFrequencyHz = 20000, .gainDb = std::numeric_limits<float>::max()}); const Range::DynamicsProcessingRange DynamicsProcessingImpl::kPreEqBandRange = { .min = DynamicsProcessing::make<DynamicsProcessing::preEqBand>( {DynamicsProcessingImpl::kEqBandConfigMin}), .max = DynamicsProcessing::make<DynamicsProcessing::preEqBand>( {DynamicsProcessingImpl::kEqBandConfigMax})}; const Range::DynamicsProcessingRange DynamicsProcessingImpl::kPostEqBandRange = { .min = DynamicsProcessing::make<DynamicsProcessing::postEqBand>( {DynamicsProcessingImpl::kEqBandConfigMin}), .max = DynamicsProcessing::make<DynamicsProcessing::postEqBand>( {DynamicsProcessingImpl::kEqBandConfigMax})}; const Range DynamicsProcessingImpl::kRange = Range::make<Range::dynamicsProcessing>({DynamicsProcessingImpl::kPreEqBandRange}); const Capability DynamicsProcessingImpl::kCapability = {.range = {DynamicsProcessingImpl::kRange}}; const Descriptor DynamicsProcessingImpl::kDescriptor = { const Descriptor DynamicsProcessingImpl::kDescriptor = { .common = {.id = {.type = kDynamicsProcessingTypeUUID, .common = {.id = {.type = kDynamicsProcessingTypeUUID, .uuid = kDynamicsProcessingImplUUID, .uuid = kDynamicsProcessingImplUUID, Loading @@ -70,8 +96,7 @@ const Descriptor DynamicsProcessingImpl::kDescriptor = { .volume = Flags::Volume::CTRL}, .volume = Flags::Volume::CTRL}, .name = DynamicsProcessingImpl::kEffectName, .name = DynamicsProcessingImpl::kEffectName, .implementor = "The Android Open Source Project"}, .implementor = "The Android Open Source Project"}, .capability = Capability::make<Capability::dynamicsProcessing>( .capability = DynamicsProcessingImpl::kCapability}; DynamicsProcessingImpl::kCapability)}; ndk::ScopedAStatus DynamicsProcessingImpl::open(const Parameter::Common& common, ndk::ScopedAStatus DynamicsProcessingImpl::open(const Parameter::Common& common, const std::optional<Parameter::Specific>& specific, const std::optional<Parameter::Specific>& specific, Loading Loading @@ -138,6 +163,7 @@ ndk::ScopedAStatus DynamicsProcessingImpl::setParameterSpecific( RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext"); RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext"); auto& param = specific.get<Parameter::Specific::dynamicsProcessing>(); auto& param = specific.get<Parameter::Specific::dynamicsProcessing>(); // TODO: check range here, dynamicsProcessing need customized method for nested parameters. auto tag = param.getTag(); auto tag = param.getTag(); switch (tag) { switch (tag) { Loading
media/libeffects/dynamicsproc/aidl/DynamicsProcessing.h +6 −1 Original line number Original line Diff line number Diff line Loading @@ -28,7 +28,7 @@ class DynamicsProcessingImpl final : public EffectImpl { public: public: static const std::string kEffectName; static const std::string kEffectName; static const Descriptor kDescriptor; static const Descriptor kDescriptor; static const DynamicsProcessing::Capability kCapability; static const Capability kCapability; DynamicsProcessingImpl() { LOG(DEBUG) << __func__; } DynamicsProcessingImpl() { LOG(DEBUG) << __func__; } ~DynamicsProcessingImpl() { ~DynamicsProcessingImpl() { Loading @@ -52,6 +52,11 @@ class DynamicsProcessingImpl final : public EffectImpl { std::string getEffectName() override { return kEffectName; } std::string getEffectName() override { return kEffectName; } private: private: static const DynamicsProcessing::EqBandConfig kEqBandConfigMin; static const DynamicsProcessing::EqBandConfig kEqBandConfigMax; static const Range::DynamicsProcessingRange kPreEqBandRange; static const Range::DynamicsProcessingRange kPostEqBandRange; static const Range kRange; std::shared_ptr<DynamicsProcessingContext> mContext; std::shared_ptr<DynamicsProcessingContext> mContext; ndk::ScopedAStatus getParameterDynamicsProcessing(const DynamicsProcessing::Tag& tag, ndk::ScopedAStatus getParameterDynamicsProcessing(const DynamicsProcessing::Tag& tag, Parameter::Specific* specific); Parameter::Specific* specific); Loading
media/libeffects/dynamicsproc/aidl/DynamicsProcessingContext.cpp +5 −11 Original line number Original line Diff line number Diff line Loading @@ -420,24 +420,18 @@ bool DynamicsProcessingContext::validateEngineConfig( validateStageEnablement(engine.postEqStage) && validateStageEnablement(engine.mbcStage); validateStageEnablement(engine.postEqStage) && validateStageEnablement(engine.mbcStage); } } inline bool DynamicsProcessingContext::validateCutoffFrequency(float freq) { return freq >= DynamicsProcessingImpl::kCapability.minCutOffFreq && freq <= DynamicsProcessingImpl::kCapability.maxCutOffFreq; } bool DynamicsProcessingContext::validateEqBandConfig(const DynamicsProcessing::EqBandConfig& band, bool DynamicsProcessingContext::validateEqBandConfig(const DynamicsProcessing::EqBandConfig& band, int maxChannel, int maxBand) { int maxChannel, int maxBand) { return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) && return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand); validateCutoffFrequency(band.cutoffFrequencyHz); } } bool DynamicsProcessingContext::validateMbcBandConfig(const DynamicsProcessing::MbcBandConfig& band, bool DynamicsProcessingContext::validateMbcBandConfig(const DynamicsProcessing::MbcBandConfig& band, int maxChannel, int maxBand) { int maxChannel, int maxBand) { return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) && return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) && validateCutoffFrequency(band.cutoffFrequencyHz) && validateTime(band.attackTimeMs) && validateTime(band.attackTimeMs) && validateTime(band.releaseTimeMs) && validateTime(band.releaseTimeMs) && validateRatio(band.ratio) && validateRatio(band.ratio) && validateBandDb(band.thresholdDb) && validateBandDb(band.thresholdDb) && validateBandDb(band.kneeWidthDb) && validateBandDb(band.kneeWidthDb) && validateBandDb(band.noiseGateThresholdDb) && validateBandDb(band.noiseGateThresholdDb) && validateRatio(band.expanderRatio); validateRatio(band.expanderRatio); } } bool DynamicsProcessingContext::validateLimiterConfig( bool DynamicsProcessingContext::validateLimiterConfig( Loading