am 42466b1c: Merge "Tentative fix for issue 3362362." into honeycomb

* commit '42466b1cad4cec1aa746809dfcca702456415be4':
  Tentative fix for issue 3362362.
This commit is contained in:
Eric Laurent
2011-01-19 09:43:17 -08:00
committed by Android Git Automerger
3 changed files with 56 additions and 30 deletions

View File

@ -131,18 +131,21 @@ AudioFlinger::AudioFlinger()
: BnAudioFlinger(), : BnAudioFlinger(),
mAudioHardware(0), mMasterVolume(1.0f), mMasterMute(false), mNextUniqueId(1) mAudioHardware(0), mMasterVolume(1.0f), mMasterMute(false), mNextUniqueId(1)
{ {
Mutex::Autolock _l(mLock);
mHardwareStatus = AUDIO_HW_IDLE; mHardwareStatus = AUDIO_HW_IDLE;
mAudioHardware = AudioHardwareInterface::create(); mAudioHardware = AudioHardwareInterface::create();
mHardwareStatus = AUDIO_HW_INIT; mHardwareStatus = AUDIO_HW_INIT;
if (mAudioHardware->initCheck() == NO_ERROR) { if (mAudioHardware->initCheck() == NO_ERROR) {
// open 16-bit output stream for s/w mixer AutoMutex lock(mHardwareLock);
mMode = AudioSystem::MODE_NORMAL; mMode = AudioSystem::MODE_NORMAL;
setMode(mMode); mHardwareStatus = AUDIO_HW_SET_MODE;
mAudioHardware->setMode(mMode);
setMasterVolume(1.0f); mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME;
setMasterMute(false); mAudioHardware->setMasterVolume(1.0f);
mHardwareStatus = AUDIO_HW_IDLE;
} else { } else {
LOGE("Couldn't even initialize the stubbed audio hardware!"); LOGE("Couldn't even initialize the stubbed audio hardware!");
} }
@ -440,13 +443,16 @@ status_t AudioFlinger::setMasterVolume(float value)
} }
// when hw supports master volume, don't scale in sw mixer // when hw supports master volume, don't scale in sw mixer
AutoMutex lock(mHardwareLock); { // scope for the lock
mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME; AutoMutex lock(mHardwareLock);
if (mAudioHardware->setMasterVolume(value) == NO_ERROR) { mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME;
value = 1.0f; if (mAudioHardware->setMasterVolume(value) == NO_ERROR) {
value = 1.0f;
}
mHardwareStatus = AUDIO_HW_IDLE;
} }
mHardwareStatus = AUDIO_HW_IDLE;
Mutex::Autolock _l(mLock);
mMasterVolume = value; mMasterVolume = value;
for (uint32_t i = 0; i < mPlaybackThreads.size(); i++) for (uint32_t i = 0; i < mPlaybackThreads.size(); i++)
mPlaybackThreads.valueAt(i)->setMasterVolume(value); mPlaybackThreads.valueAt(i)->setMasterVolume(value);
@ -517,6 +523,7 @@ status_t AudioFlinger::setMasterMute(bool muted)
return PERMISSION_DENIED; return PERMISSION_DENIED;
} }
Mutex::Autolock _l(mLock);
mMasterMute = muted; mMasterMute = muted;
for (uint32_t i = 0; i < mPlaybackThreads.size(); i++) for (uint32_t i = 0; i < mPlaybackThreads.size(); i++)
mPlaybackThreads.valueAt(i)->setMasterMute(muted); mPlaybackThreads.valueAt(i)->setMasterMute(muted);
@ -579,6 +586,7 @@ status_t AudioFlinger::setStreamMute(int stream, bool muted)
return BAD_VALUE; return BAD_VALUE;
} }
AutoMutex lock(mLock);
mStreamTypes[stream].mute = muted; mStreamTypes[stream].mute = muted;
for (uint32_t i = 0; i < mPlaybackThreads.size(); i++) for (uint32_t i = 0; i < mPlaybackThreads.size(); i++)
mPlaybackThreads.valueAt(i)->setStreamMute(stream, muted); mPlaybackThreads.valueAt(i)->setStreamMute(stream, muted);

View File

@ -1052,25 +1052,27 @@ AudioPolicyManagerBase::AudioPolicyManagerBase(AudioPolicyClientInterface *clien
updateDeviceForStrategy(); updateDeviceForStrategy();
#ifdef AUDIO_POLICY_TEST #ifdef AUDIO_POLICY_TEST
AudioParameter outputCmd = AudioParameter(); if (mHardwareOutput != 0) {
outputCmd.addInt(String8("set_id"), 0); AudioParameter outputCmd = AudioParameter();
mpClientInterface->setParameters(mHardwareOutput, outputCmd.toString()); outputCmd.addInt(String8("set_id"), 0);
mpClientInterface->setParameters(mHardwareOutput, outputCmd.toString());
mTestDevice = AudioSystem::DEVICE_OUT_SPEAKER; mTestDevice = AudioSystem::DEVICE_OUT_SPEAKER;
mTestSamplingRate = 44100; mTestSamplingRate = 44100;
mTestFormat = AudioSystem::PCM_16_BIT; mTestFormat = AudioSystem::PCM_16_BIT;
mTestChannels = AudioSystem::CHANNEL_OUT_STEREO; mTestChannels = AudioSystem::CHANNEL_OUT_STEREO;
mTestLatencyMs = 0; mTestLatencyMs = 0;
mCurOutput = 0; mCurOutput = 0;
mDirectOutput = false; mDirectOutput = false;
for (int i = 0; i < NUM_TEST_OUTPUTS; i++) { for (int i = 0; i < NUM_TEST_OUTPUTS; i++) {
mTestOutputs[i] = 0; mTestOutputs[i] = 0;
}
const size_t SIZE = 256;
char buffer[SIZE];
snprintf(buffer, SIZE, "AudioPolicyManagerTest");
run(buffer, ANDROID_PRIORITY_AUDIO);
} }
const size_t SIZE = 256;
char buffer[SIZE];
snprintf(buffer, SIZE, "AudioPolicyManagerTest");
run(buffer, ANDROID_PRIORITY_AUDIO);
#endif //AUDIO_POLICY_TEST #endif //AUDIO_POLICY_TEST
} }
@ -1091,6 +1093,11 @@ AudioPolicyManagerBase::~AudioPolicyManagerBase()
mInputs.clear(); mInputs.clear();
} }
status_t AudioPolicyManagerBase::initCheck()
{
return (mHardwareOutput == 0) ? NO_INIT : NO_ERROR;
}
#ifdef AUDIO_POLICY_TEST #ifdef AUDIO_POLICY_TEST
bool AudioPolicyManagerBase::threadLoop() bool AudioPolicyManagerBase::threadLoop()
{ {

View File

@ -68,6 +68,8 @@ AudioPolicyService::AudioPolicyService()
{ {
char value[PROPERTY_VALUE_MAX]; char value[PROPERTY_VALUE_MAX];
Mutex::Autolock _l(mLock);
// start tone playback thread // start tone playback thread
mTonePlaybackThread = new AudioCommandThread(String8("")); mTonePlaybackThread = new AudioCommandThread(String8(""));
// start audio commands thread // start audio commands thread
@ -88,9 +90,18 @@ AudioPolicyService::AudioPolicyService()
} }
#endif #endif
// load properties if ((mpPolicyManager != NULL) && (mpPolicyManager->initCheck() != NO_ERROR)) {
property_get("ro.camera.sound.forced", value, "0"); delete mpPolicyManager;
mpPolicyManager->setSystemProperty("ro.camera.sound.forced", value); mpPolicyManager = NULL;
}
if (mpPolicyManager == NULL) {
LOGE("Could not create AudioPolicyManager");
} else {
// load properties
property_get("ro.camera.sound.forced", value, "0");
mpPolicyManager->setSystemProperty("ro.camera.sound.forced", value);
}
} }
AudioPolicyService::~AudioPolicyService() AudioPolicyService::~AudioPolicyService()