Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09b92c34 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "audiohal: Support 64-bit audioflinger with 32-bit hal. Part II"

parents 111de3a9 ed01be52
Loading
Loading
Loading
Loading
+51 −0
Original line number Diff line number Diff line
@@ -73,12 +73,33 @@ void EffectHalHidl::effectBufferConfigFromHal(
    config->mask = EffectConfigParameters(halConfig.mask);
}

// static
void EffectHalHidl::effectBufferConfigToHal(
        const EffectBufferConfig& config, buffer_config_t* halConfig) {
    halConfig->buffer.frameCount = 0;
    halConfig->buffer.raw = NULL;
    halConfig->samplingRate = config.samplingRateHz;
    halConfig->channels = static_cast<uint32_t>(config.channels);
    halConfig->bufferProvider.cookie = NULL;
    halConfig->bufferProvider.getBuffer = NULL;
    halConfig->bufferProvider.releaseBuffer = NULL;
    halConfig->format = static_cast<uint8_t>(config.format);
    halConfig->accessMode = static_cast<uint8_t>(config.accessMode);
    halConfig->mask = static_cast<uint8_t>(config.mask);
}

// static
void EffectHalHidl::effectConfigFromHal(const effect_config_t& halConfig, EffectConfig* config) {
    effectBufferConfigFromHal(halConfig.inputCfg, &config->inputCfg);
    effectBufferConfigFromHal(halConfig.outputCfg, &config->outputCfg);
}

// static
void EffectHalHidl::effectConfigToHal(const EffectConfig& config, effect_config_t* halConfig) {
    effectBufferConfigToHal(config.inputCfg, &halConfig->inputCfg);
    effectBufferConfigToHal(config.outputCfg, &halConfig->outputCfg);
}

// static
status_t EffectHalHidl::analyzeResult(const Result& result) {
    switch (result) {
@@ -193,6 +214,8 @@ status_t EffectHalHidl::command(uint32_t cmdCode, uint32_t cmdSize, void *pCmdDa
    // Special cases.
    if (cmdCode == EFFECT_CMD_SET_CONFIG || cmdCode == EFFECT_CMD_SET_CONFIG_REVERSE) {
        return setConfigImpl(cmdCode, cmdSize, pCmdData, replySize, pReplyData);
    } else if (cmdCode == EFFECT_CMD_GET_CONFIG || cmdCode == EFFECT_CMD_GET_CONFIG_REVERSE) {
        return getConfigImpl(cmdCode, replySize, pReplyData);
    }

    // Common case.
@@ -235,6 +258,34 @@ status_t EffectHalHidl::close() {
    return ret.isOk() ? analyzeResult(ret) : FAILED_TRANSACTION;
}

status_t EffectHalHidl::getConfigImpl(
        uint32_t cmdCode, uint32_t *replySize, void *pReplyData) {
    if (replySize == NULL || *replySize != sizeof(effect_config_t) || pReplyData == NULL) {
        return BAD_VALUE;
    }
    status_t result = FAILED_TRANSACTION;
    Return<void> ret;
    if (cmdCode == EFFECT_CMD_GET_CONFIG) {
        ret = mEffect->getConfig([&] (Result r, const EffectConfig &hidlConfig) {
            result = analyzeResult(r);
            if (r == Result::OK) {
                effectConfigToHal(hidlConfig, static_cast<effect_config_t*>(pReplyData));
            }
        });
    } else {
        ret = mEffect->getConfigReverse([&] (Result r, const EffectConfig &hidlConfig) {
            result = analyzeResult(r);
            if (r == Result::OK) {
                effectConfigToHal(hidlConfig, static_cast<effect_config_t*>(pReplyData));
            }
        });
    }
    if (!ret.isOk()) {
        result = FAILED_TRANSACTION;
    }
    return result;
}

status_t EffectHalHidl::setConfigImpl(
        uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t *replySize, void *pReplyData) {
    if (pCmdData == NULL || cmdSize != sizeof(effect_config_t) ||
+4 −0
Original line number Diff line number Diff line
@@ -79,7 +79,10 @@ class EffectHalHidl : public EffectHalInterface
    static status_t analyzeResult(const hardware::audio::effect::V2_0::Result& result);
    static void effectBufferConfigFromHal(
            const buffer_config_t& halConfig, EffectBufferConfig* config);
    static void effectBufferConfigToHal(
            const EffectBufferConfig& config, buffer_config_t* halConfig);
    static void effectConfigFromHal(const effect_config_t& halConfig, EffectConfig* config);
    static void effectConfigToHal(const EffectConfig& config, effect_config_t* halConfig);

    // Can not be constructed directly by clients.
    EffectHalHidl(const sp<IEffect>& effect, uint64_t effectId);
@@ -87,6 +90,7 @@ class EffectHalHidl : public EffectHalInterface
    // The destructor automatically releases the effect.
    virtual ~EffectHalHidl();

    status_t getConfigImpl(uint32_t cmdCode, uint32_t *replySize, void *pReplyData);
    status_t prepareForProcessing();
    status_t processImpl(uint32_t mqFlag);
    status_t setConfigImpl(