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:
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user