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

Commit bd765ee2 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 11413328 from 01fee518 to 24Q2-release

Change-Id: I0d1913ed3e25122eff4a7a4ebe53c91502c98903
parents 11e13aaf 01fee518
Loading
Loading
Loading
Loading
+25 −11
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
using aidl::android::hardware::audio::common::getChannelCount;
using aidl::android::hardware::audio::common::getFrameSizeInBytes;
using aidl::android::hardware::audio::effect::IEffect;
using aidl::android::hardware::audio::effect::kReopenSupportedVersion;
using aidl::android::media::audio::common::PcmType;
using ::android::hardware::EventFlag;

@@ -40,7 +41,8 @@ EffectContext::EffectContext(size_t statusDepth, const Parameter::Common& common
    mOutputMQ = std::make_shared<DataMQ>(outBufferSizeInFloat);

    if (!mStatusMQ->isValid() || !mInputMQ->isValid() || !mOutputMQ->isValid()) {
        LOG(ERROR) << __func__ << " created invalid FMQ";
        LOG(ERROR) << __func__ << " created invalid FMQ, statusMQ: " << mStatusMQ->isValid()
                   << " inputMQ: " << mInputMQ->isValid() << " outputMQ: " << mOutputMQ->isValid();
    }

    ::android::status_t status =
@@ -52,7 +54,9 @@ EffectContext::EffectContext(size_t statusDepth, const Parameter::Common& common
// reset buffer status by abandon input data in FMQ
void EffectContext::resetBuffer() {
    auto buffer = static_cast<float*>(mWorkBuffer.data());
    if (mStatusMQ) {
        std::vector<IEffect::Status> status(mStatusMQ->availableToRead());
    }
    if (mInputMQ) {
        mInputMQ->read(buffer, mInputMQ->availableToRead());
    }
@@ -71,7 +75,7 @@ void EffectContext::dupeFmqWithReopen(IEffect::OpenEffectReturn* effectRet) {
}

void EffectContext::dupeFmq(IEffect::OpenEffectReturn* effectRet) {
    if (effectRet) {
    if (effectRet && mStatusMQ && mInputMQ && mOutputMQ) {
        effectRet->statusMQ = mStatusMQ->dupeDesc();
        effectRet->inputDataMQ = mInputMQ->dupeDesc();
        effectRet->outputDataMQ = mOutputMQ->dupeDesc();
@@ -191,24 +195,34 @@ EventFlag* EffectContext::getStatusEventFlag() {
}

RetCode EffectContext::updateIOFrameSize(const Parameter::Common& common) {
    const auto iFrameSize = ::aidl::android::hardware::audio::common::getFrameSizeInBytes(
    const auto prevInputFrameSize = mInputFrameSize;
    const auto prevOutputFrameSize = mOutputFrameSize;
    mInputFrameSize = ::aidl::android::hardware::audio::common::getFrameSizeInBytes(
            common.input.base.format, common.input.base.channelMask);
    const auto oFrameSize = ::aidl::android::hardware::audio::common::getFrameSizeInBytes(
    mOutputFrameSize = ::aidl::android::hardware::audio::common::getFrameSizeInBytes(
            common.output.base.format, common.output.base.channelMask);

    // workBuffer and data MQ not allocated yet, no need to update
    if (mWorkBuffer.size() == 0 || !mInputMQ || !mOutputMQ) {
        return RetCode::SUCCESS;
    }
    // IEffect::reopen introduced in android.hardware.audio.effect-V2
    if (mVersion < kReopenSupportedVersion) {
        LOG(WARNING) << __func__ << " skipped for HAL version " << mVersion;
        return RetCode::SUCCESS;
    }
    bool needUpdateMq = false;
    if (mInputMQ &&
        (mInputFrameSize != iFrameSize || mCommon.input.frameCount != common.input.frameCount)) {
    if (mInputFrameSize != prevInputFrameSize ||
        mCommon.input.frameCount != common.input.frameCount) {
        mInputMQ.reset();
        needUpdateMq = true;
    }
    if (mOutputMQ &&
        (mOutputFrameSize != oFrameSize || mCommon.output.frameCount != common.output.frameCount)) {
    if (mOutputFrameSize != prevOutputFrameSize ||
        mCommon.output.frameCount != common.output.frameCount) {
        mOutputMQ.reset();
        needUpdateMq = true;
    }
    mInputFrameSize = iFrameSize;
    mOutputFrameSize = oFrameSize;

    if (needUpdateMq) {
        mWorkBuffer.resize(std::max(common.input.frameCount * mInputFrameSize / sizeof(float),
                                    common.output.frameCount * mOutputFrameSize / sizeof(float)));
+6 −0
Original line number Diff line number Diff line
@@ -49,10 +49,16 @@ ndk::ScopedAStatus EffectImpl::open(const Parameter::Common& common,
    RETURN_IF(common.input.base.format.pcm != common.output.base.format.pcm ||
                      common.input.base.format.pcm != PcmType::FLOAT_32_BIT,
              EX_ILLEGAL_ARGUMENT, "dataMustBe32BitsFloat");

    std::lock_guard lg(mImplMutex);
    RETURN_OK_IF(mState != State::INIT);
    mImplContext = createContext(common);
    RETURN_IF(!mImplContext, EX_NULL_POINTER, "nullContext");

    int version = 0;
    RETURN_IF(!getInterfaceVersion(&version).isOk(), EX_UNSUPPORTED_OPERATION,
              "FailedToGetInterfaceVersion");
    mImplContext->setVersion(version);
    mEventFlag = mImplContext->getStatusEventFlag();

    if (specific.has_value()) {
+11 −9
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ class EffectContext {
        }
    }

    void setVersion(int version) { mVersion = version; }
    std::shared_ptr<StatusMQ> getStatusFmq() const;
    std::shared_ptr<DataMQ> getInputDataFmq() const;
    std::shared_ptr<DataMQ> getOutputDataFmq() const;
@@ -82,10 +83,11 @@ class EffectContext {
    virtual ::android::hardware::EventFlag* getStatusEventFlag();

  protected:
    size_t mInputFrameSize;
    size_t mOutputFrameSize;
    size_t mInputChannelCount;
    size_t mOutputChannelCount;
    int mVersion = 0;
    size_t mInputFrameSize = 0;
    size_t mOutputFrameSize = 0;
    size_t mInputChannelCount = 0;
    size_t mOutputChannelCount = 0;
    Parameter::Common mCommon = {};
    std::vector<aidl::android::media::audio::common::AudioDeviceDescription> mOutputDevice = {};
    aidl::android::media::audio::common::AudioMode mMode =
@@ -98,13 +100,13 @@ class EffectContext {

  private:
    // fmq and buffers
    std::shared_ptr<StatusMQ> mStatusMQ;
    std::shared_ptr<DataMQ> mInputMQ;
    std::shared_ptr<DataMQ> mOutputMQ;
    std::shared_ptr<StatusMQ> mStatusMQ = nullptr;
    std::shared_ptr<DataMQ> mInputMQ = nullptr;
    std::shared_ptr<DataMQ> mOutputMQ = nullptr;
    // std::shared_ptr<IEffect::OpenEffectReturn> mRet;
    // work buffer set by effect instances, the access and update are in same thread
    std::vector<float> mWorkBuffer;
    std::vector<float> mWorkBuffer = {};

    ::android::hardware::EventFlag* mEfGroup;
    ::android::hardware::EventFlag* mEfGroup = nullptr;
};
}  // namespace aidl::android::hardware::audio::effect
+1 −0
Original line number Diff line number Diff line
aconfig_declarations {
    name: "btaudiohal_flags",
    package: "com.android.btaudio.hal.flags",
    container: "system",
    srcs: ["btaudiohal.aconfig"],
}

+1 −0
Original line number Diff line number Diff line
package: "com.android.btaudio.hal.flags"
container: "system"

flag {
    name: "dsa_lea"
Loading