Loading media/libaudiohal/EffectHalHidl.cpp +56 −0 Original line number Diff line number Diff line Loading @@ -26,8 +26,12 @@ #include "HidlUtils.h" using ::android::hardware::audio::effect::V2_0::AudioBuffer; using ::android::hardware::audio::effect::V2_0::EffectBufferAccess; using ::android::hardware::audio::effect::V2_0::EffectConfigParameters; using ::android::hardware::audio::effect::V2_0::MessageQueueFlagBits; using ::android::hardware::audio::effect::V2_0::Result; using ::android::hardware::audio::common::V2_0::AudioChannelMask; using ::android::hardware::audio::common::V2_0::AudioFormat; using ::android::hardware::hidl_vec; using ::android::hardware::MQDescriptorSync; using ::android::hardware::Return; Loading Loading @@ -56,6 +60,25 @@ void EffectHalHidl::effectDescriptorToHal( descriptor.implementor.data(), descriptor.implementor.size()); } // TODO(mnaganov): These buffer conversion functions should be shared with Effect wrapper // via HidlUtils. Move them there when hardware/interfaces will get un-frozen again. // static void EffectHalHidl::effectBufferConfigFromHal( const buffer_config_t& halConfig, EffectBufferConfig* config) { config->samplingRateHz = halConfig.samplingRate; config->channels = AudioChannelMask(halConfig.channels); config->format = AudioFormat(halConfig.format); config->accessMode = EffectBufferAccess(halConfig.accessMode); config->mask = EffectConfigParameters(halConfig.mask); } // static void EffectHalHidl::effectConfigFromHal(const effect_config_t& halConfig, EffectConfig* config) { effectBufferConfigFromHal(halConfig.inputCfg, &config->inputCfg); effectBufferConfigFromHal(halConfig.outputCfg, &config->outputCfg); } // static status_t EffectHalHidl::analyzeResult(const Result& result) { switch (result) { Loading Loading @@ -166,6 +189,13 @@ status_t EffectHalHidl::setProcessBuffers() { status_t EffectHalHidl::command(uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t *replySize, void *pReplyData) { if (mEffect == 0) return NO_INIT; // Special cases. if (cmdCode == EFFECT_CMD_SET_CONFIG || cmdCode == EFFECT_CMD_SET_CONFIG_REVERSE) { return setConfigImpl(cmdCode, cmdSize, pCmdData, replySize, pReplyData); } // Common case. hidl_vec<uint8_t> hidlData; if (pCmdData != nullptr && cmdSize > 0) { hidlData.setToExternal(reinterpret_cast<uint8_t*>(pCmdData), cmdSize); Loading Loading @@ -205,4 +235,30 @@ status_t EffectHalHidl::close() { return ret.isOk() ? analyzeResult(ret) : FAILED_TRANSACTION; } 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) || replySize == NULL || *replySize != sizeof(int32_t) || pReplyData == NULL) { return BAD_VALUE; } const effect_config_t *halConfig = static_cast<effect_config_t*>(pCmdData); if (halConfig->inputCfg.bufferProvider.getBuffer != NULL || halConfig->inputCfg.bufferProvider.releaseBuffer != NULL || halConfig->outputCfg.bufferProvider.getBuffer != NULL || halConfig->outputCfg.bufferProvider.releaseBuffer != NULL) { ALOGE("Buffer provider callbacks are not supported"); } EffectConfig hidlConfig; effectConfigFromHal(*halConfig, &hidlConfig); Return<Result> ret = cmdCode == EFFECT_CMD_SET_CONFIG ? mEffect->setConfig(hidlConfig, nullptr, nullptr) : mEffect->setConfigReverse(hidlConfig, nullptr, nullptr); status_t result = FAILED_TRANSACTION; if (ret.isOk()) { result = analyzeResult(ret); *static_cast<int32_t*>(pReplyData) = result; } return result; } } // namespace android media/libaudiohal/EffectHalHidl.h +8 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <fmq/MessageQueue.h> #include <system/audio_effect.h> using ::android::hardware::audio::effect::V2_0::EffectBufferConfig; using ::android::hardware::audio::effect::V2_0::EffectConfig; using ::android::hardware::audio::effect::V2_0::EffectDescriptor; using ::android::hardware::audio::effect::V2_0::IEffect; using ::android::hardware::EventFlag; Loading Loading @@ -75,6 +77,9 @@ class EffectHalHidl : public EffectHalInterface EventFlag* mEfGroup; static status_t analyzeResult(const hardware::audio::effect::V2_0::Result& result); static void effectBufferConfigFromHal( const buffer_config_t& halConfig, EffectBufferConfig* config); static void effectConfigFromHal(const effect_config_t& halConfig, EffectConfig* config); // Can not be constructed directly by clients. EffectHalHidl(const sp<IEffect>& effect, uint64_t effectId); Loading @@ -84,6 +89,9 @@ class EffectHalHidl : public EffectHalInterface status_t prepareForProcessing(); status_t processImpl(uint32_t mqFlag); status_t setConfigImpl( uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t *replySize, void *pReplyData); status_t setProcessBuffers(); }; Loading Loading
media/libaudiohal/EffectHalHidl.cpp +56 −0 Original line number Diff line number Diff line Loading @@ -26,8 +26,12 @@ #include "HidlUtils.h" using ::android::hardware::audio::effect::V2_0::AudioBuffer; using ::android::hardware::audio::effect::V2_0::EffectBufferAccess; using ::android::hardware::audio::effect::V2_0::EffectConfigParameters; using ::android::hardware::audio::effect::V2_0::MessageQueueFlagBits; using ::android::hardware::audio::effect::V2_0::Result; using ::android::hardware::audio::common::V2_0::AudioChannelMask; using ::android::hardware::audio::common::V2_0::AudioFormat; using ::android::hardware::hidl_vec; using ::android::hardware::MQDescriptorSync; using ::android::hardware::Return; Loading Loading @@ -56,6 +60,25 @@ void EffectHalHidl::effectDescriptorToHal( descriptor.implementor.data(), descriptor.implementor.size()); } // TODO(mnaganov): These buffer conversion functions should be shared with Effect wrapper // via HidlUtils. Move them there when hardware/interfaces will get un-frozen again. // static void EffectHalHidl::effectBufferConfigFromHal( const buffer_config_t& halConfig, EffectBufferConfig* config) { config->samplingRateHz = halConfig.samplingRate; config->channels = AudioChannelMask(halConfig.channels); config->format = AudioFormat(halConfig.format); config->accessMode = EffectBufferAccess(halConfig.accessMode); config->mask = EffectConfigParameters(halConfig.mask); } // static void EffectHalHidl::effectConfigFromHal(const effect_config_t& halConfig, EffectConfig* config) { effectBufferConfigFromHal(halConfig.inputCfg, &config->inputCfg); effectBufferConfigFromHal(halConfig.outputCfg, &config->outputCfg); } // static status_t EffectHalHidl::analyzeResult(const Result& result) { switch (result) { Loading Loading @@ -166,6 +189,13 @@ status_t EffectHalHidl::setProcessBuffers() { status_t EffectHalHidl::command(uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t *replySize, void *pReplyData) { if (mEffect == 0) return NO_INIT; // Special cases. if (cmdCode == EFFECT_CMD_SET_CONFIG || cmdCode == EFFECT_CMD_SET_CONFIG_REVERSE) { return setConfigImpl(cmdCode, cmdSize, pCmdData, replySize, pReplyData); } // Common case. hidl_vec<uint8_t> hidlData; if (pCmdData != nullptr && cmdSize > 0) { hidlData.setToExternal(reinterpret_cast<uint8_t*>(pCmdData), cmdSize); Loading Loading @@ -205,4 +235,30 @@ status_t EffectHalHidl::close() { return ret.isOk() ? analyzeResult(ret) : FAILED_TRANSACTION; } 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) || replySize == NULL || *replySize != sizeof(int32_t) || pReplyData == NULL) { return BAD_VALUE; } const effect_config_t *halConfig = static_cast<effect_config_t*>(pCmdData); if (halConfig->inputCfg.bufferProvider.getBuffer != NULL || halConfig->inputCfg.bufferProvider.releaseBuffer != NULL || halConfig->outputCfg.bufferProvider.getBuffer != NULL || halConfig->outputCfg.bufferProvider.releaseBuffer != NULL) { ALOGE("Buffer provider callbacks are not supported"); } EffectConfig hidlConfig; effectConfigFromHal(*halConfig, &hidlConfig); Return<Result> ret = cmdCode == EFFECT_CMD_SET_CONFIG ? mEffect->setConfig(hidlConfig, nullptr, nullptr) : mEffect->setConfigReverse(hidlConfig, nullptr, nullptr); status_t result = FAILED_TRANSACTION; if (ret.isOk()) { result = analyzeResult(ret); *static_cast<int32_t*>(pReplyData) = result; } return result; } } // namespace android
media/libaudiohal/EffectHalHidl.h +8 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <fmq/MessageQueue.h> #include <system/audio_effect.h> using ::android::hardware::audio::effect::V2_0::EffectBufferConfig; using ::android::hardware::audio::effect::V2_0::EffectConfig; using ::android::hardware::audio::effect::V2_0::EffectDescriptor; using ::android::hardware::audio::effect::V2_0::IEffect; using ::android::hardware::EventFlag; Loading Loading @@ -75,6 +77,9 @@ class EffectHalHidl : public EffectHalInterface EventFlag* mEfGroup; static status_t analyzeResult(const hardware::audio::effect::V2_0::Result& result); static void effectBufferConfigFromHal( const buffer_config_t& halConfig, EffectBufferConfig* config); static void effectConfigFromHal(const effect_config_t& halConfig, EffectConfig* config); // Can not be constructed directly by clients. EffectHalHidl(const sp<IEffect>& effect, uint64_t effectId); Loading @@ -84,6 +89,9 @@ class EffectHalHidl : public EffectHalInterface status_t prepareForProcessing(); status_t processImpl(uint32_t mqFlag); status_t setConfigImpl( uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t *replySize, void *pReplyData); status_t setProcessBuffers(); }; Loading