Loading audio/aidl/TEST_MAPPING +3 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ { "name": "VtsHalLoudnessEnhancerTargetTest" }, { "name": "VtsHalVirtualizerTargetTest" }, { "name": "VtsHalVisualizerTargetTest" } Loading audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Virtualizer.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ package android.hardware.audio.effect; union Virtualizer { android.hardware.audio.effect.VendorExtension vendor; int strengthPm; const int MIN_PER_MILLE_STRENGTH = 0; const int MAX_PER_MILLE_STRENGTH = 1000; @VintfStability union Id { int vendorExtensionTag; Loading audio/aidl/android/hardware/audio/effect/Virtualizer.aidl +10 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,16 @@ union Virtualizer { boolean strengthSupported; } /** * Minimal possible per mille strength. */ const int MIN_PER_MILLE_STRENGTH = 0; /** * Maximum possible per mille strength. */ const int MAX_PER_MILLE_STRENGTH = 1000; /** * The per mille strength of the virtualizer effect. * Loading audio/aidl/default/virtualizer/VirtualizerSw.cpp +51 −5 Original line number Diff line number Diff line Loading @@ -60,7 +60,9 @@ extern "C" binder_exception_t queryEffect(const AudioUuid* in_impl_uuid, Descrip namespace aidl::android::hardware::audio::effect { const std::string VirtualizerSw::kEffectName = "VirtualizerSw"; const Virtualizer::Capability VirtualizerSw::kCapability; const bool VirtualizerSw::kStrengthSupported = true; const Virtualizer::Capability VirtualizerSw::kCapability = {.strengthSupported = kStrengthSupported}; const Descriptor VirtualizerSw::kDescriptor = { .common = {.id = {.type = kVirtualizerTypeUUID, .uuid = kVirtualizerSwImplUUID, Loading @@ -82,16 +84,60 @@ ndk::ScopedAStatus VirtualizerSw::setParameterSpecific(const Parameter::Specific RETURN_IF(Parameter::Specific::virtualizer != specific.getTag(), EX_ILLEGAL_ARGUMENT, "EffectNotSupported"); mSpecificParam = specific.get<Parameter::Specific::virtualizer>(); LOG(DEBUG) << __func__ << " success with: " << specific.toString(); auto& vrParam = specific.get<Parameter::Specific::virtualizer>(); auto tag = vrParam.getTag(); switch (tag) { case Virtualizer::strengthPm: { RETURN_IF(!kStrengthSupported, EX_ILLEGAL_ARGUMENT, "SettingStrengthNotSupported"); RETURN_IF(mContext->setVrStrength(vrParam.get<Virtualizer::strengthPm>()) != RetCode::SUCCESS, EX_ILLEGAL_ARGUMENT, "strengthPmNotSupported"); return ndk::ScopedAStatus::ok(); } default: { LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "VirtualizerTagNotSupported"); } } } ndk::ScopedAStatus VirtualizerSw::getParameterSpecific(const Parameter::Id& id, Parameter::Specific* specific) { auto tag = id.getTag(); RETURN_IF(Parameter::Id::virtualizerTag != tag, EX_ILLEGAL_ARGUMENT, "wrongIdTag"); specific->set<Parameter::Specific::virtualizer>(mSpecificParam); auto vrId = id.get<Parameter::Id::virtualizerTag>(); auto vrIdTag = vrId.getTag(); switch (vrIdTag) { case Virtualizer::Id::commonTag: return getParameterVirtualizer(vrId.get<Virtualizer::Id::commonTag>(), specific); default: LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "VirtualizerTagNotSupported"); } } ndk::ScopedAStatus VirtualizerSw::getParameterVirtualizer(const Virtualizer::Tag& tag, Parameter::Specific* specific) { RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext"); Virtualizer vrParam; switch (tag) { case Virtualizer::strengthPm: { vrParam.set<Virtualizer::strengthPm>(mContext->getVrStrength()); break; } default: { LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "VirtualizerTagNotSupported"); } } specific->set<Parameter::Specific::virtualizer>(vrParam); return ndk::ScopedAStatus::ok(); } Loading audio/aidl/default/virtualizer/VirtualizerSw.h +18 −3 Original line number Diff line number Diff line Loading @@ -32,12 +32,26 @@ class VirtualizerSwContext final : public EffectContext { : EffectContext(statusDepth, common) { LOG(DEBUG) << __func__; } // TODO: add specific context here RetCode setVrStrength(int strength) { if (strength < Virtualizer::MIN_PER_MILLE_STRENGTH || strength > Virtualizer::MAX_PER_MILLE_STRENGTH) { LOG(ERROR) << __func__ << " invalid strength " << strength; return RetCode::ERROR_ILLEGAL_PARAMETER; } // TODO : Add implementation to apply new strength mStrength = strength; return RetCode::SUCCESS; } int getVrStrength() const { return mStrength; } private: int mStrength; }; class VirtualizerSw final : public EffectImpl { public: static const std::string kEffectName; static const bool kStrengthSupported; static const Virtualizer::Capability kCapability; static const Descriptor kDescriptor; VirtualizerSw() { LOG(DEBUG) << __func__; } Loading @@ -60,7 +74,8 @@ class VirtualizerSw final : public EffectImpl { private: std::shared_ptr<VirtualizerSwContext> mContext; /* parameters */ Virtualizer mSpecificParam; ndk::ScopedAStatus getParameterVirtualizer(const Virtualizer::Tag& tag, Parameter::Specific* specific); }; } // namespace aidl::android::hardware::audio::effect Loading
audio/aidl/TEST_MAPPING +3 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ { "name": "VtsHalLoudnessEnhancerTargetTest" }, { "name": "VtsHalVirtualizerTargetTest" }, { "name": "VtsHalVisualizerTargetTest" } Loading
audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Virtualizer.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ package android.hardware.audio.effect; union Virtualizer { android.hardware.audio.effect.VendorExtension vendor; int strengthPm; const int MIN_PER_MILLE_STRENGTH = 0; const int MAX_PER_MILLE_STRENGTH = 1000; @VintfStability union Id { int vendorExtensionTag; Loading
audio/aidl/android/hardware/audio/effect/Virtualizer.aidl +10 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,16 @@ union Virtualizer { boolean strengthSupported; } /** * Minimal possible per mille strength. */ const int MIN_PER_MILLE_STRENGTH = 0; /** * Maximum possible per mille strength. */ const int MAX_PER_MILLE_STRENGTH = 1000; /** * The per mille strength of the virtualizer effect. * Loading
audio/aidl/default/virtualizer/VirtualizerSw.cpp +51 −5 Original line number Diff line number Diff line Loading @@ -60,7 +60,9 @@ extern "C" binder_exception_t queryEffect(const AudioUuid* in_impl_uuid, Descrip namespace aidl::android::hardware::audio::effect { const std::string VirtualizerSw::kEffectName = "VirtualizerSw"; const Virtualizer::Capability VirtualizerSw::kCapability; const bool VirtualizerSw::kStrengthSupported = true; const Virtualizer::Capability VirtualizerSw::kCapability = {.strengthSupported = kStrengthSupported}; const Descriptor VirtualizerSw::kDescriptor = { .common = {.id = {.type = kVirtualizerTypeUUID, .uuid = kVirtualizerSwImplUUID, Loading @@ -82,16 +84,60 @@ ndk::ScopedAStatus VirtualizerSw::setParameterSpecific(const Parameter::Specific RETURN_IF(Parameter::Specific::virtualizer != specific.getTag(), EX_ILLEGAL_ARGUMENT, "EffectNotSupported"); mSpecificParam = specific.get<Parameter::Specific::virtualizer>(); LOG(DEBUG) << __func__ << " success with: " << specific.toString(); auto& vrParam = specific.get<Parameter::Specific::virtualizer>(); auto tag = vrParam.getTag(); switch (tag) { case Virtualizer::strengthPm: { RETURN_IF(!kStrengthSupported, EX_ILLEGAL_ARGUMENT, "SettingStrengthNotSupported"); RETURN_IF(mContext->setVrStrength(vrParam.get<Virtualizer::strengthPm>()) != RetCode::SUCCESS, EX_ILLEGAL_ARGUMENT, "strengthPmNotSupported"); return ndk::ScopedAStatus::ok(); } default: { LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "VirtualizerTagNotSupported"); } } } ndk::ScopedAStatus VirtualizerSw::getParameterSpecific(const Parameter::Id& id, Parameter::Specific* specific) { auto tag = id.getTag(); RETURN_IF(Parameter::Id::virtualizerTag != tag, EX_ILLEGAL_ARGUMENT, "wrongIdTag"); specific->set<Parameter::Specific::virtualizer>(mSpecificParam); auto vrId = id.get<Parameter::Id::virtualizerTag>(); auto vrIdTag = vrId.getTag(); switch (vrIdTag) { case Virtualizer::Id::commonTag: return getParameterVirtualizer(vrId.get<Virtualizer::Id::commonTag>(), specific); default: LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "VirtualizerTagNotSupported"); } } ndk::ScopedAStatus VirtualizerSw::getParameterVirtualizer(const Virtualizer::Tag& tag, Parameter::Specific* specific) { RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext"); Virtualizer vrParam; switch (tag) { case Virtualizer::strengthPm: { vrParam.set<Virtualizer::strengthPm>(mContext->getVrStrength()); break; } default: { LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag); return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "VirtualizerTagNotSupported"); } } specific->set<Parameter::Specific::virtualizer>(vrParam); return ndk::ScopedAStatus::ok(); } Loading
audio/aidl/default/virtualizer/VirtualizerSw.h +18 −3 Original line number Diff line number Diff line Loading @@ -32,12 +32,26 @@ class VirtualizerSwContext final : public EffectContext { : EffectContext(statusDepth, common) { LOG(DEBUG) << __func__; } // TODO: add specific context here RetCode setVrStrength(int strength) { if (strength < Virtualizer::MIN_PER_MILLE_STRENGTH || strength > Virtualizer::MAX_PER_MILLE_STRENGTH) { LOG(ERROR) << __func__ << " invalid strength " << strength; return RetCode::ERROR_ILLEGAL_PARAMETER; } // TODO : Add implementation to apply new strength mStrength = strength; return RetCode::SUCCESS; } int getVrStrength() const { return mStrength; } private: int mStrength; }; class VirtualizerSw final : public EffectImpl { public: static const std::string kEffectName; static const bool kStrengthSupported; static const Virtualizer::Capability kCapability; static const Descriptor kDescriptor; VirtualizerSw() { LOG(DEBUG) << __func__; } Loading @@ -60,7 +74,8 @@ class VirtualizerSw final : public EffectImpl { private: std::shared_ptr<VirtualizerSwContext> mContext; /* parameters */ Virtualizer mSpecificParam; ndk::ScopedAStatus getParameterVirtualizer(const Virtualizer::Tag& tag, Parameter::Specific* specific); }; } // namespace aidl::android::hardware::audio::effect