Refactor haptic constant.

Use the constant from IExternalVibratorService.

Bug: 124318236
Test: play audio-haptic coupled file
Change-Id: Ice2ac13d0f6a6a749bb6243230524336144fa5f4
gugelfrei
jiabin 5 years ago
parent f39a648edb
commit bf6b0ecd91

@ -74,6 +74,7 @@ cc_library_shared {
"libnblog",
"libprocessgroup",
"libutils",
"libvibrator",
],
export_shared_lib_headers: ["libbinder"],

@ -26,6 +26,7 @@
#include <unordered_map>
#include <vector>
#include <android/os/IExternalVibratorService.h>
#include <media/AudioBufferProvider.h>
#include <media/AudioResampler.h>
#include <media/AudioResamplerPublic.h>
@ -103,20 +104,21 @@ public:
// parameter 'value' is a pointer to the new playback rate.
};
enum { // Haptic intensity, should keep consistent with VibratorService
HAPTIC_SCALE_VERY_LOW = -2,
HAPTIC_SCALE_LOW = -1,
HAPTIC_SCALE_NONE = 0,
HAPTIC_SCALE_HIGH = 1,
HAPTIC_SCALE_VERY_HIGH = 2,
};
typedef int32_t haptic_intensity_t;
static constexpr float HAPTIC_SCALE_VERY_LOW_RATIO = 2 / 3;
static constexpr float HAPTIC_SCALE_LOW_RATIO = 3 / 4;
static const CONSTEXPR float HAPTIC_MAX_AMPLITUDE_FLOAT = 1.0f;
typedef enum { // Haptic intensity, should keep consistent with VibratorService
HAPTIC_SCALE_MUTE = os::IExternalVibratorService::SCALE_MUTE,
HAPTIC_SCALE_VERY_LOW = os::IExternalVibratorService::SCALE_VERY_LOW,
HAPTIC_SCALE_LOW = os::IExternalVibratorService::SCALE_LOW,
HAPTIC_SCALE_NONE = os::IExternalVibratorService::SCALE_NONE,
HAPTIC_SCALE_HIGH = os::IExternalVibratorService::SCALE_HIGH,
HAPTIC_SCALE_VERY_HIGH = os::IExternalVibratorService::SCALE_VERY_HIGH,
} haptic_intensity_t;
static constexpr float HAPTIC_SCALE_VERY_LOW_RATIO = 2.0f / 3.0f;
static constexpr float HAPTIC_SCALE_LOW_RATIO = 3.0f / 4.0f;
static const constexpr float HAPTIC_MAX_AMPLITUDE_FLOAT = 1.0f;
static inline bool isValidHapticIntensity(haptic_intensity_t hapticIntensity) {
switch (hapticIntensity) {
case HAPTIC_SCALE_MUTE:
case HAPTIC_SCALE_VERY_LOW:
case HAPTIC_SCALE_LOW:
case HAPTIC_SCALE_NONE:
@ -428,8 +430,9 @@ private:
case HAPTIC_SCALE_NONE:
case HAPTIC_SCALE_HIGH:
case HAPTIC_SCALE_VERY_HIGH:
default:
return 1.0f;
default:
return 0.0f;
}
}

@ -12,6 +12,11 @@ cc_defaults {
"libnblog",
"libsonic",
"libutils",
"libvibrator",
],
header_libs: [
"libbase_headers",
],
cflags: [

@ -10,6 +10,7 @@ cc_defaults {
"libcutils",
"liblog",
"libutils",
"libvibrator",
],
cflags: [

@ -347,7 +347,7 @@ int AudioFlinger::onExternalVibrationStart(const sp<os::ExternalVibration>& exte
return ret;
}
}
return AudioMixer::HAPTIC_SCALE_NONE;
return AudioMixer::HAPTIC_SCALE_MUTE;
}
/* static */

@ -49,7 +49,7 @@ struct FastTrack {
audio_format_t mFormat; // track format
int mGeneration; // increment when any field is assigned
bool mHapticPlaybackEnabled = false; // haptic playback is enabled or not
AudioMixer::haptic_intensity_t mHapticIntensity = AudioMixer::HAPTIC_SCALE_NONE; // intensity of
AudioMixer::haptic_intensity_t mHapticIntensity = AudioMixer::HAPTIC_SCALE_MUTE; // intensity of
// haptic data
};

@ -124,6 +124,7 @@ public:
void setHapticIntensity(AudioMixer::haptic_intensity_t hapticIntensity) {
if (AudioMixer::isValidHapticIntensity(hapticIntensity)) {
mHapticIntensity = hapticIntensity;
setHapticPlaybackEnabled(mHapticIntensity != AudioMixer::HAPTIC_SCALE_MUTE);
}
}
sp<os::ExternalVibration> getExternalVibration() const { return mExternalVibration; }
@ -208,7 +209,7 @@ protected:
bool mHapticPlaybackEnabled = false; // indicates haptic playback enabled or not
// intensity to play haptic data
AudioMixer::haptic_intensity_t mHapticIntensity = AudioMixer::HAPTIC_SCALE_NONE;
AudioMixer::haptic_intensity_t mHapticIntensity = AudioMixer::HAPTIC_SCALE_MUTE;
class AudioVibrationController : public os::BnExternalVibrationController {
public:
explicit AudioVibrationController(Track* track) : mTrack(track) {}

@ -2372,6 +2372,7 @@ status_t AudioFlinger::PlaybackThread::addTrack_l(const sp<Track>& track)
const int intensity = AudioFlinger::onExternalVibrationStart(
track->getExternalVibration());
mLock.lock();
track->setHapticIntensity(static_cast<AudioMixer::haptic_intensity_t>(intensity));
// Haptic playback should be enabled by vibrator service.
if (track->getHapticPlaybackEnabled()) {
// Disable haptic playback of all active track to ensure only
@ -2380,7 +2381,6 @@ status_t AudioFlinger::PlaybackThread::addTrack_l(const sp<Track>& track)
t->setHapticPlaybackEnabled(false);
}
}
track->setHapticIntensity(intensity);
}
track->mResetDone = false;

Loading…
Cancel
Save