From 0a981d36cf96307d837a2a8167dfbdfb91b55d4e Mon Sep 17 00:00:00 2001 From: Shraddha Basantwani Date: Wed, 24 Jul 2024 08:42:50 +0000 Subject: [PATCH] Audio Effect : Add base implementation of commandImpl method Removing code repeatation and moving this method to base class. Effect implementations can override enable, disable and reset methods. Bug: 305866207 Test: atest --test-mapping hardware/interfaces/audio/aidl/vts:presubmit Change-Id: Iceb7ad51185d6f6bd2b6d70a5a1dd51e7bd37276 --- audio/aidl/default/EffectContext.cpp | 13 ++++++++++ audio/aidl/default/EffectImpl.cpp | 26 ++++++++++++++++--- .../include/effect-impl/EffectContext.h | 4 +++ audio/aidl/vts/EffectHelper.h | 2 +- 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/audio/aidl/default/EffectContext.cpp b/audio/aidl/default/EffectContext.cpp index 7b8cfb13ae..553917718c 100644 --- a/audio/aidl/default/EffectContext.cpp +++ b/audio/aidl/default/EffectContext.cpp @@ -242,4 +242,17 @@ RetCode EffectContext::notifyDataMqUpdate() { LOG(VERBOSE) << __func__ << " : signal client for reopen"; return RetCode::SUCCESS; } + +RetCode EffectContext::enable() { + return RetCode::SUCCESS; +} + +RetCode EffectContext::disable() { + return RetCode::SUCCESS; +} + +RetCode EffectContext::reset() { + return RetCode::SUCCESS; +} + } // namespace aidl::android::hardware::audio::effect diff --git a/audio/aidl/default/EffectImpl.cpp b/audio/aidl/default/EffectImpl.cpp index 7192d97c37..3e61335da8 100644 --- a/audio/aidl/default/EffectImpl.cpp +++ b/audio/aidl/default/EffectImpl.cpp @@ -246,7 +246,6 @@ ndk::ScopedAStatus EffectImpl::command(CommandId command) { startThread(); break; case CommandId::STOP: - case CommandId::RESET: RETURN_OK_IF(mState == State::IDLE); mState = State::IDLE; RETURN_IF(notifyEventFlag(mDataMqNotEmptyEf) != RetCode::SUCCESS, EX_ILLEGAL_STATE, @@ -254,6 +253,13 @@ ndk::ScopedAStatus EffectImpl::command(CommandId command) { stopThread(); RETURN_IF_ASTATUS_NOT_OK(commandImpl(command), "commandImplFailed"); break; + case CommandId::RESET: + mState = State::IDLE; + RETURN_IF(notifyEventFlag(mDataMqNotEmptyEf) != RetCode::SUCCESS, EX_ILLEGAL_STATE, + "notifyEventFlagNotEmptyFailed"); + stopThread(); + RETURN_IF_ASTATUS_NOT_OK(commandImpl(command), "commandImplFailed"); + break; default: LOG(ERROR) << getEffectNameWithVersion() << __func__ << " instance still processing"; return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, @@ -266,8 +272,22 @@ ndk::ScopedAStatus EffectImpl::command(CommandId command) { ndk::ScopedAStatus EffectImpl::commandImpl(CommandId command) { RETURN_IF(!mImplContext, EX_NULL_POINTER, "nullContext"); - if (command == CommandId::RESET) { - mImplContext->resetBuffer(); + switch (command) { + case CommandId::START: + mImplContext->enable(); + break; + case CommandId::STOP: + mImplContext->disable(); + break; + case CommandId::RESET: + mImplContext->disable(); + mImplContext->reset(); + mImplContext->resetBuffer(); + break; + default: + LOG(ERROR) << __func__ << " commandId " << toString(command) << " not supported"; + return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, + "commandIdNotSupported"); } return ndk::ScopedAStatus::ok(); } diff --git a/audio/aidl/default/include/effect-impl/EffectContext.h b/audio/aidl/default/include/effect-impl/EffectContext.h index 275378e9b8..02a4caa5eb 100644 --- a/audio/aidl/default/include/effect-impl/EffectContext.h +++ b/audio/aidl/default/include/effect-impl/EffectContext.h @@ -82,6 +82,10 @@ class EffectContext { virtual ::android::hardware::EventFlag* getStatusEventFlag(); + virtual RetCode enable(); + virtual RetCode disable(); + virtual RetCode reset(); + protected: int mVersion = 0; size_t mInputFrameSize = 0; diff --git a/audio/aidl/vts/EffectHelper.h b/audio/aidl/vts/EffectHelper.h index cad1195b32..0fa170f989 100644 --- a/audio/aidl/vts/EffectHelper.h +++ b/audio/aidl/vts/EffectHelper.h @@ -397,10 +397,10 @@ class EffectHelper { outputBuffer.size(), outputBuffer)); } + // Disable the process ASSERT_NO_FATAL_FAILURE(command(effect, CommandId::STOP)); EXPECT_NO_FATAL_FAILURE(EffectHelper::readFromFmq(statusMQ, 0, outputMQ, 0, outputBuffer)); - // Disable the process ASSERT_NO_FATAL_FAILURE(command(effect, CommandId::RESET)); }