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

Commit 62823413 authored by Simon Bowden's avatar Simon Bowden
Browse files

Decouple HapticScale from ExternalVibratorService scale.

Use a conversion function rather than a static cast, and convert
to a properly typed HapticScale straight away, and all the way down to
where it's marshalled into the effect params.

Bug: 248993206
Test: presubmit, manual check scaling of audio-coupled ringtone
Change-Id: I588031ace0b3562cba50449b2147acaa6098af57
parent 3ea84553
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -642,21 +642,22 @@ status_t AudioFlinger::openMmapStream(MmapStreamInterface::stream_direction_t di
}

/* static */
int AudioFlinger::onExternalVibrationStart(const sp<os::ExternalVibration>& externalVibration) {
os::HapticScale AudioFlinger::onExternalVibrationStart(
        const sp<os::ExternalVibration>& externalVibration) {
    sp<os::IExternalVibratorService> evs = getExternalVibratorService();
    if (evs != nullptr) {
        int32_t ret;
        binder::Status status = evs->onExternalVibrationStart(*externalVibration, &ret);
        if (status.isOk()) {
            ALOGD("%s, start external vibration with intensity as %d", __func__, ret);
            return ret;
            return os::ExternalVibration::externalVibrationScaleToHapticScale(ret);
        }
    }
    ALOGD("%s, start external vibration with intensity as MUTE due to %s",
            __func__,
            evs == nullptr ? "external vibration service not found"
                           : "error when querying intensity");
    return static_cast<int>(os::HapticScale::MUTE);
    return os::HapticScale::MUTE;
}

/* static */
+2 −1
Original line number Diff line number Diff line
@@ -320,7 +320,8 @@ public:
                            sp<MmapStreamInterface>& interface,
                            audio_port_handle_t *handle);

    static int onExternalVibrationStart(const sp<os::ExternalVibration>& externalVibration);
    static os::HapticScale onExternalVibrationStart(
        const sp<os::ExternalVibration>& externalVibration);
    static void onExternalVibrationStop(const sp<os::ExternalVibration>& externalVibration);

    status_t addEffectToHal(audio_port_handle_t deviceId,
+3 −3
Original line number Diff line number Diff line
@@ -1597,7 +1597,7 @@ bool AudioFlinger::EffectModule::isHapticGenerator() const {
    return isHapticGenerator(&mDescriptor.type);
}

status_t AudioFlinger::EffectModule::setHapticIntensity(int id, int intensity)
status_t AudioFlinger::EffectModule::setHapticIntensity(int id, os::HapticScale intensity)
{
    if (mStatus != NO_ERROR) {
        return mStatus;
@@ -1613,7 +1613,7 @@ status_t AudioFlinger::EffectModule::setHapticIntensity(int id, int intensity)
    param->vsize = sizeof(int32_t) * 2;
    *(int32_t*)param->data = HG_PARAM_HAPTIC_INTENSITY;
    *((int32_t*)param->data + 1) = id;
    *((int32_t*)param->data + 2) = intensity;
    *((int32_t*)param->data + 2) = static_cast<int32_t>(intensity);
    std::vector<uint8_t> response;
    status_t status = command(EFFECT_CMD_SET_PARAM, request, sizeof(int32_t), &response);
    if (status == NO_ERROR) {
@@ -2676,7 +2676,7 @@ bool AudioFlinger::EffectChain::containsHapticGeneratingEffect_l()
    return false;
}

void AudioFlinger::EffectChain::setHapticIntensity_l(int id, int intensity)
void AudioFlinger::EffectChain::setHapticIntensity_l(int id, os::HapticScale intensity)
{
    Mutex::Autolock _l(mLock);
    for (size_t i = 0; i < mEffects.size(); ++i) {
+2 −2
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ public:
    static bool      isHapticGenerator(const effect_uuid_t* type);
    bool             isHapticGenerator() const;

    status_t         setHapticIntensity(int id, int intensity);
    status_t         setHapticIntensity(int id, os::HapticScale intensity);
    status_t         setVibratorInfo(const media::AudioVibratorInfo& vibratorInfo);

    status_t         getConfigs(audio_config_base_t* inputCfg,
@@ -550,7 +550,7 @@ public:

    bool containsHapticGeneratingEffect_l();

    void setHapticIntensity_l(int id, int intensity);
    void setHapticIntensity_l(int id, os::HapticScale intensity);

    sp<EffectCallbackInterface> effectCallback() const { return mEffectCallback; }
    wp<ThreadBase> thread() const { return mEffectCallback->thread(); }
+3 −3
Original line number Diff line number Diff line
@@ -2742,7 +2742,7 @@ status_t AudioFlinger::PlaybackThread::addTrack_l(const sp<Track>& track)
            // Unlock due to VibratorService will lock for this call and will
            // call Tracks.mute/unmute which also require thread's lock.
            mLock.unlock();
            const int intensity = AudioFlinger::onExternalVibrationStart(
            const os::HapticScale intensity = AudioFlinger::onExternalVibrationStart(
                    track->getExternalVibration());
            std::optional<media::AudioVibratorInfo> vibratorInfo;
            {
@@ -2752,7 +2752,7 @@ status_t AudioFlinger::PlaybackThread::addTrack_l(const sp<Track>& track)
                vibratorInfo = std::move(mAudioFlinger->getDefaultVibratorInfo_l());
            }
            mLock.lock();
            track->setHapticIntensity(static_cast<os::HapticScale>(intensity));
            track->setHapticIntensity(intensity);
            if (vibratorInfo) {
                track->setHapticMaxAmplitude(vibratorInfo->maxAmplitude);
            }
@@ -4497,7 +4497,7 @@ void AudioFlinger::PlaybackThread::removeTracks_l(const Vector< sp<Track> >& tra
            // When the track is stop, set the haptic intensity as MUTE
            // for the HapticGenerator effect.
            if (chain != nullptr) {
                chain->setHapticIntensity_l(track->id(), static_cast<int>(os::HapticScale::MUTE));
                chain->setHapticIntensity_l(track->id(), os::HapticScale::MUTE);
            }
        }
    }