diff options
author | Eric Laurent <elaurent@google.com> | 2015-10-15 22:03:29 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-10-15 22:03:29 +0000 |
commit | 0eb5a2706de25728f7ad2fd8febf960ca3c5e42d (patch) | |
tree | 7ed075b3d505b5d25869c7d65dc1ac097b7530b2 /services | |
parent | ceb10ea795d92d889201cd40f5ac6290edf4ded7 (diff) | |
parent | c0a889f766953b657a5e997bc1362661806d3a19 (diff) | |
download | frameworks_av-0eb5a2706de25728f7ad2fd8febf960ca3c5e42d.zip frameworks_av-0eb5a2706de25728f7ad2fd8febf960ca3c5e42d.tar.gz frameworks_av-0eb5a2706de25728f7ad2fd8febf960ca3c5e42d.tar.bz2 |
Merge "audio policy: fix transition from VoIP to voice call on USB" into mnc-dr-dev
Diffstat (limited to 'services')
-rw-r--r-- | services/audiopolicy/managerdefault/AudioPolicyManager.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index aa4486d..5ff1c0b 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -402,6 +402,20 @@ void AudioPolicyManager::updateCallRouting(audio_devices_t rxDevice, int delayMs patch.num_sources = 2; } + // terminate active capture if on the same HW module as the call TX source device + // FIXME: would be better to refine to only inputs whose profile connects to the + // call TX device but this information is not in the audio patch and logic here must be + // symmetric to the one in startInput() + audio_io_handle_t activeInput = mInputs.getActiveInput(); + if (activeInput != 0) { + sp<AudioInputDescriptor> activeDesc = mInputs.valueFor(activeInput); + if (activeDesc->getModuleHandle() == txSourceDeviceDesc->getModuleHandle()) { + audio_session_t activeSession = activeDesc->mSessions.itemAt(0); + stopInput(activeInput, activeSession); + releaseInput(activeInput, activeSession); + } + } + afPatchHandle = AUDIO_PATCH_HANDLE_NONE; status = mpClientInterface->createAudioPatch(&patch, &afPatchHandle, 0); ALOGW_IF(status != NO_ERROR, "setPhoneState() error %d creating TX audio patch", @@ -1505,6 +1519,15 @@ status_t AudioPolicyManager::startInput(audio_io_handle_t input, return INVALID_OPERATION; } } + + // Do not allow capture if an active voice call is using a software patch and + // the call TX source device is on the same HW module. + // FIXME: would be better to refine to only inputs whose profile connects to the + // call TX device but this information is not in the audio patch + if (mCallTxPatch != 0 && + inputDesc->getModuleHandle() == mCallTxPatch->mPatch.sources[0].ext.device.hw_module) { + return INVALID_OPERATION; + } } // Routing? |