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

Commit 95ee3caf authored by Vlad Popa's avatar Vlad Popa
Browse files

CSD: Add method to check if HAL supports CSD

This method is used for testing only to check if there is an
implementation of ISoundDose on HAL level. This can be retreived either from the
standalone sound dose HAL or as part of IModule.

Test: SoundDoseInteractiveTest
Bug: 248566547
Change-Id: I13e1417f8a5d9efa83e87e62ca70143fbca1e1b8
parent 26cc654a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -62,6 +62,11 @@ interface ISoundDose {
    float getOutputRs2UpperBound();
    /** Get the current CSD from audioserver. */
    float getCsd();
    /**
     * Returns true if the HAL supports the ISoundDose interface. Can be either
     * as part of IModule or standalon sound dose HAL.
     */
    boolean isSoundDoseHalSupported();
    /** Enables/Disables MEL computations from framework. */
    oneway void forceUseFrameworkMel(boolean useFrameworkMel);
    /** Enables/Disables the computation of CSD on all devices. */
+23 −0
Original line number Diff line number Diff line
@@ -334,6 +334,16 @@ binder::Status SoundDoseManager::SoundDose::forceComputeCsdOnAllDevices(
    return binder::Status::ok();
}

binder::Status SoundDoseManager::SoundDose::isSoundDoseHalSupported(bool* value) {
    ALOGV("%s", __func__);
    *value = false;
    auto soundDoseManager = mSoundDoseManager.promote();
    if (soundDoseManager != nullptr) {
        *value = soundDoseManager->isSoundDoseHalSupported();
    }
    return binder::Status::ok();
}

void SoundDoseManager::updateAttenuation(float attenuationDB, audio_devices_t deviceType) {
    std::lock_guard _l(mLock);
    ALOGV("%s: updating MEL processor attenuation for device type %d to %f",
@@ -397,6 +407,19 @@ bool SoundDoseManager::forceComputeCsdOnAllDevices() const {
    return mComputeCsdOnAllDevices;
}

bool SoundDoseManager::isSoundDoseHalSupported() const {
    if (mDisableCsd) {
        return false;
    }

    std::shared_ptr<ISoundDose> halSoundDose;
    getHalSoundDose(&halSoundDose);
    if (mHalSoundDose == nullptr) {
        return false;
    }
    return true;
}

void SoundDoseManager::getHalSoundDose(std::shared_ptr<ISoundDose>* halSoundDose) const {
    std::lock_guard _l(mLock);
    *halSoundDose = mHalSoundDose;
+2 −0
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ private:
        binder::Status getCsd(float* value) override;
        binder::Status forceUseFrameworkMel(bool useFrameworkMel) override;
        binder::Status forceComputeCsdOnAllDevices(bool computeCsdOnAllDevices) override;
        binder::Status isSoundDoseHalSupported(bool* value) override;

        wp<SoundDoseManager> mSoundDoseManager;
        const sp<media::ISoundDoseCallback> mSoundDoseCallback;
@@ -172,6 +173,7 @@ private:
    void disableCsd();
    void setUseFrameworkMel(bool useFrameworkMel);
    void setComputeCsdOnAllDevices(bool computeCsdOnAllDevices);
    bool isSoundDoseHalSupported() const;
    /** Returns the HAL sound dose interface or null if internal MEL computation is used. */
    void getHalSoundDose(std::shared_ptr<ISoundDose>* halSoundDose) const;