AIDL libaudiohal: adding EffectHalAidl implementation

Bug: 258124419
Test: Build, AIDL not enabled in libaudiohal yet.
Change-Id: I887076b0a54fb9c9153e964b53c91b26057b62a7
diff --git a/media/libaudiohal/impl/EffectHalAidl.cpp b/media/libaudiohal/impl/EffectHalAidl.cpp
index daa68a1..3346459 100644
--- a/media/libaudiohal/impl/EffectHalAidl.cpp
+++ b/media/libaudiohal/impl/EffectHalAidl.cpp
@@ -25,25 +25,36 @@
 #include <mediautils/TimeCheck.h>
 #include <utils/Log.h>
 
+#include <system/audio_effects/effect_aec.h>
+#include <system/audio_effects/effect_downmix.h>
+#include <system/audio_effects/effect_dynamicsprocessing.h>
+#include <system/audio_effects/effect_hapticgenerator.h>
+#include <system/audio_effects/effect_ns.h>
+#include <system/audio_effects/effect_spatializer.h>
+#include <system/audio_effects/effect_visualizer.h>
+
 #include "EffectHalAidl.h"
 
 #include <system/audio.h>
-
 #include <aidl/android/hardware/audio/effect/IEffect.h>
 
 using ::aidl::android::aidl_utils::statusTFromBinderStatus;
 using ::aidl::android::hardware::audio::effect::CommandId;
 using ::aidl::android::hardware::audio::effect::Descriptor;
 using ::aidl::android::hardware::audio::effect::IEffect;
-using ::aidl::android::hardware::audio::effect::State;
 using ::aidl::android::hardware::audio::effect::Parameter;
 
 namespace android {
 namespace effect {
 
 EffectHalAidl::EffectHalAidl(const std::shared_ptr<IEffect>& effect, uint64_t effectId,
-                             int32_t sessionId, int32_t ioId)
-    : mEffectId(effectId), mSessionId(sessionId), mIoId(ioId), mEffect(effect) {}
+                             int32_t sessionId, int32_t ioId, const Descriptor& desc)
+    : EffectConversionHelperAidl(effect, sessionId, ioId, desc.common.id.type),
+      mEffectId(effectId),
+      mSessionId(sessionId),
+      mIoId(ioId),
+      mEffect(effect),
+      mDesc(desc) {}
 
 EffectHalAidl::~EffectHalAidl() {}
 
@@ -65,7 +76,7 @@
 
 status_t EffectHalAidl::process() {
     ALOGW("%s not implemented yet", __func__);
-    // write to input FMQ here?
+    // write to input FMQ here, and wait for statusMQ STATUS_OK
     return OK;
 }
 
@@ -75,138 +86,9 @@
     return OK;
 }
 
-status_t EffectHalAidl::handleSetConfig(uint32_t cmdCode, uint32_t cmdSize, void* pCmdData,
-                                        uint32_t* replySize, void* pReplyData) {
-    if (pCmdData == NULL || cmdSize != sizeof(effect_config_t) || replySize == NULL ||
-        *replySize != sizeof(int32_t) || pReplyData == NULL) {
-        ALOGE("%s parameter error code %u", __func__, cmdCode);
-        return BAD_VALUE;
-    }
-
-    *static_cast<int32_t*>(pReplyData) = FAILED_TRANSACTION;
-    memcpy(&mConfig, pCmdData, cmdSize);
-
-    State state;
-    RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->getState(&state)));
-    // effect not open yet, save settings locally
-    if (state != State::INIT) {
-        effect_config_t* legacyConfig = static_cast<effect_config_t*>(pCmdData);
-        // already open, apply latest settings
-        Parameter aidlParam;
-        Parameter::Common aidlCommon;
-        aidlCommon.input.base =
-                VALUE_OR_RETURN_STATUS(::aidl::android::legacy2aidl_AudioConfigBase_buffer_config_t(
-                        legacyConfig->inputCfg, true /* isInput */));
-        aidlCommon.output.base =
-                VALUE_OR_RETURN_STATUS(::aidl::android::legacy2aidl_AudioConfigBase_buffer_config_t(
-                        legacyConfig->outputCfg, false /* isInput */));
-        aidlCommon.session = mSessionId;
-        aidlCommon.ioHandle = mIoId;
-        Parameter::Id id;
-        id.set<Parameter::Id::commonTag>(Parameter::common);
-        aidlParam.set<Parameter::common>(aidlCommon);
-        RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->setParameter(aidlParam)));
-    }
-    *(int*)pReplyData = 0;
-    *static_cast<int32_t*>(pReplyData) = OK;
-    return OK;
-}
-
-status_t EffectHalAidl::handleGetConfig(uint32_t cmdCode, uint32_t cmdSize, void* pCmdData,
-                                        uint32_t* replySize, void* pReplyData) {
-    if (pCmdData == NULL || cmdSize == 0 || replySize == NULL ||
-        *replySize != sizeof(effect_config_t) || pReplyData == NULL) {
-        ALOGE("%s parameter error with cmdCode %d", __func__, cmdCode);
-        return BAD_VALUE;
-    }
-
-    *(effect_config_t*)pReplyData = mConfig;
-    return OK;
-}
-
-status_t EffectHalAidl::handleSetParameter(uint32_t cmdCode, uint32_t cmdSize, void* pCmdData,
-                                           uint32_t* replySize, void* pReplyData) {
-    ALOGW("%s not implemented yet", __func__);
-    if (pCmdData == NULL || cmdSize == 0 || replySize == NULL ||
-        *replySize != sizeof(effect_config_t) || pReplyData == NULL) {
-        ALOGE("%s parameter error with cmdCode %d", __func__, cmdCode);
-        return BAD_VALUE;
-    }
-    return OK;
-}
-
-status_t EffectHalAidl::handleGetParameter(uint32_t cmdCode, uint32_t cmdSize, void* pCmdData,
-                                           uint32_t* replySize, void* pReplyData) {
-    ALOGW("%s not implemented yet", __func__);
-    if (pCmdData == NULL || cmdSize == 0 || replySize == NULL ||
-        *replySize != sizeof(effect_config_t) || pReplyData == NULL) {
-        ALOGE("%s parameter error with cmdCode %d", __func__, cmdCode);
-        return BAD_VALUE;
-    }
-    return OK;
-}
-
 status_t EffectHalAidl::command(uint32_t cmdCode, uint32_t cmdSize, void* pCmdData,
                                 uint32_t* replySize, void* pReplyData) {
-    ALOGW("%s code %d not implemented yet", __func__, cmdCode);
-    ::ndk::ScopedAStatus status;
-    switch (cmdCode) {
-        case EFFECT_CMD_INIT: {
-            // open with default effect_config_t (convert to Parameter.Common)
-            IEffect::OpenEffectReturn ret;
-            Parameter::Common common;
-            RETURN_STATUS_IF_ERROR(
-                    statusTFromBinderStatus(mEffect->open(common, std::nullopt, &ret)));
-            return OK;
-        }
-        case EFFECT_CMD_SET_CONFIG:
-            return handleSetConfig(cmdCode, cmdSize, pCmdData, replySize, pReplyData);
-        case EFFECT_CMD_GET_CONFIG:
-            return handleGetConfig(cmdCode, cmdSize, pCmdData, replySize, pReplyData);
-        case EFFECT_CMD_RESET:
-            return mEffect->command(CommandId::RESET).getStatus();
-        case EFFECT_CMD_ENABLE:
-            return mEffect->command(CommandId::START).getStatus();
-        case EFFECT_CMD_DISABLE:
-            return mEffect->command(CommandId::STOP).getStatus();
-        case EFFECT_CMD_SET_PARAM:
-            return handleSetParameter(cmdCode, cmdSize, pCmdData, replySize, pReplyData);
-        case EFFECT_CMD_SET_PARAM_DEFERRED:
-        case EFFECT_CMD_SET_PARAM_COMMIT:
-            // TODO
-            return OK;
-        case EFFECT_CMD_GET_PARAM:
-            return handleGetParameter(cmdCode, cmdSize, pCmdData, replySize, pReplyData);
-        case EFFECT_CMD_SET_DEVICE:
-            return OK;
-        case EFFECT_CMD_SET_VOLUME:
-            return OK;
-        case EFFECT_CMD_SET_AUDIO_MODE:
-            return OK;
-        case EFFECT_CMD_SET_CONFIG_REVERSE:
-            return OK;
-        case EFFECT_CMD_SET_INPUT_DEVICE:
-            return OK;
-        case EFFECT_CMD_GET_CONFIG_REVERSE:
-            return OK;
-        case EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS:
-            return OK;
-        case EFFECT_CMD_GET_FEATURE_CONFIG:
-            return OK;
-        case EFFECT_CMD_SET_FEATURE_CONFIG:
-            return OK;
-        case EFFECT_CMD_SET_AUDIO_SOURCE:
-            return OK;
-        case EFFECT_CMD_OFFLOAD:
-            return OK;
-        case EFFECT_CMD_DUMP:
-            return OK;
-        case EFFECT_CMD_FIRST_PROPRIETARY:
-            return OK;
-        default:
-            return INVALID_OPERATION;
-    }
-    return INVALID_OPERATION;
+    return handleCommand(cmdCode, cmdSize, pCmdData, replySize, pReplyData);
 }
 
 status_t EffectHalAidl::getDescriptor(effect_descriptor_t* pDescriptor) {
@@ -223,9 +105,8 @@
 }
 
 status_t EffectHalAidl::close() {
-    auto ret = mEffect->close();
-    ALOGI("%s %s", __func__, ret.getMessage());
-    return ret.getStatus();
+    RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->close()));
+    return OK;
 }
 
 status_t EffectHalAidl::dump(int fd) {