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

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

Merge "Decouple HapticScale from ExternalVibratorService scale."

parents f1a356b9 62823413
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);
            }
        }
    }