Loading common/java/com/android/common/speech/LoggingEvents.java +6 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,12 @@ public class LoggingEvents { public static final String EXTRA_N_BEST_CHOOSE_INDEX = "index"; // value should be int public static final int TEXT_MODIFIED = 17; public static final String EXTRA_TEXT_MODIFIED_LENGTH = "length"; // value should be int public static final String EXTRA_TEXT_MODIFIED_TYPE = "type"; // value should be int below public static final int TEXT_MODIFIED_TYPE_CHOOSE_SUGGESTION = 1; public static final int TEXT_MODIFIED_TYPE_TYPING_DELETION = 2; public static final int TEXT_MODIFIED_TYPE_TYPING_INSERTION = 3; public static final int TEXT_MODIFIED_TYPE_TYPING_INSERTION_PUNCTUATION = 4; public static final int INPUT_ENDED = 18; Loading include/utils/ResourceTypes.h +2 −2 Original line number Diff line number Diff line Loading @@ -631,6 +631,8 @@ public: void restart(); const ResStringPool& getStrings() const; event_code_t getEventType() const; // Note, unlike XmlPullParser, the first call to next() will return // START_TAG of the first element. Loading Loading @@ -716,8 +718,6 @@ public: void uninit(); const ResStringPool& getStrings() const; private: friend class ResXMLParser; Loading libs/audioflinger/Android.mk +13 −5 Original line number Diff line number Diff line Loading @@ -119,4 +119,12 @@ ifeq ($(TARGET_SIMULATOR),true) endif endif ifeq ($(BOARD_USE_LVMX),true) LOCAL_CFLAGS += -DLVMX LOCAL_C_INCLUDES += vendor/nxp LOCAL_STATIC_LIBRARIES += liblifevibes LOCAL_SHARED_LIBRARIES += liblvmxservice # LOCAL_SHARED_LIBRARIES += liblvmxipc endif include $(BUILD_SHARED_LIBRARY) libs/audioflinger/AudioFlinger.cpp +131 −4 Original line number Diff line number Diff line Loading @@ -47,6 +47,10 @@ #include "A2dpAudioInterface.h" #endif #ifdef LVMX #include "lifevibes.h" #endif // ---------------------------------------------------------------------------- // the sim build doesn't have gettid Loading Loading @@ -132,6 +136,9 @@ AudioFlinger::AudioFlinger() } else { LOGE("Couldn't even initialize the stubbed audio hardware!"); } #ifdef LVMX LifeVibes::init(); #endif } AudioFlinger::~AudioFlinger() Loading Loading @@ -411,6 +418,11 @@ status_t AudioFlinger::setMode(int mode) AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_HW_SET_MODE; status_t ret = mAudioHardware->setMode(mode); #ifdef LVMX if (NO_ERROR == ret) { LifeVibes::setMode(mode); } #endif mHardwareStatus = AUDIO_HW_IDLE; return ret; } Loading Loading @@ -566,11 +578,37 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) return PERMISSION_DENIED; } #ifdef LVMX AudioParameter param = AudioParameter(keyValuePairs); LifeVibes::setParameters(ioHandle,keyValuePairs); String8 key = String8(AudioParameter::keyRouting); int device; if (NO_ERROR != param.getInt(key, device)) { device = -1; } key = String8(LifevibesTag); String8 value; int musicEnabled = -1; if (NO_ERROR == param.get(key, value)) { if (value == LifevibesEnable) { musicEnabled = 1; } else if (value == LifevibesDisable) { musicEnabled = 0; } } #endif // ioHandle == 0 means the parameters are global to the audio hardware interface if (ioHandle == 0) { AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_SET_PARAMETER; result = mAudioHardware->setParameters(keyValuePairs); #ifdef LVMX if ((NO_ERROR == result) && (musicEnabled != -1)) { LifeVibes::enableMusic((bool) musicEnabled); } #endif mHardwareStatus = AUDIO_HW_IDLE; return result; } Loading @@ -586,7 +624,13 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) } } if (thread != NULL) { return thread->setParameters(keyValuePairs); result = thread->setParameters(keyValuePairs); #ifdef LVMX if ((NO_ERROR == result) && (device != -1)) { LifeVibes::setDevice(LifeVibes::threadIdToAudioOutputType(thread->id()), device); } #endif return result; } return BAD_VALUE; } Loading Loading @@ -1058,12 +1102,24 @@ uint32_t AudioFlinger::PlaybackThread::latency() const status_t AudioFlinger::PlaybackThread::setMasterVolume(float value) { #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::setMasterVolume(audioOutputType, value); } #endif mMasterVolume = value; return NO_ERROR; } status_t AudioFlinger::PlaybackThread::setMasterMute(bool muted) { #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::setMasterMute(audioOutputType, muted); } #endif mMasterMute = muted; return NO_ERROR; } Loading @@ -1080,12 +1136,24 @@ bool AudioFlinger::PlaybackThread::masterMute() const status_t AudioFlinger::PlaybackThread::setStreamVolume(int stream, float value) { #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::setStreamVolume(audioOutputType, stream, value); } #endif mStreamTypes[stream].volume = value; return NO_ERROR; } status_t AudioFlinger::PlaybackThread::setStreamMute(int stream, bool muted) { #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::setStreamMute(audioOutputType, stream, muted); } #endif mStreamTypes[stream].mute = muted; return NO_ERROR; } Loading Loading @@ -1333,6 +1401,12 @@ bool AudioFlinger::MixerThread::threadLoop() mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::process(audioOutputType, curBuf, mixBufferSize); } #endif int bytesWritten = (int)mOutput->write(curBuf, mixBufferSize); if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; Loading Loading @@ -1376,6 +1450,29 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track uint32_t mixerStatus = MIXER_IDLE; // find out which tracks need to be processed size_t count = activeTracks.size(); float masterVolume = mMasterVolume; bool masterMute = mMasterMute; #ifdef LVMX bool tracksConnectedChanged = false; bool stateChanged = false; int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { int activeTypes = 0; for (size_t i=0 ; i<count ; i++) { sp<Track> t = activeTracks[i].promote(); if (t == 0) continue; Track* const track = t.get(); int iTracktype=track->type(); activeTypes |= 1<<track->type(); } LifeVibes::computeVolumes(audioOutputType, activeTypes, tracksConnectedChanged, stateChanged, masterVolume, masterMute); } #endif for (size_t i=0 ; i<count ; i++) { sp<Track> t = activeTracks[i].promote(); if (t == 0) continue; Loading @@ -1393,15 +1490,27 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track // compute volume for this track int16_t left, right; if (track->isMuted() || mMasterMute || track->isPausing() || if (track->isMuted() || masterMute || track->isPausing() || mStreamTypes[track->type()].mute) { left = right = 0; if (track->isPausing()) { track->setPaused(); } } else { // read original volumes with volume control float typeVolume = mStreamTypes[track->type()].volume; float v = mMasterVolume * typeVolume; #ifdef LVMX bool streamMute=false; // read the volume from the LivesVibes audio engine. if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::getStreamVolumes(audioOutputType, track->type(), &typeVolume, &streamMute); if (streamMute) { typeVolume = 0; } } #endif float v = masterVolume * typeVolume; float v_clamped = v * cblk->volume[0]; if (v_clamped > MAX_GAIN) v_clamped = MAX_GAIN; left = int16_t(v_clamped); Loading @@ -1427,7 +1536,13 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track // do not apply ramp param = AudioMixer::RAMP_VOLUME; } #ifdef LVMX if ( tracksConnectedChanged || stateChanged ) { // only do the ramp when the volume is changed by the user / application param = AudioMixer::VOLUME; } #endif mAudioMixer->setParameter(param, AudioMixer::VOLUME0, left); mAudioMixer->setParameter(param, AudioMixer::VOLUME1, right); mAudioMixer->setParameter( Loading Loading @@ -3652,6 +3767,18 @@ int AudioFlinger::openOutput(uint32_t *pDevices, } else { thread = new MixerThread(this, output, ++mNextThreadId); LOGV("openOutput() created mixer output: ID %d thread %p", mNextThreadId, thread); #ifdef LVMX unsigned bitsPerSample = (format == AudioSystem::PCM_16_BIT) ? 16 : ((format == AudioSystem::PCM_8_BIT) ? 8 : 0); unsigned channelCount = (channels == AudioSystem::CHANNEL_OUT_STEREO) ? 2 : 1; int audioOutputType = LifeVibes::threadIdToAudioOutputType(thread->id()); LifeVibes::init_aot(audioOutputType, samplingRate, bitsPerSample, channelCount); LifeVibes::setDevice(audioOutputType, *pDevices); #endif } mPlaybackThreads.add(mNextThreadId, thread); Loading libs/audioflinger/AudioPolicyManagerBase.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -344,6 +344,7 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst { LOGV("setForceUse() usage %d, config %d, mPhoneState %d", usage, config, mPhoneState); bool forceVolumeReeval = false; switch(usage) { case AudioSystem::FOR_COMMUNICATION: if (config != AudioSystem::FORCE_SPEAKER && config != AudioSystem::FORCE_BT_SCO && Loading Loading @@ -374,6 +375,7 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst config != AudioSystem::FORCE_BT_DESK_DOCK && config != AudioSystem::FORCE_WIRED_ACCESSORY) { LOGW("setForceUse() invalid config %d for FOR_DOCK", config); } forceVolumeReeval = true; mForceUse[usage] = config; break; default: Loading @@ -388,6 +390,9 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst #endif updateDeviceForStrategy(); setOutputDevice(mHardwareOutput, newDevice); if (forceVolumeReeval) { applyStreamVolumes(mHardwareOutput, newDevice); } } AudioSystem::forced_config AudioPolicyManagerBase::getForceUse(AudioSystem::force_use usage) Loading Loading
common/java/com/android/common/speech/LoggingEvents.java +6 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,12 @@ public class LoggingEvents { public static final String EXTRA_N_BEST_CHOOSE_INDEX = "index"; // value should be int public static final int TEXT_MODIFIED = 17; public static final String EXTRA_TEXT_MODIFIED_LENGTH = "length"; // value should be int public static final String EXTRA_TEXT_MODIFIED_TYPE = "type"; // value should be int below public static final int TEXT_MODIFIED_TYPE_CHOOSE_SUGGESTION = 1; public static final int TEXT_MODIFIED_TYPE_TYPING_DELETION = 2; public static final int TEXT_MODIFIED_TYPE_TYPING_INSERTION = 3; public static final int TEXT_MODIFIED_TYPE_TYPING_INSERTION_PUNCTUATION = 4; public static final int INPUT_ENDED = 18; Loading
include/utils/ResourceTypes.h +2 −2 Original line number Diff line number Diff line Loading @@ -631,6 +631,8 @@ public: void restart(); const ResStringPool& getStrings() const; event_code_t getEventType() const; // Note, unlike XmlPullParser, the first call to next() will return // START_TAG of the first element. Loading Loading @@ -716,8 +718,6 @@ public: void uninit(); const ResStringPool& getStrings() const; private: friend class ResXMLParser; Loading
libs/audioflinger/Android.mk +13 −5 Original line number Diff line number Diff line Loading @@ -119,4 +119,12 @@ ifeq ($(TARGET_SIMULATOR),true) endif endif ifeq ($(BOARD_USE_LVMX),true) LOCAL_CFLAGS += -DLVMX LOCAL_C_INCLUDES += vendor/nxp LOCAL_STATIC_LIBRARIES += liblifevibes LOCAL_SHARED_LIBRARIES += liblvmxservice # LOCAL_SHARED_LIBRARIES += liblvmxipc endif include $(BUILD_SHARED_LIBRARY)
libs/audioflinger/AudioFlinger.cpp +131 −4 Original line number Diff line number Diff line Loading @@ -47,6 +47,10 @@ #include "A2dpAudioInterface.h" #endif #ifdef LVMX #include "lifevibes.h" #endif // ---------------------------------------------------------------------------- // the sim build doesn't have gettid Loading Loading @@ -132,6 +136,9 @@ AudioFlinger::AudioFlinger() } else { LOGE("Couldn't even initialize the stubbed audio hardware!"); } #ifdef LVMX LifeVibes::init(); #endif } AudioFlinger::~AudioFlinger() Loading Loading @@ -411,6 +418,11 @@ status_t AudioFlinger::setMode(int mode) AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_HW_SET_MODE; status_t ret = mAudioHardware->setMode(mode); #ifdef LVMX if (NO_ERROR == ret) { LifeVibes::setMode(mode); } #endif mHardwareStatus = AUDIO_HW_IDLE; return ret; } Loading Loading @@ -566,11 +578,37 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) return PERMISSION_DENIED; } #ifdef LVMX AudioParameter param = AudioParameter(keyValuePairs); LifeVibes::setParameters(ioHandle,keyValuePairs); String8 key = String8(AudioParameter::keyRouting); int device; if (NO_ERROR != param.getInt(key, device)) { device = -1; } key = String8(LifevibesTag); String8 value; int musicEnabled = -1; if (NO_ERROR == param.get(key, value)) { if (value == LifevibesEnable) { musicEnabled = 1; } else if (value == LifevibesDisable) { musicEnabled = 0; } } #endif // ioHandle == 0 means the parameters are global to the audio hardware interface if (ioHandle == 0) { AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_SET_PARAMETER; result = mAudioHardware->setParameters(keyValuePairs); #ifdef LVMX if ((NO_ERROR == result) && (musicEnabled != -1)) { LifeVibes::enableMusic((bool) musicEnabled); } #endif mHardwareStatus = AUDIO_HW_IDLE; return result; } Loading @@ -586,7 +624,13 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) } } if (thread != NULL) { return thread->setParameters(keyValuePairs); result = thread->setParameters(keyValuePairs); #ifdef LVMX if ((NO_ERROR == result) && (device != -1)) { LifeVibes::setDevice(LifeVibes::threadIdToAudioOutputType(thread->id()), device); } #endif return result; } return BAD_VALUE; } Loading Loading @@ -1058,12 +1102,24 @@ uint32_t AudioFlinger::PlaybackThread::latency() const status_t AudioFlinger::PlaybackThread::setMasterVolume(float value) { #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::setMasterVolume(audioOutputType, value); } #endif mMasterVolume = value; return NO_ERROR; } status_t AudioFlinger::PlaybackThread::setMasterMute(bool muted) { #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::setMasterMute(audioOutputType, muted); } #endif mMasterMute = muted; return NO_ERROR; } Loading @@ -1080,12 +1136,24 @@ bool AudioFlinger::PlaybackThread::masterMute() const status_t AudioFlinger::PlaybackThread::setStreamVolume(int stream, float value) { #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::setStreamVolume(audioOutputType, stream, value); } #endif mStreamTypes[stream].volume = value; return NO_ERROR; } status_t AudioFlinger::PlaybackThread::setStreamMute(int stream, bool muted) { #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::setStreamMute(audioOutputType, stream, muted); } #endif mStreamTypes[stream].mute = muted; return NO_ERROR; } Loading Loading @@ -1333,6 +1401,12 @@ bool AudioFlinger::MixerThread::threadLoop() mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; #ifdef LVMX int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::process(audioOutputType, curBuf, mixBufferSize); } #endif int bytesWritten = (int)mOutput->write(curBuf, mixBufferSize); if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; Loading Loading @@ -1376,6 +1450,29 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track uint32_t mixerStatus = MIXER_IDLE; // find out which tracks need to be processed size_t count = activeTracks.size(); float masterVolume = mMasterVolume; bool masterMute = mMasterMute; #ifdef LVMX bool tracksConnectedChanged = false; bool stateChanged = false; int audioOutputType = LifeVibes::getMixerType(mId, mType); if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { int activeTypes = 0; for (size_t i=0 ; i<count ; i++) { sp<Track> t = activeTracks[i].promote(); if (t == 0) continue; Track* const track = t.get(); int iTracktype=track->type(); activeTypes |= 1<<track->type(); } LifeVibes::computeVolumes(audioOutputType, activeTypes, tracksConnectedChanged, stateChanged, masterVolume, masterMute); } #endif for (size_t i=0 ; i<count ; i++) { sp<Track> t = activeTracks[i].promote(); if (t == 0) continue; Loading @@ -1393,15 +1490,27 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track // compute volume for this track int16_t left, right; if (track->isMuted() || mMasterMute || track->isPausing() || if (track->isMuted() || masterMute || track->isPausing() || mStreamTypes[track->type()].mute) { left = right = 0; if (track->isPausing()) { track->setPaused(); } } else { // read original volumes with volume control float typeVolume = mStreamTypes[track->type()].volume; float v = mMasterVolume * typeVolume; #ifdef LVMX bool streamMute=false; // read the volume from the LivesVibes audio engine. if (LifeVibes::audioOutputTypeIsLifeVibes(audioOutputType)) { LifeVibes::getStreamVolumes(audioOutputType, track->type(), &typeVolume, &streamMute); if (streamMute) { typeVolume = 0; } } #endif float v = masterVolume * typeVolume; float v_clamped = v * cblk->volume[0]; if (v_clamped > MAX_GAIN) v_clamped = MAX_GAIN; left = int16_t(v_clamped); Loading @@ -1427,7 +1536,13 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track // do not apply ramp param = AudioMixer::RAMP_VOLUME; } #ifdef LVMX if ( tracksConnectedChanged || stateChanged ) { // only do the ramp when the volume is changed by the user / application param = AudioMixer::VOLUME; } #endif mAudioMixer->setParameter(param, AudioMixer::VOLUME0, left); mAudioMixer->setParameter(param, AudioMixer::VOLUME1, right); mAudioMixer->setParameter( Loading Loading @@ -3652,6 +3767,18 @@ int AudioFlinger::openOutput(uint32_t *pDevices, } else { thread = new MixerThread(this, output, ++mNextThreadId); LOGV("openOutput() created mixer output: ID %d thread %p", mNextThreadId, thread); #ifdef LVMX unsigned bitsPerSample = (format == AudioSystem::PCM_16_BIT) ? 16 : ((format == AudioSystem::PCM_8_BIT) ? 8 : 0); unsigned channelCount = (channels == AudioSystem::CHANNEL_OUT_STEREO) ? 2 : 1; int audioOutputType = LifeVibes::threadIdToAudioOutputType(thread->id()); LifeVibes::init_aot(audioOutputType, samplingRate, bitsPerSample, channelCount); LifeVibes::setDevice(audioOutputType, *pDevices); #endif } mPlaybackThreads.add(mNextThreadId, thread); Loading
libs/audioflinger/AudioPolicyManagerBase.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -344,6 +344,7 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst { LOGV("setForceUse() usage %d, config %d, mPhoneState %d", usage, config, mPhoneState); bool forceVolumeReeval = false; switch(usage) { case AudioSystem::FOR_COMMUNICATION: if (config != AudioSystem::FORCE_SPEAKER && config != AudioSystem::FORCE_BT_SCO && Loading Loading @@ -374,6 +375,7 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst config != AudioSystem::FORCE_BT_DESK_DOCK && config != AudioSystem::FORCE_WIRED_ACCESSORY) { LOGW("setForceUse() invalid config %d for FOR_DOCK", config); } forceVolumeReeval = true; mForceUse[usage] = config; break; default: Loading @@ -388,6 +390,9 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst #endif updateDeviceForStrategy(); setOutputDevice(mHardwareOutput, newDevice); if (forceVolumeReeval) { applyStreamVolumes(mHardwareOutput, newDevice); } } AudioSystem::forced_config AudioPolicyManagerBase::getForceUse(AudioSystem::force_use usage) Loading