am 2a6b80bc: Fixed several audio effects problems.

Merge commit '2a6b80bc65c4782b5a7168b300e1dc5ec9f617ee' into gingerbread-plus-aosp

* commit '2a6b80bc65c4782b5a7168b300e1dc5ec9f617ee':
  Fixed several audio effects problems.
This commit is contained in:
Eric Laurent
2010-08-09 19:52:43 -07:00
committed by Android Git Automerger
4 changed files with 39 additions and 18 deletions

View File

@@ -85302,7 +85302,7 @@
type="int"
transient="false"
volatile="false"
value="1"
value="0"
static="true"
final="true"
deprecated="not deprecated"
@@ -85313,7 +85313,7 @@
type="int"
transient="false"
volatile="false"
value="0"
value="1"
static="true"
final="true"
deprecated="not deprecated"

View File

@@ -101,15 +101,15 @@ public class AudioEffect {
public static final int STATE_INITIALIZED = 1;
// to keep in sync with
// frameworks/base/media/jni/audioeffect/android_media_AudioEffect.cpp
/**
* Event id for engine state change notification.
*/
public static final int NATIVE_EVENT_ENABLED_STATUS = 0;
// frameworks/base/include/media/AudioEffect.h
/**
* Event id for engine control ownership change notification.
*/
public static final int NATIVE_EVENT_CONTROL_STATUS = 1;
public static final int NATIVE_EVENT_CONTROL_STATUS = 0;
/**
* Event id for engine state change notification.
*/
public static final int NATIVE_EVENT_ENABLED_STATUS = 1;
/**
* Event id for engine parameter change notification.
*/
@@ -795,7 +795,7 @@ public class AudioEffect {
// Interface definitions
// --------------------
/**
* The OnParameterChangeListener interface defines a method called by the AudioEffect
* The OnEnableStatusChangeListener interface defines a method called by the AudioEffect
* when a the enabled state of the effect engine was changed by the controlling application.
*/
public interface OnEnableStatusChangeListener {
@@ -922,7 +922,6 @@ public class AudioEffect {
if (effect == null) {
return;
}
if (effect.mNativeEventHandler != null) {
Message m = effect.mNativeEventHandler.obtainMessage(what, arg1,
arg2, obj);

View File

@@ -218,7 +218,7 @@ status_t AudioEffect::setEnabled(bool enabled)
return mIEffect->disable();
}
}
return INVALID_OPERATION;
return NO_ERROR;
}
status_t AudioEffect::command(uint32_t cmdCode,
@@ -231,7 +231,22 @@ status_t AudioEffect::command(uint32_t cmdCode,
return INVALID_OPERATION;
}
return mIEffect->command(cmdCode, cmdSize, cmdData, replySize, replyData);
status_t status = mIEffect->command(cmdCode, cmdSize, cmdData, replySize, replyData);
if (status != NO_ERROR) {
return status;
}
status = *(status_t *)replyData;
if (status != NO_ERROR) {
return status;
}
if (cmdCode == EFFECT_CMD_ENABLE) {
android_atomic_or(1, &mEnabled);
}
if (cmdCode == EFFECT_CMD_DISABLE) {
android_atomic_and(~1, &mEnabled);
}
return status;
}
@@ -347,7 +362,11 @@ void AudioEffect::enableStatusChanged(bool enabled)
{
LOGV("enableStatusChanged %p enabled %d mCbf %p", this, enabled, mCbf);
if (mStatus == ALREADY_EXISTS) {
mEnabled = enabled;
if (enabled) {
android_atomic_or(1, &mEnabled);
} else {
android_atomic_and(~1, &mEnabled);
}
if (mCbf) {
mCbf(EVENT_ENABLE_STATUS_CHANGED, mUserData, &enabled);
}

View File

@@ -1696,7 +1696,10 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track
// Delegate master volume control to effect in output mix effect chain if needed
sp<EffectChain> chain = getEffectChain_l(AudioSystem::SESSION_OUTPUT_MIX);
if (chain != 0) {
uint32_t v = (uint32_t)(masterVolume * (1 << 24));
uint32_t v = 0;
if (!masterMute) {
v = (uint32_t)(masterVolume * (1 << 24));
}
chain->setVolume_l(&v, &v);
masterVolume = (float)((v + (1 << 23)) >> 24);
chain.clear();
@@ -1750,7 +1753,7 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track
// compute volume for this track
int16_t left, right, aux;
if (track->isMuted() || masterMute || track->isPausing() ||
if (track->isMuted() || track->isPausing() ||
mStreamTypes[track->type()].mute) {
left = right = aux = 0;
if (track->isPausing()) {
@@ -5351,7 +5354,7 @@ void AudioFlinger::EffectModule::process()
return;
}
if (mState == ACTIVE || mState == STOPPING || mState == STOPPED) {
if (mState == ACTIVE || mState == STOPPING || mState == STOPPED || mState == RESTART) {
// do 32 bit to 16 bit conversion for auxiliary effect input buffer
if ((mDescriptor.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) {
AudioMixer::ditherAndClamp(mConfig.inputCfg.buffer.s32,
@@ -6032,8 +6035,8 @@ void AudioFlinger::EffectHandle::dump(char* buffer, size_t size)
AudioFlinger::EffectChain::EffectChain(const wp<ThreadBase>& wThread,
int sessionId)
: mThread(wThread), mSessionId(sessionId), mActiveTrackCnt(0), mOwnInBuffer(false),
mVolumeCtrlIdx(-1), mLeftVolume(0), mRightVolume(0),
mNewLeftVolume(0), mNewRightVolume(0)
mVolumeCtrlIdx(-1), mLeftVolume(UINT_MAX), mRightVolume(UINT_MAX),
mNewLeftVolume(UINT_MAX), mNewRightVolume(UINT_MAX)
{
mStrategy = AudioSystem::getStrategyForStream(AudioSystem::MUSIC);
}